Как создать контрольный журнал для совокупных корней? - PullRequest
1 голос
/ 14 мая 2011

Я прочитал несколько статей в Интернете, а также несколько ответов на StackOverflow о создании контрольного журнала для приложения, управляемого базой данных.Кажется, что наиболее популярным решением является создание таблицы аудита для рассматриваемой таблицы и использование триггеров для вставки записи аудита в таблицу аудита.

Я вижу, как это будет работать для простых объектов, данные которыхсодержится в одной таблице.

А как насчет совокупных корней, которые содержат дочерние элементы?

Пример:

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

tblOrders --> Trigger --> tblOrdersAudit
tblOrderLines --> Trigger --> tblOrderLinesAudit

Теперь предположим, что мы что-то изменили в Ордере, но не вносим никаких изменений ни в один из его Порядков.линии.В результате tblOrders обновляется, и триггер вставляет новую запись аудита, отражающую изменения в tblOrdersAudit.Однако в tblOrderLines не было внесено никаких изменений, и в результате в tblOrderLinesAudit нет соответствующей записи аудита.

Некоторое время спустя мне нужно увидеть более раннее состояние Ордена, возможно, для отката данных.Как мы сопоставляем записи аудита?

Ответы [ 2 ]

1 голос
/ 14 мая 2011

В случае отката, разве вы не будете делать это на основе таблицы? Предположим, что только изменения, внесенные в базу данных, произошли с тех пор, как T-1 был обновлением tblOrders. В этом случае

  1. tblOrders будет возвращено к времени T-1: Значения аудита будут использованы для возврата tblOrders к тому, что было в T-1.

  2. tblOrdersLines будет перенесено на время T-1: в tblOrdersLineAudit нет записи и, следовательно, ничего не будет обновлено.

В конце концов ваши таблицы находятся в состоянии, в котором они находились на уровне T-1.

Несколько ссылок для получения дополнительной информации -

0 голосов
/ 14 мая 2011

Через некоторое время мне нужно увидеть более раннее состояние Ордена, возможно, для отката данных. Как мы сопоставляем записи аудита?

Не просто, как вы правильно определили.

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

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

...