【发布时间】:2011-12-19 23:48:45
【问题描述】:
我的项目中一切都很好,除了审计字段。只需插入和更新即可在我们想象的宇宙中进行审核。
我提出了一个类似于以下示例的表格:
Suggestions for implementing audit tables in SQL Server? 只是表名、表列、用户、操作和日期。
但我的团队不这么认为,他们在每个表上放置一列来跟踪更新或插入时间。当我问为什么?他们告诉我这是他们在工作中保持跟踪的方式。
最后我放弃了,我把每个字段都放在了每张桌子上。因为除了我之外的所有团队,都叫我放那个字段。
例子:
他们的方法
Table Customer
+-------------+-------------+-----+--------------------------------+-------------+
| Name | LastName | ... | LastModification (Audit Field) | User |
+-------------+-------------+-----+--------------------------------+-------------+
| varchar(30) | varchar(50) | ... | datetime | varchar(30) |
+-------------+-------------+-----+--------------------------------+-------------+
我的方法
Table Customer
+-------------+-------------+-----+
| Name | LastName | ... |
+-------------+-------------+-----+
| varchar(30) | varchar(50) | ... |
+-------------+-------------+-----+
Table Audit
+-----------+------------+--------+------+-------------+
| TableName | TableField | Action | User | DateAndTime |
+-----------+------------+--------+------+-------------+
所以问题是:
哪种设计更好,一张表保留交易历史记录,还是每张表一个字段? (优点和缺点)
【问题讨论】:
-
在他们的解决方案中,他们是只维护最后一次 UPDATE 时间的行的单个副本,还是维护行的多个版本?
-
@LarryLustig:副本?他们将列添加到表中。根本不是副本。只是最后修改的字段。
-
“their”方法基于每行提供语义审计,而“your”方法仅基于每个表执行此操作。