Каждый раз, когда мне нужно спроектировать новую базу данных, я трачу довольно много времени на размышления о том, как мне настроить схему базы данных, чтобы вести журнал аудита изменений.
Здесь уже задавались некоторые вопросы по этому поводу, но я не согласен с тем, что существует единый лучший подход для всех сценариев:
- Дизайн базы данных для ревизий
- Лучший дизайн для таблицы базы данных аудита журнала изменений
- Идеи по созданию базы данных для сбора контрольных записей
Я также наткнулся на эту интересную статью "Ведение журнала изменений базы данных", в которой попытался перечислить все "за" и "против" каждого подхода. Это очень хорошо написано и имеет интересную информацию, но это сделало мои решения еще сложнее.
Мой вопрос: есть ли ссылка, которую я могу использовать, может быть, книга или что-то вроде дерева решений, на которое я могу сослаться, чтобы решить, каким путем мне идти, основываясь на некоторых входных переменных, например:
- Зрелость схемы базы данных
- Как будут запрашиваться журналы
- Вероятность того, что будет необходимо воссоздать записи
- Что важнее: написать или прочитать производительность
- Природа значений, которые регистрируются (строка, числа, капли)
- Доступное место для хранения
Подходы, которые я знаю:
1. Добавить столбцы для созданной и измененной даты и пользователя
Пример таблицы:
- Я бы
- значение_1
- значение_2
- VALUE_3
- Дата создания
- MODIFIED_DATE
- создано
- модифицирован
Основные минусы: мы теряем историю модификаций. Не могу откатиться после коммита.
2. Вставьте только таблицы
- Я бы
- значение_1
- значение_2
- VALUE_3
- от
- в
- удалено (логическое)
- пользователь
Основные минусы: как поддерживать актуальность внешних ключей? Нужно огромное пространство
3. Создайте отдельную таблицу истории для каждой таблицы
Пример таблицы истории:
- Я бы
- значение_1
- значение_2
- VALUE_3
- value_4
- пользователь
- удалено (логическое)
- timestamp
Основные минусы: необходимо дублировать все проверенные таблицы. Если схема изменится, потребуется перенести и все журналы.
4. Создайте сводную таблицу истории для всех таблиц
Пример таблицы истории:
- table_name
- поле
- пользователь
- new_value
- удалено (логическое)
- timestamp
Основные минусы: Смогу ли я легко воссоздать записи (откат), если это необходимо? Столбец new_value должен быть огромной строкой, чтобы он мог поддерживать все типы столбцов.