Использование таблиц аудита для измененной / созданной информации - PullRequest
0 голосов
/ 29 июня 2011

Мне нужно отслеживать

  • CreatedByUserId
  • ModifiedByUserId
  • CreatedDateTime
  • ModifiedDateTime

для большинства моих сущностей. Довольно стандартный.

Считаете ли вы, что лучше добавлять эти столбцы в каждую таблицу ... или просто иметь CreatedAuditEntryId и ModifiedAuditEntryId FK в таблицах, которые вы хотите проверять, которые указывают на существующие отдельные таблицы аудита, которые используются для отслеживания всех изменений.

AuditEntry выглядит так:

  • Id
  • UserId
  • DateTime

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

UPDATE:

Просто чтобы прояснить, таблица AuditEntry содержит каждую модификацию каждой таблицы, независимо от нее. Вопрос здесь заключается в том, использовать ли эту таблицу для Созданной и Измененной информации через FK ... или просто добавить четыре столбца выше к каждой таблице, для которой я хочу получить информацию, чтобы избежать объединений.

Ответы [ 2 ]

1 голос
/ 29 июня 2011

Я бы предпочел отдельную таблицу аудита с отношением FK, в противном случае вы можете видеть только последнюю запись, и это не очень похоже на аудит ...

Что вы используете для обновления этих записей? Если UserID может подразумеваться от пользователя SQL, все это может быть сделано в триггерах.

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

РЕДАКТИРОВАТЬ: ввиду обновленного вопроса, в котором ясно, что таблица Аудит будет существовать в любом случае, я должен был бы выбрать ссылку на таблицу аудита. Мысль о наличии непоследовательных данных аудита слишком страшна! Если приложение полностью не ограничено реляционным дизайном, сохраняйте его нормализованным!

1 голос
/ 29 июня 2011

«Лучше» зависит от ваших потребностей.

Если все, что вам нужно, это ПОСЛЕДНЕЕ событие модификации, то лучше (ресурснее) добавить столбцы аудита в таблицу.В этом случае обновление будет касаться только одной строки.

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

...