0

我需要跟踪

  • CreatedByUserId
  • ModifiedByUserId
  • 创建日期时间
  • 修改日期时间

对于我的大多数实体。很标准。

您是否认为将这些列添加到每个表中会更好......或者只是在要审计的表上使用一个CreatedAuditEntryIdModifiedAuditEntryIdFK,以指向现有的单独的审计表,这些表用于跟踪所有更改。

AuditEntry 看起来像:

  • ID
  • 用户身份
  • 约会时间

必须执行两次连接才能获得 Created 和 Modified 信息对性能有明显的影响……但好处是我不会在两个不同的地方维护状态,这就像我的设计书中的第一条基本规则。

更新:

为了清楚起见,AuditEntry 表包含对每个表的所有修改,无论如何。这里的问题是是否通过 FK 将该表用于创建和修改信息......或者只是将上面的四列添加到我想要信息的每个表中,以避免连接。

4

2 回答 2

1

“更好”取决于您的需求。

如果您只需要最后一次修改事件,那么最好(在资源方面)将审计列添加到表中。然后,更新将只需要触及那一行。

另一方面,如果每次有人接触记录时您都需要有一个审计记录,那么您别无选择,只能有一个单独的审计表。

于 2011-06-29T15:56:54.963 回答
1

我的偏好是使用具有 FK 关系的单独审计表,否则您只能看到最后一个条目,而这并不是审计...

你用什么来更新这些条目?如果可以从 SQL 用户中隐含 UserID,则所有这些都可以在触发器中完成。

我正在查看 MVC 中的类似内容,并即将实现一个过滤器以在 who、what when 和 to-what 类型表中记录系统范围的控制器操作。

编辑:鉴于更新后的问题很明显 Audits 表无论如何都会存在,我必须选择链接到审计表。拥有不连贯的审计数据的想法太可怕了!除非应用程序完全被关系设计所削弱,否则请保持其正常化!

于 2011-06-29T15:59:49.460 回答