Таблицы аудита: каждое поле для таблицы или одной таблицы
в моем проекте все в порядке, кроме полей аудита. Просто вставка и обновление проверяются в нашей воображаемой вселенной.
Я предложил одну таблицу, похожую на следующие примеры:
лучший дизайн для таблицы базы данных журнала изменений / аудита?
предложения по внедрению таблиц аудита в SQL Server? Просто имя таблицы, столбец таблицы, пользователь, действие и дата.
но моя команда не думала так же, они помещали столбец в каждую таблицу для отслеживания обновления или вставки времени. А когда я спросил ... --21-->почему? они сказали мне, что так они следят за своей работой.
в конце концов я сдаюсь, и я ставлю каждое поле на каждую таблицу. Так как вся команда, кроме меня, сказала мне поставить эти поля.
пример:
подход
Table Customer
+-------------+-------------+-----+--------------------------------+-------------+
| Name | LastName | ... | LastModification (Audit Field) | User |
+-------------+-------------+-----+--------------------------------+-------------+
| varchar(30) | varchar(50) | ... | datetime | varchar(30) |
+-------------+-------------+-----+--------------------------------+-------------+
мой подходи!--3-->
Table Customer
+-------------+-------------+-----+
| Name | LastName | ... |
+-------------+-------------+-----+
| varchar(30) | varchar(50) | ... |
+-------------+-------------+-----+
Table Audit
+-----------+------------+--------+------+-------------+
| TableName | TableField | Action | User | DateAndTime |
+-----------+------------+--------+------+-------------+
Итак, вопрос:
какой дизайн лучше, одна таблица, которая хранит историю транзакций или одно поле для каждой таблицы? (За и против)
1 ответов
что лучший дизайн, одна таблица которые держат историю сделки или одно поле для каждой таблицы? (За и против)
вместо того, чтобы сосредоточиться на 2 вариантах, вот ответ на 4 подхода, с которыми я работал на протяжении многих лет. Каждый со своими плюсами и минусами.
1. Всего три поля
просто добавьте три поля (последнее действие, time_stamp, update_user) в каждую таблицу и назовите это днем.
плюсы супер простой. Хорошо
минусы вы не можете сообщить о данных, которых у вас нет, поэтому эта структура не говорит вам почти ничего (кроме удалений)
2. Таблица клонов
каждая таблица имеет копию плюс три поля аудита, и каждый раз, когда пользователь изменяет запись, таблица аудита вставляется.
плюсы выполняет очень хорошо. Легко создать историю строк, которую пользователь может копать через.
минусы
- каждое изменение базовой таблицы требует соответствующего изменения таблицы аудита.
- если пользователи не хотят, чтобы строка за строкой истории копаться, и они хотят отчет о том, что именно изменилось, это может стать неприятным в Хури. См. ответы на как я могу написать запрос для извлечения отдельных изменений из снимков данных?
3. Таблица Истории только
нет базовой таблицы только в истории. Это в основном то же самое, что и таблица клонов, за исключением того, что теперь вы всегда должны получать текущую запись.
плюсы плюсы 2 но все это вставить. Меньше обслуживания, чем вариант 2.
минусы вы в конечном итоге потеряете прирост обслуживания, потому что вы будете в конечном итоге поддержания представлений или вы будете разбрызгивать get-the-current-record логику повсюду
4. Общая таблица аудита
эта таблица имеет четыре столбца (таблица*, Column_name, old_value, new_value ) и три поля аудита.
плюсы легкий для того чтобы настроить и поддержать.
минусы
его сложным, но он занимает много места, потому что ваш
old_value
иnew_value
поля должны бытьnvarchar(max)
или эквивалент, чтобы он мог принимать все, что есть в базовой таблице.плохо работает при чтении и записи.
его боль, чтобы настроить строку за строкой отчета истории
если есть какой-либо рабочий процесс в отчетах аудита записей может стать нетривиальным. Например, вы получаете требование, чтобы пользователи хотели видеть изменения только после того, как состояние записей станет "утверждено". Это трудно даже в вариантах 2 и 3, но становится катастрофой в общем подходе к аудиту.
резюме
Я предпочитаю #2 подход к таблице клонов, поскольку он, похоже, работает лучше всего для меня. У меня были проблемы с #1 недостаточно и #4 может быть серьезным perf кошмар, который требует много работы, чтобы отменить.