Как реализовать историю изменений таблицы?

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

Вопрос: как хранить историю этих правок в базе данных?


Ответы (2 шт):

Автор решения: Alex R.

Решение задачи по хранению истории зависит от таких факторов, как время хранения, объем данных, скорость записи, количество таблиц, поддержка изменения структуры таблиц и др. Поэтому совсем универсального решения нет.

Многие БД поддерживают технологию Flashback, это когда можно просматривать данные, какими они были некоторое время назад. Обычно для этого требуется значительное место для хранения и технология чувствительна к изменению структуры таблиц.

Если требуется хранения только истории предствленной таблицы, то простыми решениями будут следующие:

  1. Хранить данные в этой же таблице, добавив столбец со ссылкой на предыдущую запись. Плюсом будет нечуствительность к изменению структуры, минусы - избыточность, т.к. будут каждый раз хнаниться все поля, даже те которые не изменялись, сложная обработка по сравнению и восстановлению данных.

Про возможность изменения нескольких полей я не очень понял 2. Хранить данные в этой практически идентичной таблице, со ссылкой на основную таблицу и возможностью хранения всех полей пустыми. Плюсы, минусы противоположны предыдущему решению. 3. Хранить данные в таблице поле-значение. Плюсы не требует отслеживать изменение структуры, минусы отсутвие типизации и поддержки обработки некотрых типов полей, например BLOB.

Простым и универсальным способом отслеживания изменений будут триггеры для таблицы на вставку, изменение, удаление.

→ Ссылка
Автор решения: Vladimir Galkov

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

→ Ссылка