История редактирования БД с возможностью отмены действий

Drakon

Новичок
История редактирования БД с возможностью отмены действий

Есть БД примерно из 20-ти таблиц InnoDB с заданными Foreign Keys.
На БД задан определённый список штатных операций: добавление/удаление/редактирование (Add/Delete/Modify = ADM) компаний, ADM торговых точек для компаний и т. д. Сейчас эти операции реализованы на уровне PHP (т. е. ни одной функции не определено в БД).
Необходимо создать историю редактирования БД по каждой операции с возможностью отмены результатов работы операции...
Даже не знаю с какой стороны подойти...

Пока что вижу такой путь: создаю 2 таблицы, которые будут хранить все проделанные операции.
1-ая таблица: лог составных операций (например удаление компании - это составная операция, т. к. в результате удаляется компания, привязка компании к рубрикатору, торговые точки компании), т. е. составная операция производится над несколькими таблицами
2-ая таблица: атомарные операции (над одной таблицей)
- ID составной операции
- тип операции (Add/Delete/Modify)
- ID объекта операции
- имя таблица, в которой производится операция
- старые значения полей
- новые значения полей
- список изменённых полей

Возможно есть какие-то готовые решения подобных проблем?
 

findnext

Новичок
Drakon
не знаю насчёт готовых, но у нас именно так и реализовано, таким способом. Единственное что не нужно хранить значения старых полей, потому что ты будешь всегда видеть из предыдущей записи какими они были до обновления.

Только вот у нас 1 таблица и вполне справляется с этими задачами.
 

dimagolov

Новичок
Единственное что не нужно хранить значения старых полей, потому что ты будешь всегда видеть из предыдущей записи какими они были до обновления.
Тут самый хитрый момент будет когда потребуется откатить одну операцию из середины истории. Понятно, что берем прошлый снимок, на него накатываем все операции ДО той, что откатываем. Лажа в том, что не все операции ПОСЛЕ отмененной можно будет произвести, то есть нужно строить дерево зависимостей операций. Или откатывать ВСЕ до какого-то момента, но это часто может быть неприемлемым.
 
Сверху