Тема аудита таблиц недавно возникла в наших обсуждениях ... так что мне нравится ваше мнение о том, как лучше всего подойти к этому. У нас есть сочетание обоих подходов (что нехорошо) в нашей базе данных, поскольку каждый предыдущий администратор базы данных делал то, что он / она считал правильным. Поэтому нам нужно изменить их, чтобы они соответствовали какой-либо одной модели.
CREATE TABLE dbo.Sample(
Name VARCHAR(20),
...
...
Created_By VARCHAR(20),
Created_On DATETIME,
Modified_By VARCHAR(20),
Modified_On DATETIME
)
CREATE TABLE dbo.Audit_Sample(
Name VARCHAR(20),
...
...
Created_By VARCHAR(20),
Created_On DATETIME,
Modified_By VARCHAR(20),
Modified_On DATETIME
Audit_Type VARCHAR(1) NOT NULL
Audited_Created_On DATETIME
Audit_Created_By VARCHAR(50)
)
Подход 1: Храните в таблицах аудита только те записи, которые заменены / удалены из основной таблицы (с использованием системной таблицы DELETED). Таким образом, для каждого UPDATE и DELETE в основной таблице заменяемая запись ВСТАВЛЯЕТСЯ в таблицу аудита со столбцом Audit_Type как с буквой U (для UPDATE) или D (для DELETE).
ВСТАВКИ не проходят аудит. Для текущей версии любой записи вы всегда запрашиваете основную таблицу. А для истории вы запрашиваете таблицу аудита.
Плюсы: кажется интуитивно понятным, хранить предыдущие версии записей. Минусы: если вам нужно знать историю конкретной записи, вам нужно объединить таблицу аудита с основной таблицей.
Оценка 2: Сохраните в таблице аудита каждую запись, которая входит в основную таблицу (с использованием системной таблицы INSERTED).
Каждая запись, которая вставлена / обновлена / удалена в основную таблицу, также сохраняется в таблице аудита. Таким образом, когда вы вставляете новую запись, она также вставляется в таблицу аудита. При обновлении таблица новой версии (из INSERTED) сохраняется в таблице аудита. При удалении таблица старой версии (из DELETED) сохраняется в таблице аудита.
Плюсы: если вам нужно знать историю конкретной записи, у вас есть все в одном месте.
Хотя я не перечислил их все здесь, у каждого подхода есть свои плюсы и минусы?