我有下表
Person(PID, Name, Dob, AddressId) PID 是代理键(自动递增)
Address(AddressId, Line1, Line2, City, State) AddressId 是代理键(自动递增)
我的很多事务表中都使用了 PersonID (PID)。由于一个人的地址可能会随着时间的推移而改变,我需要将记录版本存储在数据库中,以便我可以根据时间片引用正确的版本。我该怎么处理。
我正在考虑有这样的解决方案
- 使用同一张表来存储历史,例如
- 人员(PID、姓名、Dob、AddressId)
- 地址(AddressId、Line1、Line2、城市、州、StartDate、EndDate、LastUpdatedBy、LastUpdatedDate)
让我们假设人的初始记录如下
Person(100, X, Y, 110)
Address(110, A, B, C, D, 2011-01-01, 9999-12-31, Y, 2011-01-01)
现在地址在2012年更改为 PID 100。我正在考虑
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
现在我可以在不更改代理键的情况下从同一个表中查询历史数据和当前数据。我不必参考历史表格,因此不会轰炸逻辑和表格。
假设我的地址代码是唯一的,这种方法不会让我对表强制执行唯一键约束。我该如何处理?
请就此提出不同的方法和反馈。