最近在我们的讨论中出现了如何审计表的话题……所以我喜欢你对解决这个问题的最佳方法的看法。我们在我们的数据库中混合了这两种方法(这并不好),因为每个以前的 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,被替换的记录被插入到审计表中,其中 'Audit_Type' 列作为枯萎的 'U' (用于 UPDATE )或 'D' (用于 DELETE)
INSERT 未经审计。对于任何记录的当前版本,您总是查询主表。对于历史,您可以查询审计表。
优点:看起来很直观,可以存储以前版本的记录缺点:如果您需要了解特定记录的历史记录,则需要将审计表与主表连接起来。
方法 2:在审计表中存储进入主表的每条记录(使用系统表 INSERTED)。
在主表中插入/更新/删除的每条记录也存储在审计表中。因此,当您插入一条新记录时,它也会插入到审计表中。更新后,新版本(来自 INSERTED)表存储在 Audit 表中。删除时,旧版本(来自 DELETED)表存储在审计表中。
优点:如果您需要了解特定记录的历史,您可以将所有内容集中在一个位置。
虽然我没有在这里列出所有方法,但每种方法都有其优点和缺点?