【问题标题】:How to store historical master data in SQL Server? [closed]如何在 SQL Server 中存储历史主数据? [关闭]
【发布时间】:2021-01-03 12:00:53
【问题描述】:

让我们假设一个简单的场景,其中我们有 3 个表 EmployeeDesignationAllowance

我面临的问题是员工的指定和与指定相关的津贴金额将来可能会发生变化。

如果发生任何此类更改,将根据新的主数据提供新的配额。但旧月份的报告现在将显示无效数据。因为约翰现在是一名军官,并根据他的指定领取津贴。但将来他可能会升职,他的指定可能会变成经理。然后他将获得经理津贴。然后,如果有人去津贴报告并过滤约翰上个月的数据。该报告将显示作为军官给予 john 的津贴,但他在该报告中的指定将是经理,因为 john 的指定 ID 已更新。

所以我的问题是,记录、维护和跟踪主数据的最佳方式是什么,即使主数据将来发生变化,与之关联的交易数据仍然有效。

【问题讨论】:

  • 这叫渐变维度
  • 任何想法,如何在关系数据库中处理它们?
  • 我是否必须在每次更改时维护此类维度的版本,然后将我的事务数据与此版本相关联,而不是与原始维度的表相关联。或者我是否应该将所有此类数据以非规范化方式存储在交易本身中,以便在我的报告中我不必查询任何其他表,并且在交易时适用的所有主数据都存储在该交易本身中。
  • 对此有不同的方法。比如看Wikipedia,网上也有很多想法
  • 除此之外,您似乎已经对 Amount 进行了非规范化处理,因此您已经有了根据他们的当代名称为每位员工应用多少津贴的历史记录。

标签: sql-server database database-design relational-database


【解决方案1】:

您可以使用Temporal Table 自动捕获行的历史版本,并使您能够查询“as-of”以前的时间点。

【讨论】:

    【解决方案2】:

    在我看来,您需要另一个表格,例如CurrentAmount 来记录代表您的每个日期的津贴,哪个员工,什么职位,每天有多少津贴。

    【讨论】:

      猜你喜欢
      • 2011-04-21
      • 1970-01-01
      • 2010-10-26
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      相关资源
      最近更新 更多