【问题标题】:Where to place auditing fields?在哪里放置审计字段?
【发布时间】:2012-06-09 16:07:55
【问题描述】:

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

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

在为继承设计表时,您是在两个表中都放置这样的审计字段,还是只将它们放在父表中,并在子表中的属性更改时更新父表?

【问题讨论】:

    标签: entity-framework database-design orm


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      或者你不使用继承。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-29
        • 1970-01-01
        • 2011-05-15
        • 1970-01-01
        • 2011-06-29
        • 2018-03-27
        • 2011-02-15
        相关资源
        最近更新 更多