Управление версиями строк в MySQL - PullRequest
0 голосов
/ 13 апреля 2019

(На группу администраторов баз данных не было получено много ответов, поэтому я попытал счастья здесь)

Итак, у меня есть эта концепция в моей голове "неизменяемых" записей, что, я уверен, нероман, но не могу найти правильные ключевые слова Google.

По сути, исторические значения строк должны быть сохранены как «устаревшие», но по-прежнему могут ссылаться как FK из более старых записей.Эти типы модификаций нечасты .Я использую MySQL, который немного ограничивает вещи.Четыре подхода, которые я вижу:

Наивный

  • PK - это автоматически генерируемый идентификатор
  • obsolete_stamp isотметка времени, указывающая, что значения строк устарели

Недостаток: исторические данные сохраняются, но нет способа отслеживать историю изменений

Лучше :

  • PK такой же, как указано выше
  • old_id - это идентификатор строки, которую эта строка изменяет (если существует)
  • obsolete_stamp (null, если строкаданные являются текущими)

следствие: новые строки являются модификациями старых строк, но новые строки должны обновлять old_id (если он есть)

аудит :

  • триггер при обновлении создает новую строку в таблице аудита

недостаток: запросы должны проверять таблицу аудита на наличие устаревших строк

составной ключ:

  • id + obsolete_stamp

недостаток: идентификатор не может быть родовымТед заново, только если строка «роман» (без истории);непонятно, как сделать это автоматически.

Я продвигаюсь вперед с опцией «лучше», которая кажется самым простым способом отследить историю изменений.

1 Ответ

2 голосов
/ 13 апреля 2019

Как насчет ведения таблицы текущих объектов вместе с таблицей истории?

Вы вставили бы в эту таблицу, используя on duplicate key update. Он будет иметь автоматически увеличивающийся идентификатор, который идентифицирует каждую сущность.

Он также имеет триггер insert / update. Когда вставляется новая строка (или старая строка перезаписывается), эта строка записывается в таблицу истории.

Таблица истории может иметь уникальный идентификатор для таблицы истории, дату / время вставки и все интересующие столбцы. Строки в этой таблице никогда не будут изменены.

...