对于我的应用程序有几个实体类,User、Customer、Post 等
我即将设计数据库,我想存储创建和更新实体的日期。这就是棘手的地方。当然,一种选择是为每个实体表添加 created_timestamp 和 update_timestamp 列,但这不是多余的吗?
另一种可能性是创建一个存储此信息的日志表,并且可以使其包含对任何实体的更新的跟踪。
有什么想法吗?我倾向于实施后者。
对于我的应用程序有几个实体类,User、Customer、Post 等
我即将设计数据库,我想存储创建和更新实体的日期。这就是棘手的地方。当然,一种选择是为每个实体表添加 created_timestamp 和 update_timestamp 列,但这不是多余的吗?
另一种可能性是创建一个存储此信息的日志表,并且可以使其包含对任何实体的更新的跟踪。
有什么想法吗?我倾向于实施后者。
我能想到的单一日志表用于所有表的方法有两个主要问题:
CreatedDate 和 ModifiedDate 列并不是多余的,因为它们是在每个表中定义的。我会坚持这种方法,并在每个表上放置插入和更新触发器以填充这些列。如果我还需要记录进行更改的最终用户,我会跳过触发器并从我的应用程序代码中填充时间戳和用户字段。
我用“日志”或“事件”表做后者。以我的经验,“更新”的时间戳很快就会变得令人沮丧,因为很多时候你发现自己处于一个你想要的不仅仅是最新的更新时间的修复中。
您需要多久在表示层中包含创建/更新的时间戳?如果答案不仅仅是“很长时间一次”,我认为在每个表中都有这些列会更好。
在我几年前参与的一个项目中,我们实现了更新我们所谓的审计表的触发器(它存储了有关所做更改的基本信息,每个表一个审计表)。这包括修改日期(和最后修改日期)。
它们仅应用于关键表(而不是连接或引用数据表)。
这消除了许多必须考虑 LastCreated 和 LastModified 字段的正常挫败感,但引入了保持触发器最新的烦恼。
最后,触发器/审计表设计运行良好,我们只需要在 ETL(!)之前删除并重新应用触发器即可。
它适用于我从事的基于网络的 CMS。创建日期和最后更新日期将显示在大多数页面上,并且会有最后创建(和更新)页面的列表。管理界面也将使用此信息。