(На группу администраторов баз данных не было получено много ответов, поэтому я попытал счастья здесь)
Итак, у меня есть эта концепция в моей голове "неизменяемых" записей, что, я уверен, нероман, но не могу найти правильные ключевые слова Google.
По сути, исторические значения строк должны быть сохранены как «устаревшие», но по-прежнему могут ссылаться как FK из более старых записей.Эти типы модификаций нечасты .Я использую MySQL, который немного ограничивает вещи.Четыре подхода, которые я вижу:
Наивный
- PK - это автоматически генерируемый идентификатор
- obsolete_stamp isотметка времени, указывающая, что значения строк устарели
Недостаток: исторические данные сохраняются, но нет способа отслеживать историю изменений
Лучше :
- PK такой же, как указано выше
- old_id - это идентификатор строки, которую эта строка изменяет (если существует)
- obsolete_stamp (null, если строкаданные являются текущими)
следствие: новые строки являются модификациями старых строк, но новые строки должны обновлять old_id (если он есть)
аудит :
- триггер при обновлении создает новую строку в таблице аудита
недостаток: запросы должны проверять таблицу аудита на наличие устаревших строк
составной ключ:
недостаток: идентификатор не может быть родовымТед заново, только если строка «роман» (без истории);непонятно, как сделать это автоматически.
Я продвигаюсь вперед с опцией «лучше», которая кажется самым простым способом отследить историю изменений.