【发布时间】:2011-06-29 20:02:51
【问题描述】:
对于我正在从事的公司正在建立的项目,我们需要对用户执行的各种任务(对系统中的表所做的更改)进行审核(存储日志)。目前,只有三种不同类型的任务。但这可能会在未来增长。
我对此的建议是以下架构表和关系(示例):
Table AuditLog
------------------------------
Id | PK
Description
Created
对于每一项任务:
Table ExampleTaskAuditLog
------------------------------
ExampleTaskId | FK PK
AuditLogId | FK PK
还有:
Table AnotherExampleTaskAuditLog
------------------------------
AnotherExampleTaskId | FK PK
AuditLogId | FK PK
基本上,对于我们需要审核的每一种任务,我们都会有一个保存关系的新表。
另一位开发者的建议如下:
Table AuditLog
------------------------------
Id (PK)
Description
Created
ExampleTaskId | NULLABLE
AnotherExampleTaskId | NULLABLE
Type | (an integer id which indicates whether this is a "example task" or a "another example task").
基本上,如果我们要为“ExampleTask”创建日志,我们会将 ExampleTaskId-field 设置为示例任务的标识,并将 Type 设置为相应的 ExampleTask-enum 值。
他建议上表是因为他在争论完整性(我认为这很好!)和性能。主要是因为存在 FK 约束,并且需要加入表才能获取相关日志(是的,这是 RMDBS - MSSQL)。此外,由于每个日志都有两个表,因此还需要两个插入(完整性查找等)。当然,这是正确的。但我看不到问题。特别是没有性能,因为它是最小的。此外,第一年要存储的日志总量很可能不会超过 5-10K。几年后,这些表最多可能包含大约 30-40K 行。
您对以上内容有何看法?另外,您更喜欢上述哪一种解决方案,为什么?
【问题讨论】:
-
ExampleTaskAuditLog和AnotherExampleTaskAuditLog表的目的是存储多对多关系吗?
标签: sql-server definition audit