交叉引用表...维度或事实?

时间:2013-08-02 01:49:54

标签: database-design database-schema data-warehouse dimensional-modeling

初学者维度建模问题:

如何在正式“业务流程”之外建立维度之间的关系?例如,假设您正在为Fantasy Baseball联盟建模。一些明显的维度将是团队和玩家,一个例子就是玩家来击球的结果。我很困惑的是如何简单地跟踪哪些球员在哪支球队。

在第三范式中,我有一个交叉参考表,包含Team和Player FK,以及任何其他与两者组合相关的字段(招聘日期,长椅玩家指标等)。这与星型模式有什么不同吗?如果没有,那么这个表是否被视为事实表,没有数字属性?

令我困惑的部分是这个交叉引用表本身并没有多大用处。只有在加入其他事实表时,才能获得与另一个事实/过程相关联的团队中的玩家列表。这使得它更像是一个维度而不是一个事实。

2 个答案:

答案 0 :(得分:1)

在尺寸建模中,您必须选择您想要模型的过程。如果Team Player关系是您的模型的次要关系,您可以忽略它并且知道当一个玩家为团队蝙蝠时属于一个团队。

当然,这会让那些从不打球的球员失去理智。

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

答案 1 :(得分:0)

另一种选择是为玩家使用2型SCD。这是一种随着时间的推移对玩家存储属性更改的方法。

因此,对于单个玩家,您可能有四个维度记录,因为该玩家在四个团队中移动。维度记录具有开始日期和结束日期,因此如果玩家在1月份移动了团队并且直到2月份才开始播放,那么该信息仍会存储。

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

这是一种跟踪“缓慢”变化而无需特殊事实的方法。

如果您确实需要某种历史状态报告,则只需将玩家维度加入日期维度。

在本文中看看Type II:

http://en.wikipedia.org/wiki/Slowly_changing_dimension