【问题标题】:Audit table design suggestions审计表设计建议
【发布时间】:2017-04-06 13:35:21
【问题描述】:

这是正确的方法吗?有什么建议可以让它变得更好吗?

  1. 下面是员工表及其影子表的屏幕截图,其中tl_namedept 字段可能会更改,目前使用影子表来跟踪所有更改。

  2. 记录在主表中插入/更新,并在数据宏的帮助下复制到影子表中。

  3. 影子表中的所有记录都必须由超级用户批准/拒绝

  4. 主表将更新对齐方式,影子表将包含任何员工的完整更改历史记录。

  5. 当通过用户表单在主表中添加/更新记录时,将在影子表中创建记录副本,该副本必须由管理员批准。

  6. 当通过用户表单在主表中添加/更新记录时,is_active 字段将设置为 false,一旦获得管理员批准,该字段将更新为 true。

【问题讨论】:

  • 你想达到什么水平的标准化?
  • 只是好奇:为什么会有人想要批准审计日志?如果你想阻止,你应该阻止用户编辑主表。审计表的最懒惰的方法是使用表触发器。审核表包含所有字段 + 操作、操作依据、操作日期。使用更新事件之前和之后捕获整行。
  • @krishKM 所有更改都必须由超级用户批准,因为每个人都可以自行编辑对齐(这是业务要求)。目前我正在使用表触发器(更改前,更新后)来捕获整行。
  • 我不懂你的业务逻辑。 每个人都可以编辑主表所有更改都必须经过批准似乎是一个奇怪的组合。如果更改被拒绝会怎样?
  • 因此,被拒绝的更改将与更改的数据和is_active = False 一起永远保持可见?这不可能。我有一种感觉,这并没有真正经过深思熟虑。 -- 请使用正确的数据更新屏幕截图以避免混淆,谢谢。

标签: ms-access database-design ms-access-2010 audit-trail changelog


【解决方案1】:

据我了解您的要求:

  • 更改/插入的数据应立即对所有人可见,并带有一个可见标记以表示未批准的数据。
  • 这是合理的,前提是您假设大多数更改都是正确的并且会被批准(希望是真的;))。

我认为你不见了:

  • 如果更改被拒绝,主表中的数据应自动恢复到最近批准的状态。
  • 否则,主表将永远处于(某种)未定义状态,is_active = False 和(显然)错误数据。

这可以通过您的审计表设计来完成。查找此 emp PK 的最新批准条目,并使用其数据。

但是如果将来审核的列数可能会发生变化,您可以考虑使用两个表的方法,如本项目中:https://autoaudit.codeplex.com/documentation

AuditHeader表格

这个表每插入一条记录就插入一行, 在已设置为使用 AutoAudit 的表中更新或删除 系统。

AuditDetail表格

此表与 AuditHeader 相关,插入一行 在插入或更新操作期间更改的每一列和 删除操作期间的每一列。

如果每次更改都保存旧值和新值,则可以仅从当前审核条目恢复到“旧”状态。

主表的结构更改(或者如果您决定例如用户也可以编辑emp_name)不需要审计表的结构更改,因为主表中的每个审计列都映射到审计详细信息中的一行而不是一列。

编辑:附加优势:

在您的示例数据中,您已将更改的值标记为红色。显然 Access 表不能那样工作。如果您想保留这些信息(“具体编辑了哪些列?”),您需要在 Audit 表中添加一个列。

这将被 AuditDetail 覆盖,因为它包含每个带有旧值 + 新值的更改。

【讨论】:

  • @Santosh:你对你的问题有什么期望?
  • 感谢您的建议...继续努力!
猜你喜欢
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
相关资源
最近更新 更多