具有多个属性的维度行

Tim*_*eys 6 sql t-sql database-design data-warehouse dimensional-modeling

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

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

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

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

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

has*_*own 5

嗯,对于一个新人来说,你的问题很有见地!

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

但我认为这里的雪花是指在Category和之间使用链接表Product。在我看来,这是当前的方法。但我更愿意称这张表为Factless 事实表。

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

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