БД Дизайн для отслеживания записей - PullRequest
0 голосов
/ 23 июня 2018

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

У меня есть пользовательская таблица, которая имеет int как PKи каждое из соответствующих полей (CreatedBy, LastModifiedBy, DeletedBy) содержит целое число, указывающее на строку пользователя.

У меня есть полная настройка аудита, где во всей строке хранится старое / новое содержимое, сохраненное всохранить и это прекрасно работает.Но этот конкретный вопрос касается более немедленного создания / изменения / удаления путем отслеживания.

Служба поддержки - это, как правило, те, кто ежедневно использует эти поля, чтобы помочь пользователям быстро определить, что происходит, но в самом приложении есть множество мест, которые в конечном итоге будут опираться на эти поля (более того, создаваемые / изменяемые изперспектива приложения).

Вопрос: Я собирался создать отношение pk / fk между таблицами и пользовательской таблицей.Тем не менее, это заставило меня задуматься о том, существует ли лучшая стратегия, чем добавлять эти три поля и отношения в каждую таблицу в будущем.Может быть, одна таблица, в которой хранится имя таблицы с ее pk и созданными / измененными / удаленными столбцами, имеющими отношение к пользовательской таблице, так что только 1 таблица имеет эти pk / fk-отношения обратно к пользователю.Я просто чувствую, что должен быть лучший способ / более эффективный способ справиться с этим.Есть ли лучший способ справиться с этим?

1 Ответ

0 голосов
/ 23 июня 2018

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

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

  • CreateBy.Добавить привязку по умолчанию SUBSTRING (SUSER_NAME (), 1,50)
  • CreateTs.Добавить привязку по умолчанию GETDATE ()
  • UpdateBy
  • UpdateTs

Допускается принудительное удаление (т. Е. Неверные данные).Мягкие удаления происходят в форме дополнительного столбца, называемого ActiveInd (BIT), где эта транзакция будет храниться как обновление.Это означает, что обновления и программные удаления записываются в столбцы UpdateBy / UpdateTs.

Это должно дать вам то, что вам нужно, если вы собираетесь отслеживать активность из веб-приложения.Если у вас есть внутренняя система, которая загружает и манипулирует данными, я бы включил таблицу LoadInfo, которая отслеживает все задания, а затем вы можете добавить как LoadSequenceKey, так и ParentSequenceKey (добавьте здесь собственный ссылочный внешний ключ), а затем вы можетесоздайте внешний ключ во всех таблицах, которые модифицируются заданиями, в которых ключ последовательности хранится как CreateSequenceKey или UpdateSequenceKey.

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

Примечание. Я не голосовал против вашего вопроса.

...