MySQL « Версионность БД

Есть БД примерно такой структуры.

medium.gif

Как лучше будет отслеживать изменения? Т.е. нужно иметь возможность в любой момент времени откатить изменения (не к последней, а к любой версии) не всей БД, а только определённых записей.

1 ответов


Можно почитать: habrahabr.ru/blogs/sql/101544/. Модификация для Oracle: habrahabr.ru/blogs/oracle/107745.
В любом случае, понадобится дублировать данные. Значит архитектуру таблиц надо будет менять или дополнять. Надо будет подумать как часто будут меняться данные, целиком вся строка или только одно поле из нее, часто ли надо будет восстанавливать и т.п. В зависимости от этого выбрать способ. Я лично предпочитаю 4-ый вариант из списка по 1-ой ссылке: дублирование версий в другую таблицу. Это самый быстрый способ, но требует создания вдвое большего числа таблиц и чуть более требователен к объему дискового пространства.


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