我正在努力理解为数据仓库建模特定场景的最佳方法。
我有一个 Person 维度和一个 Tenancy 维度。一个人在任何时候都可能有 0 个、1 个或(很少)多个租约,并且随着时间的推移通常会有一系列的租约。一个租约可以有一个或多个与之关联的人。与租约相关的人会随着时间而改变,租约通常会持续很多年。
一种选择是将租赁参考、开始和结束日期作为类型 2 SCD 列添加到人员维度。只要我忽略一个人有多个并发租约的可能性,这将很有效。但是,我在数据仓库的其他领域也面临类似的设计问题,并且不可能忽略多个关系。
另一种选择是将关系建模为累积快照事实表。我不确定这在实践中的效果如何,因为我只能将其链接到 Person 和 Tenancy 的一个版本(两者都将具有 2 类 SCD 列),这似乎使得无法生成当前或将人和租户联系在一起的历史报告。
有没有推荐的方法来建模这种类型的关系?
根据 SQL.Injection 给出的患者回答和评论进行编辑
我制作了一个基本模型,显示了 SQL.Injection 所描述的模型。
我已将租赁开始/结束日期移至“垃圾”维度 (Dim.Tenancy),并将人员租赁开始/结束日期添加到事实表中,因为我认为这是描述关系的更准确方式。
然而,现在我从视觉上看到它,我认为这与我开始使用的模型根本没有什么不同,除了事实表是定期快照而不是累积快照。它确实似乎遭受了同样的缺陷,即每当我在任何维度中更新类型 2 缓慢变化的属性时,它都不会反映在事实中。
为了使这项工作能够反映当前的更改并允许历史报告,似乎每次在任何维度上发生 SCD2 更改时,我都必须在事实表中添加一行。然后,为了通过加入同一实体的多个版本来防止过度计数,我还需要添加其他相关维度的新版本,以便我有新的键可以加入。
我需要再考虑一下。我开始认为数据库模型是正确的,而我对如何使用模型的理解是错误的。
在此期间,欢迎提出任何意见或建议!