Как реализовать историю изменений таблицы?
Есть задача: реализовать журнал правок для этой таблицы:
Должна быть возможность вносить изменения для нескольких полей за одну правку, возможность откатить изменения.
Вопрос: как хранить историю этих правок в базе данных?
Ответы (2 шт):
Решение задачи по хранению истории зависит от таких факторов, как время хранения, объем данных, скорость записи, количество таблиц, поддержка изменения структуры таблиц и др. Поэтому совсем универсального решения нет.
Многие БД поддерживают технологию Flashback, это когда можно просматривать данные, какими они были некоторое время назад. Обычно для этого требуется значительное место для хранения и технология чувствительна к изменению структуры таблиц.
Если требуется хранения только истории предствленной таблицы, то простыми решениями будут следующие:
- Хранить данные в этой же таблице, добавив столбец со ссылкой на предыдущую запись. Плюсом будет нечуствительность к изменению структуры, минусы - избыточность, т.к. будут каждый раз хнаниться все поля, даже те которые не изменялись, сложная обработка по сравнению и восстановлению данных.
Про возможность изменения нескольких полей я не очень понял 2. Хранить данные в этой практически идентичной таблице, со ссылкой на основную таблицу и возможностью хранения всех полей пустыми. Плюсы, минусы противоположны предыдущему решению. 3. Хранить данные в таблице поле-значение. Плюсы не требует отслеживать изменение структуры, минусы отсутвие типизации и поддержки обработки некотрых типов полей, например BLOB.
Простым и универсальным способом отслеживания изменений будут триггеры для таблицы на вставку, изменение, удаление.
Надо смотреть триггеры(хранимые процедуры) на события по той базе данных, что вы используете. Если такая архитектура не противоречит удобству развёртывания новых копий приложения и разработке.