雪花模式:具有外键到子维度的事实表?

时间:2012-07-30 19:48:29

标签: sql-server database-design ssas data-modeling data-warehouse

使用维基百科中的雪花模式图片:

http://en.wikipedia.org/wiki/File:Snowflake-schema-example.png

在Fact_Sales中使用“Brand_Id”外键是否有意义,就像在Dim_Product中一样?销售/品牌与销售/产品或产品/品牌之间存在多对一的关系,所以有没有合理的理由不这样做?您可能希望直接加入Dim_Brand表。

我可能没有看到明显的东西。

3 个答案:

答案 0 :(得分:2)

您正在关注的关系类型是has-a关系。

产品有品牌。销售有产品;这是卖的东西。但是销售没有品牌。或者,更好的说法,你不能出售一个品牌。 (不要读那么一个......)

所以,不,你不想将品牌添加到销售中。

答案 1 :(得分:2)

如果您正在使用维度模型(问题中的Star / Snowflake架构说明可以认为您是),那么从性能角度将BRAND_ID添加到销售事实是有意义的,如果业务问题是试图回答的是“在这个时间框架内所有产品的品牌X销售额是多少”。

如果产品尺寸为Type 1 SCD且产品更换品牌,它也可能有用。您可能希望将之前的销售保留为“旧”品牌。

请记住,在构建星形/雪花报告模式时,您正在进行实体 - 关系建模。 is-a或has-a的问题与维度模型无关。

答案 2 :(得分:0)

我认为这样可以很好地缓存数据...但是老实说,你可能最好只依赖链接。

原因是你已经有了该表的定义,存储销售。为了增加这些商品所销售的品牌,该商店的“主题”或“主题”会变得混乱,记录商店的销售情况。

现在,如果以某种方式你有一个可以在不同品牌下销售的产品(如果我知道一个包装可以分裂个性......那么,那么是的,它在某种程度上是有道理的,但更合理解决方案是为每个产品提供自己的SKU代码。

相关问题