具有多个属性的维度行

时间:2014-01-20 21:37:34

标签: sql tsql database-design data-warehouse dimensional-modeling

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

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

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

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

我担心如果我做前者那么我的Dimension表将变得超过5倍,如果我做后者那么模型将变得更加复杂。

1 个答案:

答案 0 :(得分:2)

嗯,对于新手来说,你的问题非常有见地!

如果您的每个产品都可以归类为多个产品(并且每个产品类别包含 n 产品数量),则Product和产品Category之间的基数为许多到很多。如果您有多对多的基数,则直接 Snow Flaking 解决方案。

但我认为这里雪花的意思是使用CategoryProduct之间的链接表。在我看来,这是当前的方法。但我宁愿将此表称为 Factless fact 表。

Snowflaking is the solution for a one-to-many cardinality problem(例如,1个类别包含多个产品)。要解析多对多基数,您需要 Factless Fact 表来存储category Product个表中的键。

请注意,如果您加载到ProductSales事实表的交易数据已包含CategoryProduct详细信息,您可能还希望同时包含类别ID和ProductSales事实表中的产品ID。如果您不需要维护产品和类别之间的任何固定关系,而是通过实际业务中发生的事件驱动关系,则可以执行此操作。