关于如何审计表的话题最近出现在我们的讨论中...所以我喜欢你的意见,最好的办法是什么来解决这个问题。在我们的数据库中,我们有两种方法的组合(这不是很好),因为之前的每个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