SQL服务器如何存储历史主数据?
How to store historical master data in SQL Server?
假设一个简单的场景,我们有 3 个表 Employee
、Designation
& Allowance
:
我面临的问题是,员工的职称和与职称相关的津贴金额将来可能会发生变化。
如果发生任何此类变化,将根据新的主数据提供新的津贴。但是旧月份的报告现在将显示无效数据。因为约翰现在是一名军官,并且根据他的任命领取津贴。但将来他可能会得到晋升,他的职位可能会变成经理。然后他将获得经理的津贴。然后,如果有人去津贴报告并过滤约翰上个月的数据。该报告将显示给予约翰作为官员的津贴,但他在该报告中的指定将是经理,因为约翰的指定 ID 已更新。
所以我的问题是,记录、维护和跟踪主数据的最佳方式是什么,即使主数据将来发生变化,与其关联的交易数据仍然有效。
在我看来你需要另一个table,比如CurrentAmount
来记录代表你的每个日期的津贴,哪个员工,什么职位,每天有多少津贴。
您可以使用 Temporal Table 自动捕获行的历史版本,并使您能够查询“截至”以前的时间点。
假设一个简单的场景,我们有 3 个表 Employee
、Designation
& Allowance
:
我面临的问题是,员工的职称和与职称相关的津贴金额将来可能会发生变化。
如果发生任何此类变化,将根据新的主数据提供新的津贴。但是旧月份的报告现在将显示无效数据。因为约翰现在是一名军官,并且根据他的任命领取津贴。但将来他可能会得到晋升,他的职位可能会变成经理。然后他将获得经理的津贴。然后,如果有人去津贴报告并过滤约翰上个月的数据。该报告将显示给予约翰作为官员的津贴,但他在该报告中的指定将是经理,因为约翰的指定 ID 已更新。
所以我的问题是,记录、维护和跟踪主数据的最佳方式是什么,即使主数据将来发生变化,与其关联的交易数据仍然有效。
在我看来你需要另一个table,比如CurrentAmount
来记录代表你的每个日期的津贴,哪个员工,什么职位,每天有多少津贴。
您可以使用 Temporal Table 自动捕获行的历史版本,并使您能够查询“截至”以前的时间点。