[英]DataModel for Implementing row versioning in OLTP system
我有下表
人员(PID,名称,Dob,AddressId) PID是代理密钥(自动递增)
地址(地址标识,线1,线2,城市,州)代理键的地址标识 (自动递增)
我的许多交易表中都使用了PersonID(PID)。 由于一个人的地址可能会随时间变化,因此我需要将记录版本存储在数据库中,以便可以根据时间段引用正确的版本。 我应该如何处理。
我正在考虑解决这样的问题
如下假设人的初始记录
Person(100, X, Y, 110)
Address(110, A, B, C, D, 2011-01-01, 9999-12-31, Y, 2011-01-01)
现在,地址在2012年更改为PID100。我正在考虑这样做
Address(320, A, B, C, D, 2011-01-01, 2012-06-01, Y, 2011-01-01) - INSERT
Address(110, A, B, Q, D, 2012-06-01, 9999-12-31, Z, 2012-06-01) - UPDATE
如果2014年 PID 100的地址再次更改。
Address(740, A, B, Q, D, 2012-06-01, 2014-06-01, Y, 2012-01-01) - INSERT
Address(320, A, B, C, D, 2011-01-01, 2012-06-01, Y, 2011-01-01) - NO CHANGE
Address(110, A, B, N, D, 2014-06-01, 9999-12-31, R, 2012-06-01) - UPDATE
现在,我可以查询历史数据以及同一表中的当前数据,而无需更改代理键。 我将不必引用历史表,因此不会轰炸逻辑和表。
假设我的地址代码是唯一的,这种方法不会让我对表实施唯一的键约束。 我该如何处理?
请为此提出不同的方法和反馈。
我要做的是制作一个包含日期的关系表:
Person_At_Address(PID,AddressId,StartDate,EndDate,LastUpdatedBy,LastUpdatedDate)
并从Person和Address产生中删除相应的列:
Person(PID, Name, Dob)
Address(AddressId, Line1, Line2, City, State)
现在,每当有人更改地址时,您只需在Person_At_Address表中插入新行。 查询时,您已经获得了有关历史数据和当前数据的所有信息。
至于NO-CHANGE行的情况,您有很多选择可以将其拉出:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.