Я прочитал несколько статей в Интернете, а также несколько ответов на StackOverflow о создании контрольного журнала для приложения, управляемого базой данных. Кажется, что наиболее популярным решением является создание таблицы аудита для рассматриваемой таблицы и использование триггеров для вставки записи аудита в таблицу аудита.
Я вижу, как это будет хорошо работать для простых сущностей, данные которых содержатся в одной таблице.
А как насчет совокупных корней, содержащих потомков?
Пример:
Заказ - это совокупный корень, содержащий множество строк заказов, каждая со своей собственной таблицей в базе данных. Предположим, что у каждого из них также есть таблица аудита в базе данных, которая получает обновления через триггеры при изменении исходной таблицы:
tblOrders --> Trigger --> tblOrdersAudit
tblOrderLines --> Trigger --> tblOrderLinesAudit
Теперь предположим, что мы что-то меняем в Заказе, но не вносим изменений ни в одну из его Строк Заказов. В результате обновляется tblOrders, а триггер вставляет новую запись аудита, отражающую изменения в tblOrdersAudit. Однако в tblOrderLines не было внесено никаких изменений, и в результате в tblOrderLinesAudit нет соответствующей записи аудита.
Некоторое время спустя мне нужно увидеть более раннее состояние Ордена, возможно, для отката данных. Как согласовать записи аудита?
tblOrderLines
, так как ничего не изменилось, верно? Вам по какой-то причине нужна запись аудита дляtblOrderLines
? Что бы он сказал? - person IAmTimCorey   schedule 14.05.2011