2

初学者维度建模问题:

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

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

让我感到困惑的是,这个交叉引用表本身并没有多大用处。只有在加入其他事实表时才有意义,以获取与另一个事实/流程相关联的团队中的球员列表。这使它感觉更像是一个维度而不是事实。

4

2 回答 2

1

在维度建模中,您必须选择要建模的过程。如果 Team Player 关系对您的模型来说是次要的,您可以忽略它并知道当一名球员为球队击球时属于球队。

当然,这排除了从不击球的球员。

如果你想考虑这种关系,作为多对多的关系,显而易见的解决方案是另一个事实表。事实表甚至可以是无事实的(当您没有关于它的额外信息时,但在这种情况下,球员的薪水将是一个明显且重要的事实)。

于 2013-08-03T13:47:04.963 回答
0

另一种选择是为播放器使用 2 型 SCD。这是一种随时间存储针对玩家的属性变化的方法。

因此,对于单个玩家,您可能有四个维度记录,因为该玩家在四支球队中移动。维度记录具有开始日期和结束日期,因此如果玩家在一月份转移了球队并且直到二月份才开始比赛,那么该信息仍然会被存储。

您可以通过这种方式跟踪任何球员属性,即受伤等。

这是一种无需特殊事实即可跟踪“缓慢”更改的方式。

如果您确实需要某种历史状态报告,您只需将播放器维度加入日期维度即可。

看看本文中的Type II:

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

于 2013-08-28T06:27:37.453 回答