2016-01-20 98 views

回答

2

答案的最简单部分是关于事实表。没有更改,无论维度类型如何。这是因为事实和维度之间的关系是维度的替代关键。

对于维度,您需要确定哪些列可以更改,以及是否需要知道其以前的值。

如果没有列可以更改,那么SCD0通常是最合适的。你可能会用它来表示日历,也许这里的数据是不变的,除非我们恢复到中世纪的教皇而不是原子钟:)

有时你不在乎以前的值,只有当前的值无论事实的年龄如何,价值都很重要。这里的一个例子可能是客户的电话号码。我说“可能”,因为这个意义取决于商业规则。这些是SCD1维度。

如果我们关心之前的历史,我们需要在SCD2和SCD3之间做出选择。

每次维度数据更改时,SCD2都会创建一个新行。业务关键保持不变,但与新时间段有关的事实将具有新的行替代关键。一个例子可能是客户地址,其中客户始终由业务密钥C12345标识,但事实表指向ID 13,987和2465,表示该客户转移房屋,城镇等时的地址变化。

SCD3在当前行中保持“前一个”值。如果我们需要知道的是一个字段的当前值及其以前的值,那么每次该值发生更改时,我们不需要创建一个新行。更新SCD3维度需要将“当前”值转换为“先前”值,然后将新值写入“当前”值。

现在,术语会变得有点混乱,因为维度实际上可以将所有这些类型合并为一个。考虑理论上的银行账户尺寸:

  • ID(代理键)
  • 数(业务键)
  • 帐户名称(SCD1,根据业务规则)
  • 期初余额(SCD0)
  • 授权签字人(SCD2,我们希望记录谁在某个时间点被授权)
  • 客户关系经理(SCD3,我想要当前和以前的)

SCD类型告诉我在这些列中的任何一列发生变化时需要更新哪些内容。

  • SCD0:该值永远不会改变,不需要更新。
  • SCD1:更新商业密钥的所有行。
  • SCD2:创建一个新的行每当这个值改变
  • SCD3:更新所有以前和当前值业务键

金博尔进一步定义SCD4-6,但这些都是更常用。我不会深入细节,这个答案已经够长:)

最后,还有基数的问题需要考虑。如果您的事实一次可能与多个维度行相关,那么您可能需要一个Bridge表来处理关系。

总结:

  • 事实表包含外键维度表的
  • 尺寸行是通过代理键确定
  • 有可能是给定的业务重点多维度行,取决于历史要求。
相关问题