在数据模型设计中,current timestamp常用作为记录数据操作时间的字段(Operation Time),通常情况下,在SQL语句插入时并不会对后续的操作产生任何影响,但是在一些特定的业务场景发生时,这个Operation Time可能会导致后续数据采集问题的出现,我们来看一个例子:
有一张业务表A,用于记录业务的发生值(非累加值,比如帐户余额、资产负债等等),该表记录了多列的业务数据,对A表的任何操作,需要通过B、C表进行记录
操作表B,对应前台的业务的操作界面,根据实际操作,产生修改的令号和修改字段(一个令号对于同一张表可以修改多个字段:注意,这张表并没有记录操作令号产生的时间)
操作表C,记录修改令号,修改的数值,修改时间(Operation Time)
在DW系统中,用户有时需要反查历史数据,因此DW通常会存储每一天A表的快照表。采集快照的过程判断属性字段修改的日期具体落在哪一天。
首先,无法通过工作令号去判断日期字段,如果通过OperationTime取判断的话,也存在2个问题:
1. 这个OperationTime是数据库系统的时间,而不是业务时间
2. 如果该操作因为网络、数据库性能等等问题,产生跨天的情况,那么DW系统是无法准确采集数据的。
如果系统中出现了这种情况,则需要业务系统修改业务逻辑。