1 位员工有 N 个地址。在这里,如果这两个表中的任何用户进行了任何更改,我需要维护 Employee 和 Address 更改的历史信息。
表员工:
Employee(
EmpID BIGINT PRIMARY KEY IDENTITY(1,1),
Name varchar(200),
EmpNumber varchar(200),
Createddate Datetime2)
地址表:
Address(
AddID BIGINT PRIMARY KEY IDENTITY(1,1),
AddressLine1 varchar(300),
AddressLine2 varchar(300),
EmpID BIGINT NULL,
AddressType varchar(100),
Createddate Datetime2)
上面,EmpID 是 Employee 表的外键
我必须满足的场景:
- 我应该能够跟踪任何员工的个人地址(子表记录)记录的变化。
- 我应该能够使用子地址记录跟踪员工(父表记录)的更改。
解决方案1:
案例:当子表更新时,我更新了 Add0001 地址记录,因此我在地址表中插入了一条新记录,使之前的记录无效:
案例:当父表现在更新时,当父表更新时,我有父表的历史表,我将旧数据移动到历史表并将当前记录更新到父表中,如下所示:
解决方案 2:
案例:当子表更新时与解决方案1中的相同
案例:当父表更新时
我们在父表中插入一条新记录,使以前的记录处于非活动状态。在这种情况下,我们获得了一个新 ID,并且该 ID 更新为子表的外键,如下所示:
这是一起维护父子表历史数据的最佳方式吗?或者有什么办法可以保留设计,以便我应该能够完全跟踪父子记录数据的变化?