审核表设计建议

时间:2017-04-06 13:35:21

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

这是正确的做法吗?有什么建议让它更好吗?

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

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

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

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

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

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

  7. enter image description here

1 个答案:

答案 0 :(得分:1)

据我了解你的要求:

  • 每个人都应立即看到更改/插入的数据,并显示未批准数据的可见标记。
  • 如果您假设大多数更改都是正确的并且将被批准(希望是真的;),那么这是合理的。)

我想你错过了:

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

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

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

  

AuditHeader

     

每次插入一条记录时,该表插入一行,   在已设置为使用AutoAudit的表中更新或删除   系统

     

AuditDetail

     

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

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

主表的结构更改(或者如果您确定用户也可以编辑emp_name)不需要对Audit表进行结构更改,因为Main中的每个已审计列都映射到一行在AuditDetails中而不是列。

编辑:其他优势:

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

这将由AuditDetail涵盖,因为它包含每个具有旧+新值的更改。