У нас есть сущность, разделенная на 5 разных таблиц. Записи в 3 из этих таблиц являются обязательными. Записи в двух других таблицах являются необязательными (в зависимости от подтипа сущности).
Одна из таблиц обозначена как основная сущность. Записи в других четырех таблицах вводятся по уникальному идентификатору от мастера.
После того, как триггер обновления / удаления присутствует в каждой таблице, а изменение записи сохраняет историю (из удаленной таблицы внутри триггера) в связанную таблицу истории. Каждая таблица истории содержит связанные поля сущностей + временную метку.
Таким образом, текущие записи всегда находятся в живых таблицах, а история / изменения - в таблицах истории. Исторические записи можно упорядочить по столбцу меток времени. Очевидно, что столбцы меток времени не связаны между таблицами истории.
Теперь, для более сложной части.
- Записи изначально вставляются в одну транзакцию. В одну транзакцию будет записано 3 или 5 записей.
- Отдельные обновления могут происходить с любой или всеми 5 таблицами.
- Все записи обновляются как часть одной транзакции. Опять же, 3 или 5 записей будут обновлены в одной транзакции.
- Номер 2 может повторяться несколько раз.
- Номер 3 может повторяться несколько раз.
Приложение должно отображать список записей истории за определенный период времени на основе записей, записанных только в виде отдельных транзакций (только пункты 1,3 и 5)
В настоящее время у меня проблемы с алгоритмом, который будет извлекать исторические записи, основываясь только на данных временной отметки.
Добавление таблицы HISTORYMASTER для хранения дополнительной информации о транзакциях, кажется, частично решает проблему. Новая запись добавляется в HISTORYMASTER перед каждой транзакцией. Новый HISTORYMASTER.ID сохраняется в каждой таблице сущностей во время транзакции.
Историю точки во времени можно получить, выбрав первую запись для определенного HISTORYMASTER.ID (упорядоченного по метке времени)
Есть ли более оптимальный способ управления таблицами аудита на основе AFTER (UPDATE, DELETE) TRIGGER для сущностей, охватывающих несколько таблиц?