Аудит полей (CreatedBy, updatedBy) в таблицах. Это хорошая идея? - PullRequest
2 голосов
/ 09 сентября 2011

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

Я разрабатываю новый продукт и снова думаю об этом.Это должно быть так?Очевидно, это хорошо знать, кто создал запись и когда.Но иметь 300+ таблиц, ссылающихся на одну и ту же таблицу пользователей, не очень хорошо ..

Как вы справляетесь с такими вещами?Должен ли я создавать столбец CreatedBy только на основных объектах, где он, скорее всего, необходим в пользовательском интерфейсе и чем заниматься объединением?Или я должен пойти и поставить его везде?Или, может быть, есть другая таблица «Аудит», где я храню все это и смотрю ее только по требованию (не каждый раз, когда сущность отображается в пользовательском интерфейсе)

Я просто беспокоюсь о аспекте производительности, когда каждый запрос пользовательского интерфейса будет поражать пользователятаблица ..

РЕДАКТИРОВАТЬ: Это будет база данных SQL Server 2008 R2

Ответы [ 2 ]

3 голосов
/ 09 сентября 2011

Проблема с этим подходом состоит в том, что вы знаете только, кто создал строку и кто изменил строку last .Что, если последний, кто обновил строку, исправлял ошибку предыдущего средства обновления?

Если вы заинтересованы в проведении полного аудита по соображениям соответствия или подотчетности, вам, вероятно, следует изучить Аудит SQL Server .Вы можете определять, какие таблицы вы проверяете, изменять их на лету, не связываясь с вашей схемой, и вы можете писать запросы к этим данным специально, вместо того, чтобы смешивать логику аудита с обычной логикой запросов приложений (не говоря уже о расширении каждойстрока самой таблицы).Это также позволит вам проверять SELECT запросов, которые другие потенциальные решения (триггеры, CDC, отслеживание изменений - все из которых либо больше работают, либо не завершены для истинных целей аудита) не позволят вам сделать это.

0 голосов
/ 06 февраля 2017

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

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

Я обычно добавляю следующее в конец таблицы

IsDeleted bit default 0
CreatedBy varchar(20)
CreatedOn datetime2 default getdate()
UpdatedBy varchar(20)
UpdatedOn datetime2 default getdate()
...