审核 table 条设计建议
Audit table design suggestions
这是正确的做法吗?有什么改进的建议吗?
下面是员工 table 及其影子 table 的屏幕截图,其中 tl_name
和 dept
字段可能会更改,目前正在使用影子 table 跟踪所有更改。
Main table 中的记录是 inserted/updated,它在数据宏的帮助下被复制到影子 table。
影子table中的所有记录必须由超级用户approved/rejected
主要 table 将更新对齐方式,影子 table 将拥有任何员工的完整更改历史记录。
当通过用户表单在 Main table 中 added/updated 记录时,记录的副本将在 shadow table 中创建,必须得到管理员的批准.
当通过用户表单在 Main table 中记录 added/updated 时,is_active
字段将设置为 false,一旦管理员批准,这将是更新为 true.
据我了解您的要求:
- Changed/inserted 数据应立即对所有人可见,并带有未批准数据的可见标记。
- 这是合理的,如果您的工作假设大多数更改都是正确的并且会被批准(希望是真的 ;))。
我想你错过了:
- 如果更改被拒绝,Main table 中的数据应自动恢复到最近批准的状态。
- 否则 Main table 永远处于(某种)未定义状态,
is_active = False
和(显然)错误数据。
这可以通过您的审核 table 设计来完成。查找此 emp PK 的最新批准条目,并使用其数据。
但是如果将来审计的列数可能会发生变化,您可以考虑使用两个 table 的方法,如本项目所示:https://autoaudit.codeplex.com/documentation
AuditHeader Table
This table is inserted with one row everytime one record is inserted,
updated or deleted in a table that has been setup to use the AutoAudit
system.
AuditDetail Table
This table is related to AuditHeader and is inserted with one row for
each column that is changed during an insert or update operation and
for each column during a delete operation.
如果每次更改都保存旧值和新值,则可以仅从当前审计条目恢复到 "old" 状态。
Main table 的结构更改(或者如果您决定例如用户也可以编辑 emp_name
)不需要更改 Audit table 的结构,因为Main 中的每个审计列都映射到 AuditDetails 中的一行而不是列。
编辑:额外优势:
在您的示例数据中,您已将更改的值标记为红色。显然 Access table 不能那样工作。如果您想保留此信息 ("which column(s) exactly was edited?"),您需要在审计 table.
中增加一列
这将包含在 AuditDetail 中,因为它包含具有旧值和新值的每个更改。
这是正确的做法吗?有什么改进的建议吗?
下面是员工 table 及其影子 table 的屏幕截图,其中
tl_name
和dept
字段可能会更改,目前正在使用影子 table 跟踪所有更改。Main table 中的记录是 inserted/updated,它在数据宏的帮助下被复制到影子 table。
影子table中的所有记录必须由超级用户approved/rejected
主要 table 将更新对齐方式,影子 table 将拥有任何员工的完整更改历史记录。
当通过用户表单在 Main table 中 added/updated 记录时,记录的副本将在 shadow table 中创建,必须得到管理员的批准.
当通过用户表单在 Main table 中记录 added/updated 时,
is_active
字段将设置为 false,一旦管理员批准,这将是更新为 true.
据我了解您的要求:
- Changed/inserted 数据应立即对所有人可见,并带有未批准数据的可见标记。
- 这是合理的,如果您的工作假设大多数更改都是正确的并且会被批准(希望是真的 ;))。
我想你错过了:
- 如果更改被拒绝,Main table 中的数据应自动恢复到最近批准的状态。
- 否则 Main table 永远处于(某种)未定义状态,
is_active = False
和(显然)错误数据。
这可以通过您的审核 table 设计来完成。查找此 emp PK 的最新批准条目,并使用其数据。
但是如果将来审计的列数可能会发生变化,您可以考虑使用两个 table 的方法,如本项目所示:https://autoaudit.codeplex.com/documentation
AuditHeader Table
This table is inserted with one row everytime one record is inserted, updated or deleted in a table that has been setup to use the AutoAudit system.
AuditDetail Table
This table is related to AuditHeader and is inserted with one row for each column that is changed during an insert or update operation and for each column during a delete operation.
如果每次更改都保存旧值和新值,则可以仅从当前审计条目恢复到 "old" 状态。
Main table 的结构更改(或者如果您决定例如用户也可以编辑 emp_name
)不需要更改 Audit table 的结构,因为Main 中的每个审计列都映射到 AuditDetails 中的一行而不是列。
编辑:额外优势:
在您的示例数据中,您已将更改的值标记为红色。显然 Access table 不能那样工作。如果您想保留此信息 ("which column(s) exactly was edited?"),您需要在审计 table.
中增加一列这将包含在 AuditDetail 中,因为它包含具有旧值和新值的每个更改。