最近、テーブルを監査する方法のトピックが私たちの議論で浮上しました...これにアプローチする最良の方法についてのあなたの意見が好きです. 以前の各 DBA が正しいと信じていたことを実行したため、データベースには両方のアプローチが混在しています (これは良くありません)。したがって、いずれかのモデルに従うように変更する必要があります。
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 について、置き換えられるレコードは、'U' ( UPDATE の場合) または 'D' (DELETE の場合) として 'Audit_Type' 列を使用して監査テーブルに挿入されます。
INSERT は監査されません。レコードの現在のバージョンについては、常にメイン テーブルをクエリします。履歴については、監査テーブルにクエリを実行します。
長所: 以前のバージョンのレコードを保存するのは直感的です 短所: 特定のレコードの履歴を知る必要がある場合は、監査テーブルをメイン テーブルと結合する必要があります。
アプローチ 2:メイン テーブルに入るすべてのレコードを監査テーブルに格納します (システム テーブル INSERTED を使用)。
メインテーブルに INSERTED/UPDATED/DELETED された各レコードは、監査テーブルにも格納されます。したがって、新しいレコードを挿入すると、監査テーブルにも挿入されます。更新されると、(INSERTED からの) 新しいバージョンのテーブルが Audit テーブルに格納されます。削除すると、古いバージョン (DELETED から) のテーブルが監査テーブルに格納されます。
長所: 特定のレコードの履歴を知る必要がある場合、すべてが 1 か所にあります。
すべてをここに挙げたわけではありませんが、それぞれのアプローチには長所と短所があります。