Как правильно версионировать записи в БД и следить за изменениями?

Добрый вечер.

Есть таблица в БД, в которую по расписанию загружаются данные из большого файла-дампа.
Каждый дамп атомарный - т.е., содержит все записи, которые надо вставить в данный момент, и все записи берутся только из этого одного дампа.

Для них нужно сохранять версионность каждой записи и следить за их изменениями: появлением новых, изменением и удалением старых.

Сейчас это реализовано так:

  1. Две таблицы: main и history с одинаковой структурой;
  2. В mainпервичный ключ - айди записи;
  3. В historyпервичный ключ - хеш от всех полей таблицы;
  4. Входные данные обрабатываются и чистятся;
  5. Вставляются по одной записи в таблицу main с on duplicate key update;
  6. После вставки строки берется mysql_affected_rows, если 1 - запись новая, если 2 - запись уже была, но изменилась;
  7. Считается хеш от данных, и эта же строка с хешем вставляется в history


В результате в main лежат актуальные записи, в history - история изменений каждой + актуальная запись.

Правильный ли это алгоритм?

Как в таком случае отследить удаление записи - когда она была в прошлом дампе, но исчезла в текущем?
Пока я вижу только такой подход: для каждой записи в main добавить поле datetime- дата изменения/загрузки дампа. После вставки всех записей делать второй проход - выборку всех записей, для которых это поле не обновилось - они будут считаться удалёнными из текущего дампа, и скрипт будет на это соответственно реагировать.
  • Вопрос задан
  • 1542 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы