使用审计表来修改/创建信息

时间:2011-06-29 15:47:05

标签: .net sql entity-framework auditing

我需要跟踪

  • CreatedByUserId
  • ModifiedByUserId
  • CreatedDateTime
  • ModifiedDateTime

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

您认为最好将这些列添加到每个表中吗?或者只是在要审计的表上只有CreatedAuditEntryIdModifiedAuditEntryId FK指向现有的单独审计表,这些表是用于跟踪所有变化。

AuditEntry看起来像:

  • 编号
  • 用户ID
  • 日期时间

必须进行两次连接以获得Created和Modified信息会产生明显的性能影响......但好处是我不会在两个不同的地方保持状态,这就像我的设计中的基本规则第一书。

更新:

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

2 个答案:

答案 0 :(得分:1)

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

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

另一方面,如果有人触摸记录,你需要有一份审核记录,那么你别无选择,只能拥有一个单独的审核表。

答案 1 :(得分:1)

我的偏好是一个单独的审计表与FK关系,否则你只能看到最后一个条目,这不是一个审计......

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

我正在寻找类似于MVC的东西,并且即将实现一个过滤器来记录系统范围内的控制器动作,以及何时何种类型的表格。

编辑:鉴于更新的问题,显然Audits表仍然存在,我必须选择链接到审计表。拥有不一致的审计数据的想法实在太可怕了!除非应用程序完全被关系设计削弱,否则请将其标准化!