關於如何審計表的話題最近出現在我們的討論中...所以我喜歡你的意見,最好的辦法是什麼來解決這個問題。在我們的數據庫中,我們有兩種方法的組合(這不是很好),因爲之前的每個DBA都做了他/她認爲正確的方法。所以我們需要改變他們遵循任何一個模型。審計觸發器:使用INSERTED或DELETED系統表
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:商店,在審計表從主表中刪除對於被替換,只有那些記錄/(使用系統表刪除)。因此,對於主表中的每個UPDATE和DELETE,正在被替換的記錄被插入審計表中,其中'Audit_Type'列爲萎凋'U'(用於UPDATE)或'D'(用於DELETE)
INSERT未經審覈。對於任何記錄的當前版本,您總是查詢主表。對於歷史記錄,您可以查詢審計表。
優點:似乎很直觀,用於存儲以前版本的記錄 缺點:如果您需要了解特定記錄的歷史記錄,則需要將審計表與主表連接起來。
Appraoch 2:在審計表中存儲每個進入主表的記錄(使用系統表INSERTED)。
INSERTED/UPDATED/DELETED到主表的每條記錄也存儲在審計表中。所以當你插入一條新記錄時,它也被插入到審計表中。更新後,新版本(來自INSERTED)表存儲在審計表中。被刪除時,舊版本(來自DELETED)表被存儲在審計表中。優點:如果您需要了解特定記錄的歷史記錄,則可以在一個位置查看所有記錄。
雖然我沒有在這裏列出所有這些,每種方法都有其優點和缺點嗎?
在我把所有的想法寫進這個問題後,重新閱讀之後,我也有同樣的想法。方法2似乎是一個更好的方法。小小的頭頂可以忽略不計。感謝您的輸入。 – 2009-09-25 18:20:26