我的表格Salary
包含列PersonalId
,表格Person
包含列Name
。
在第一个表中,工资数据将保存为PersonalId
,并将其与Person
表相关联。在工资账单中,所有数据将聚集在一起,Person
名称将从Person
表中引用。
1年后,特定人名将从Michael
更改为Maic
。现在我希望去年的工资账单保留在上一个人名Michael
,新工资账单由新名称Maic
生成。
我们如何做到这一点?
答案 0 :(得分:0)
这可能取决于您最需要的操作类型以及人们更改名称的次数,因为您可能需要进行的连接数量可能会有很大差异。
这可能取决于你遵循的规范化规则,现在我没有考虑到这一点
无论如何,对于第一种情况,您不需要更改Salary
,而是重建Person
的身份,您需要多个请求或至少存储过程。
在第二种情况下,您仍然无需更改Salary
,因为您向Person
添加了一个字段,但要获得该实体用户的所有Salary
条目,您需要进行一些工作,再一次可能是一个存储过程来获取添加的字段,然后是一些连接所有Salary
条目的东西
第三个可能是最简单的,但也是有限的,你需要在Salary
另一个字段中告诉要在该条目中使用的名称索引。
最后一种情况为您提供了一个稳定的身份,但由于添加了表,它可能需要一些工作,并且仍有多个实现。您可以使用该表而不是Person
来引用工资,或者只有在需要所有数据时才能查询该表,但是您无法从Salary
引用其主键,因为它不允许区分名。
答案 1 :(得分:0)
Lunadir以某种方式的权利 - 但所有这些方法都很复杂,而且难度很大。
另一种方式 - 更简单,也许更正确& robust - 将NAME和PAID_DATE列保留在Salary或SalaryPaid中,并写下实际名称&付款时支付的日期。
良好的旧批处理风格 - 并且它具有实际捕获关键财务事实,支付和支付的优点。它的名称是什么,这是实际的可审计交易历史。
您是单独支付每个工资条目还是一堆支付(PaySlip或SalaryPaid)?将NAME列放在记录实际付款的任何位置。它发生的时间戳。