監査のトリガー:利用に挿入や削除が行なわれるシステムテーブル
-
16-09-2019 - |
質問
を監査テーブルは、最近げるためのプラットフォームでの議論の中では、...そのようなご意見をいただきましたサンドウィッチます。してミックスの両方のアプローチ(はな)のデータベースでは、前各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: 店内は、監査テーブル、データのみを交換/削除からのトラスト-ホールディングス(利用システムテーブルを削除)どれくらい更新、削除、トラスト-ホールディングス、記録する代わって挿入された監査テーブル'Audit_Type'カラムとして枯れ日付/時刻パターン文字"U"(更新)や"D"(削除)
に挿入しない監査人の現在のバージョン記録は、常にクエリのテーブル。やってまいりますのクエリを監査する。
メリット:そうintutive、店舗の以前のバージョンの記録 連結:が必要な場合の歴史を知り、特定の記録に加入することが義務監査テーブルトラスト-ホールディングス.
Appraoch2: 店内は、監査テーブル毎に記録しているでしょうトラスト-ホールディングス(利用システムテーブルの挿入).
各レコードが挿入/更/削除されるトラスト-ホールディングスが保存された監査する。で挿入する場合は新しい記録でも挿入された監査する。が更新され、新しいバージョンから挿入した)テーブルが格納された監査する。が削除され、古いバージョンから削除)テーブルが格納された監査する。
メリット:が必要な場合の歴史を知り、特定の記録、すべての会場に集まります。
がなかったのリストは全てここでは、各アプローチには一長一短が?
解決
いて:
Appraoch2: 店内は、監査テーブル毎に記録しているでしょうトラスト-ホールディングス (システムテーブルの挿入).
一行当たりの項目かの殺DB?このように使いの歴史です。
場合はパージ出行(範囲のすべての以前のX日)まだ何か変更しない:
- 場合、監査には列が存在しないパージ)がご覧いただける場合を行います。
- ていない場合の監査列が存在しな項目(すべての追放)に変更して変更が書き込みの監査テーブルを含む全く新しい項目)
へ行けばAppraoch1:とパージしている、ハード(忘れてはならないことをパージ日まで伝えて新規に挿入しますvs.ものすべての行を追放.
他のヒント
私たちはたくさん使う第三のアプローチは、興味深い列を監査し、「新しい」と各行の「古い」値の両方を保存することです。
あなたの「名前」欄を持っている場合、監査テーブルが「name_old」とを持っているでしょうので、「name_new」ます。
INSERTトリガでは、「name_old」は「name_new」あなたの好みに応じて空白/ nullに設定されINSERTEDから設定されています。 UPDATEトリガでは、「name_old」を挿入から「name_new」DELETEDから設定され DELETEトリガでは、 "name_oldは" ブランク/ nullに削除され、 "NEW_NAME" から設定されます。
(またはあなたが参加FULLとすべての場合に1つのトリガを使用)
は、VARCHARフィールドの場合、このような良いアイデアのように見えないかもしれませんが、INTEGER、DATETIME、等のためにそれはそれは更新の違いを見ることは非常に簡単だという利点を提供しています。
すなわち。あなたがあなたの本当のテーブル内の数量フィールドを持っており、5から7にそれを更新した場合、あなたは、監査テーブルを持っていると思います:
quantity_old quantity_new
5 7
簡単にあなたは量が特定の時間に2増加したことを計算することができます。
あなたは、監査テーブルに別の行がある場合は、差額を計算し、「次」を1行に参加する必要があります - いくつかのケースではトリッキーなことができます...