На даний момент у нас є існуюча база даних та програма, яка повністю функціонує. У мене немає можливості змінити архітектуру в цей момент. Сьогодні в кожній таблиці бази даних є поле "IsDeleted" NOT NULL BIT із замовчуванням "0". Коли програма "видаляє" дані, вона просто оновлює прапор IsDeleted до 1.
У мене виникають проблеми з розумінням того, як мають бути структуровані індекси кожної з таблиць. Зараз кожен запит / приєднання / тощо завжди реалізує чек IsDeleted. Це стандарт, якого повинні дотримуватися наші розробники. Зважаючи на це, я намагаюся визначити, чи потрібно змінити всі мої кластеризовані індекси первинного ключа в кожній із таблиць, щоб вони включали первинний ключ І поле IsDeleted BIT. Крім того, оскільки ВСЯКИЙ запит / приєднатися / тощо. повинен реалізувати перевірку IsDeleted, чи є доречним припущення, що ВСЕ єдиний індекс (також некластеризований) повинен включати поле IsDeleted як перше поле індексу?
Ще одне моє запитання - це відфільтровані індекси. Я розумію, що я міг би поставити фільтри на індекси типу "WHERE IsDeleted = 0", щоб зменшити розмір індексів. Однак, оскільки для кожного з'єднання / запиту доведеться реалізувати перевірку IsDeleted, чи не завадить це використано відфільтрований індекс (оскільки стовпець IsDeleted використовується при приєднанні / запиті)?
Пам'ятайте, я не маю можливості змінювати підхід IsDeleted.
IsDeleted
стовпця, незалежно від фізичного зберігання, можливо, було б доцільно викрити дані через два представлення (необов'язково в різних схемах), вирішивши як питання параметризації, так і помилки з доступом до даних, які не повинні були бути звертатися менш імовірно. Доступ до базових даних є актуальним лише для рідкісних випадків, коли видалені та не видалені дані потрібно якось об'єднати, а коли рядки насправді потрібно переключити на "видалені".