对于每种情况,事实表的注意事项是什么? 维度中的更改如何影响事实表以及如何在事实表中处理它们?
答案 0 :(得分:3)
答案中最简单的部分是关于事实表。无论维度类型如何,都没有任何更改。这是因为事实和维度之间的关系是维度的代理键。
对于维度,您需要确定哪些列可以更改,以及您是否需要知道它们之前的值。
如果没有列可以更改,那么SCD0通常是最合适的。你可以将它用于类似日历的东西,也许,数据是恒定的,除非我们回归到中世纪的教皇而不是原子钟:)
有时您不关心以前的值,只有当前值很重要,无论事实的年龄如何。这里的一个例子可能是客户的电话号码。我说“可能”,因为这个意义取决于业务规则。这些是SCD1尺寸。
如果我们关心以前的历史,我们需要在SCD2和SCD3之间做出选择。
每次维度数据更改时,SCD2都会创建一个新行。业务密钥保持不变,但与新时间段相关的事实将具有新的行代理键。一个示例可能是客户地址,其中客户始终由业务密钥C12345标识,但事实表指向ID 13,987和2465,表示客户转移房屋,城镇等时地址的变化。
SCD3在当前行中保持“先前”值。如果我们需要知道的是字段的当前值及其先前的值,则每次该值更改时都不需要创建新行。更新SCD3维度需要将“当前”值移至“上一个”值,然后将新值写入“当前”值。
现在,术语变得有点混乱,因为维度实际上可以将所有这些类型组合在一起。考虑理论上的银行账户维度:
SCD类型告诉我当任何这些列发生变化时需要更新的内容。
Kimball进一步定义了SCD4-6,但这些不太常用。我不会详细介绍,这个答案已经足够长了:)
最后,还有基数问题需要考虑。如果您的事实一次可能与多个维度行相关,那么您可能需要一个Bridge表来处理这种关系。
总结: