Не делайте того, что вы думаете, придерживайтесь своего оригинального дизайна - сохраняйте все поля одитинга так, как они относятся к каждой таблице на самой таблице.Добавление таблицы, в которой хранятся поля аудита из других таблиц, просто создает кошмар проектирования.
Теперь возникает вопрос, как отслеживать транзакцию аудита.Дизайн, который мне нравится, выглядит следующим образом:
- CreateBy.Добавить привязку по умолчанию SUBSTRING (SUSER_NAME (), 1,50)
- CreateTs.Добавить привязку по умолчанию GETDATE ()
- UpdateBy
- UpdateTs
Допускается принудительное удаление (т. Е. Неверные данные).Мягкие удаления происходят в форме дополнительного столбца, называемого ActiveInd (BIT), где эта транзакция будет храниться как обновление.Это означает, что обновления и программные удаления записываются в столбцы UpdateBy / UpdateTs.
Это должно дать вам то, что вам нужно, если вы собираетесь отслеживать активность из веб-приложения.Если у вас есть внутренняя система, которая загружает и манипулирует данными, я бы включил таблицу LoadInfo, которая отслеживает все задания, а затем вы можете добавить как LoadSequenceKey, так и ParentSequenceKey (добавьте здесь собственный ссылочный внешний ключ), а затем вы можетесоздайте внешний ключ во всех таблицах, которые модифицируются заданиями, в которых ключ последовательности хранится как CreateSequenceKey или UpdateSequenceKey.
Исходя из моего опыта работы со StackOverflow, это, вероятно, лучший ответ, который вы получите, учитывая, что большинство из них:проголосуйте против или расскажите о том, как мы здесь решаем конкретные проблемы с кодом, а не о широких вопросах проектирования.
Примечание. Я не голосовал против вашего вопроса.