在哪里放置审计领域?

时间:2012-06-05 16:00:56

标签: entity-framework database-design orm

在我们的商店中,当我们设计数据库时,我们通常包括每个表的审核属性(LastUpdateUser,LastUpdateDate等)。这是常见的做法,但是,我注意到当你有从其他表“继承”的表时,尤其是使用实体框架等工具,这会成为一个日益严重的问题。

例如,如果您有表Customers和Employees,并且这些表具有表People的外键,那么在您建立继承时在您的实体/类模型中,您需要更改审计字段的名称,因为它们存在于两个表中。也许他们需要成为PersonLastUpdatedUser和PersonLastUpdatedDate,而Employees中的那些仍然只是LastUpdatedUser和LastUpdatedDate。

在设计用于继承的表时,是否将这些审计字段放在两个表中,或者只是将它们放在父表中并在子表中属性更改时更新父表?

2 个答案:

答案 0 :(得分:1)

如果要使用继承而不是那些属于父表的属性,因为具有相关表的父级形成单个实体,并且您跟踪整个实体的审核。如果由于任何原因需要在两个表中使用这些属性,那么应该是第一个警告这些表不适合继承。

答案 1 :(得分:0)

如果您想进行真正的审核,则可以创建由触发器填充的单独审核表(永远不会由应用程序填充,否则您将错过需要审核的项目)。 并且它们既包括新旧价值,也包括日期以及进行更改的用户或应用程序。

如果你想在每个表中使用最后一个更新列(我认为这比在父表中只有它更好,因为它没有告诉你关于哪个表最后更改的任何内容)并且你想要使用继承,那么你可能会需要通过将表名添加到lastUpdated来创建唯一名称。所以PersonLastUpdated和OrderLastUpdated等

或者您不使用继承。