对于我的应用程序,有几个实体类,User,Customer,Post等
我即将设计数据库,我想存储创建和更新实体的日期.这是它变得棘手的地方.当然有一个选择是为每个实体表添加created_timestamp和update_timestamp列但不是那个还原剂?
另一种可能性是创建一个存储此信息的日志表,并且可以使其包含对任何实体的更新的跟踪.
有什么想法吗?我倾向于实施后者.
单对数表对于所有表的方法有两个主要问题,我可以想到:
日志表的设计(可能)会限制所有其他表的设计.很可能日志表有一个名为TableName的列,然后是另一个名为PKValue的列(它将存储您正在记录的记录的主键值).如果您的某些表具有复合主键(即多个列),则日志表的设计必须考虑到这一点(可能通过使用PKValue1,PKValue2等列).
如果这是某种Web应用程序,那么触发器可用的用户身份将是应用程序的帐户,而不是Web应用程序用户的ID(这很可能是您真正想要存储在CreatedBy中的ID)领域).这只会帮助您区分Web应用程序代码创建的记录和其他创建的记录.
CreatedDate和ModifiedDate列不是冗余的,因为它们是在每个表中定义的.我会坚持使用这种方法,并在每个表上放置插入和更新触发器以填充这些列.如果我还需要记录进行更改的最终用户,我会跳过触发器并从我的应用程序代码中填充时间戳和用户字段.
我使用"日志"或"事件"表来执行后者.根据我的经验,"更新"的时间戳很快就变得令人沮丧,因为很多时候你发现自己不仅仅需要最新的更新时间.