Спершу я повинен уточнити, що стовпець статусу не призначений для відображення стану реального елемента, представленого записом (рядком) у таблиці. Швидше, це покликане показати статус самої записи.
Він може бути таким же простим, як Активний / Неактивний або складний, як затверджений / видалений / заблокований / очікуючий / відхилений тощо. Статус можна зберігати у булевій / короткій цілій цільній колонці або стовпчику з одним символом, зі зіставленнями на кшталт true
/ 1
= Активний або A
= Затверджено.
Основна ідея полягає у тому, щоб у додатку містилася підтримка відновлення кошика для сміття та сміття (та імітація в базі даних). Якщо є інтерфейс інтерфейсу інтерфейсу або інший інтерфейс, який нібито дозволяє користувачеві "видаляти" записи, він фактично не видаляє запис у таблиці, а просто змінює стан запису на "Неактивний" або "Видалений". Коли інтерфейс отримує записи, він завжди отримує записи, які відповідають лише умові, що статус "Активний" або "Затверджений".
Якщо користувач допустив помилку, і "видалений" запис (з точки зору користувача) потрібно відновити, DBA може легко проклеїти запис до активного або затвердженого, що було б краще, ніж пошук резервних копій і сподіваємось знайти оригінальний запис там. Або сам інтерфейс може дозволити користувачеві переглядати видалені записи в окремому вікні та відновлювати їх за потребою або навіть назавжди видаляти їх (видаляючи фактичний запис).
Мої запитання:
- Це хороша практика, чи погана практика?
- Чи впливає це на нормалізацію даних?
- Які потенційні підводні камені?
- Чи є альтернативний метод досягнення тієї ж мети? (див. примітку)
- Як ви можете змусити базу даних застосовувати унікальні обмеження щодо даних лише для певного статусу (але дозволяти будь-яку кількість дублікатів для інших статусів)?
- Чому бази даних не надають функцію, подібну до "кошика", або відстеження / відновлення таблиць на початковому етапі, тому ми можемо дозволити інтерфейсам видаляти фактичні записи без побоювань?
Примітка. Я читав про підтримку окремої таблиці історії, але це здається гіршим щодо зберігання та необхідності генерування тригерів та оновлення тригерів в актуальному порядку за схемою відстеженої таблиці.