6

这不完全是我正在做的,但我觉得这是一个很好的例子:

假设我有一个连接到我的 ProductSales Fact 表的产品维度表。dimProduct 中的每一行都包含单个产品的所有相关数据(代码、名称、描述等),并且大约有一百万种产品。

我现在需要将产品类别存储到仓库中。每个产品有多个类别,平均为 5 个。

我是否应该为产品适合的每个类别复制 Product Dimension 中的整行,或者我应该使用 dimCategory 维度和两者之间的 dimProductCategory 链接表来雪花我当前的星型模式?

恐怕如果我做前者,那么我的 Dimension 表会变大 5 倍以上,如果我做后者,那么模型会变得更加复杂。

4

1 回答 1

5

好吧,对于一个新人来说,你的问题是相当有见地的!

如果您的每个产品都可以分为多个类别(并且每个产品类别包含n个产品),那么Product和 Product之间的基数Category是多对多。当您有多对多基数时,直接雪花不是解决方案。

但我认为你在这里所说的雪花是在Category和之间使用链接表Product。在我看来,这是正确的方法。但我宁愿将此表称为Factless 事实表。

Snowflaking 是一对多基数问题的解决方案(例如,一个类别包含多个产品)。要解决多对多基数,您将需要Factless Fact表来存储两个category Product表中的键。

请记住,如果您加载到ProductSales事实表的事务数据已经包含两者CategoryProduct详细信息,您可能希望在ProductSales事实表中同时包含类别 ID 和产品 ID。当您不需要维护产品和类别之间的任何固定关系,而是该关系由实际业务中发生的事件驱动时,您可以这样做。

于 2014-01-21T04:18:28.363 回答