这不是我正在做的事情,但我觉得这是一个很好的例子:
假设我有一个连接到ProductSales Fact表的Product维表。 dimProduct中的每一行都包含单个产品的所有相关数据(代码,名称,描述等),并且有大约一百万种产品。
我现在需要将产品类别存储到仓库中。每个产品都有多个类别,平均为5.
我是否应该在产品维度中为产品适合的每个类别复制整行,或者我应该使用dimCategory维度和两者之间的dimProductCategory链接表雪花我当前的星型模式?
我担心如果我做前者那么我的Dimension表将变得超过5倍,如果我做后者那么模型将变得更加复杂。
答案 0 :(得分:2)
嗯,对于新手来说,你的问题非常有见地!
如果您的每个产品都可以归类为多个产品(并且每个产品类别包含 n 产品数量),则Product
和产品Category
之间的基数为许多到很多。如果您有多对多的基数,则直接 Snow Flaking 不解决方案。
但我认为这里雪花的意思是使用Category
和Product
之间的链接表。在我看来,这是当前的方法。但我宁愿将此表称为 Factless fact 表。
Snowflaking is the solution for a one-to-many cardinality problem(例如,1个类别包含多个产品)。要解析多对多基数,您需要 Factless Fact 表来存储category
Product
个表中的键。
请注意,如果您加载到ProductSales
事实表的交易数据已包含Category
和Product
详细信息,您可能还希望同时包含类别ID和ProductSales
事实表中的产品ID。如果您不需要维护产品和类别之间的任何固定关系,而是通过实际业务中发生的事件驱动关系,则可以执行此操作。