保持引用的字段数据更改

时间:2013-05-05 08:38:08

标签: database

我的表格Salary包含列PersonalId,表格Person包含列Name

在第一个表中,工资数据将保存为PersonalId,并将其与Person表相关联。在工资账单中,所有数据将聚集在一起,Person名称将从Person表中引用。

1年后,特定人名将从Michael更改为Maic。现在我希望去年的工资账单保留在上一个人名Michael,新工资账单由新名称Maic生成。

我们如何做到这一点?

2 个答案:

答案 0 :(得分:0)

这可能取决于您最需要的操作类型以及人们更改名称的次数,因为您可能需要进行的连接数量可能会有很大差异。

  • 在Person中保留一个字段,指向名称更改的下一个人
  • 保留另一个人物密钥,仅针对自然人
  • 使用当前名称的索引
  • 保留有人可以处置的有限数量的人名
  • 在另一个表中,您保留了人物的各种名称之间的关系

这可能取决于你遵循的规范化规则,现在我没有考虑到这一点 无论如何,对于第一种情况,您不需要更改Salary,而是重建Person的身份,您需要多个请求或至少存储过程。
在第二种情况下,您仍然无需更改Salary,因为您向Person添加了一个字段,但要获得该实体用户的所有Salary条目,您需要进行一些工作,再一次可能是一个存储过程来获取添加的字段,然后是一些连接所有Salary条目的东西 第三个可能是最简单的,但也是有限的,你需要在Salary另一个字段中告诉要在该条目中使用的名称索引。
最后一种情况为您提供了一个稳定的身份,但由于添加了表,它可能需要一些工作,并且仍有多个实现。您可以使用该表而不是Person来引用工资,或者只有在需要所有数据时才能查询该表,但是您无法从Salary引用其主键,因为它不允许区分名。

答案 1 :(得分:0)

Lunadir以某种方式的权利 - 但所有这些方法都很复杂,而且难度很大。

另一种方式 - 更简单,也许更正确& robust - 将NAME和PAID_DATE列保留在Salary或SalaryPaid中,并写下实际名称&付款时支付的日期。

良好的旧批处理风格 - 并且它具有实际捕获关键财务事实,支付和支付的优点。它的名称是什么,这是实际的可审计交易历史。

您是单独支付每个工资条目还是一堆支付(PaySlip或SalaryPaid)?将NAME列放在记录实际付款的任何位置。它发生的时间戳。