Database design 交叉引用表…维度还是事实?

Database design 交叉引用表…维度还是事实?,database-design,database-schema,data-warehouse,dimensional-modeling,Database Design,Database Schema,Data Warehouse,Dimensional Modeling,初学者三维建模问题: 在正式的“业务流程”之外,您如何对维度之间的关系建模?例如,假设你在模拟一个梦幻棒球联盟。一些明显的维度是团队和球员,一个例子是球员击球的结果。我感到困惑的是,如何简单地跟踪哪些球员在哪支球队 在第三种标准形式中,我会有一个团队和球员FK的交叉参考表,以及专门与这两者结合相关的任何附加字段(招募日期、替补球员指标等)。这与星型模式有什么不同吗?如果不是,那么该表是否被视为没有数字属性的事实表 让我困惑的是,这个交叉引用表本身从来没有多大用处。只有当加入到其他事实表中,才能获

初学者三维建模问题:

在正式的“业务流程”之外,您如何对维度之间的关系建模?例如,假设你在模拟一个梦幻棒球联盟。一些明显的维度是团队和球员,一个例子是球员击球的结果。我感到困惑的是,如何简单地跟踪哪些球员在哪支球队

在第三种标准形式中,我会有一个团队和球员FK的交叉参考表,以及专门与这两者结合相关的任何附加字段(招募日期、替补球员指标等)。这与星型模式有什么不同吗?如果不是,那么该表是否被视为没有数字属性的事实表


让我困惑的是,这个交叉引用表本身从来没有多大用处。只有当加入到其他事实表中,才能获得与另一个事实/过程相关联的团队中的参与者列表。这使它更像是一个维度而不是一个事实。

在维度建模中,您必须选择要建模的流程。如果团队-玩家关系是模型的次要关系,您可以忽略它,当一个玩家为团队击球时,您就知道他属于一个团队

当然,这就排除了那些从不击球的球员


如果你想考虑这个关系,一个多对多的关系,显而易见的解决方案是另一个事实表。事实表甚至可能是不真实的(当你没有额外的信息时,但在这种情况下,球员的工资将是一个明显而重要的事实)。

另一个选择是为球员使用2类SCD。这是一种存储随时间对玩家的属性更改的方法

所以对于一个球员来说,你可能有四个维度的记录,因为这个球员在四支球队之间移动。维度记录有开始和结束日期,因此,如果玩家在1月份移动球队,直到2月份才开始比赛,那么该信息仍然会被存储

您可以通过这种方式跟踪任何玩家属性,如受伤等

这是一种跟踪“缓慢”更改的方法,无需特殊事实

如果您确实需要某种历史状态报告,只需将player维度加入date维度即可

看看本文中的类型II: