数据仓库中的事实表总是在变化中,通常是新的业务数据不断装载入DW。事实表数据的增加是正常现象,也无需特别处理。但很多时候维度表的数据也会发生变化,且维度表的数据变化会导致维度表和事实表的关系发生变化。因此对于维度变化,该如何设计维度表,是本文要讨论的问题。
例如一个订单事实表和一个客户维度表,每个订单有一个对应的客户。在今年5月17日之前,客户维度表中某客户的类别是corporate,5月18日变化为了retail。很显然统计5月的订单数据时,我们希望得到的客户类型即有corporate,也有retail。这就要求维度表中保存历史数据,同时如何关联事实表和维度表也是需要设计时思考的问题。
Slow Changing Dimensions(SCD)
指与时间等因素无关的,变化相对较慢的维度。如产品类别维度,地区维度等。
SCD可根据是否/如何保留维度的变化历史,分为不同类别。
Type1:
将旧的维度信息覆盖。如下例,当客户类别信息发生变化时,直接将维度表中的旧值覆盖掉。因此Type 1没有保留维度的变化历史。
Before the change:
After the change:
|
这种方式的优点是简单,缺点是无法追踪历史。如果是雪花模型,还可能会导致一些外键关系错误。
Type2:
增加一行新的维度数据。如下