Sql server 雪花模式:外键指向子维度的事实表?

Sql server 雪花模式:外键指向子维度的事实表?,sql-server,database-design,ssas,data-modeling,data-warehouse,Sql Server,Database Design,Ssas,Data Modeling,Data Warehouse,使用维基百科中的雪花模式图像: 像在Dim_产品中一样,在实际销售中使用“Brand_Id”外键有意义吗?与销售/产品或产品/品牌一样,销售/品牌之间存在多对一的关系,因此有没有合理的理由不这样做?您可能希望直接加入Dim_Brand表 我可能没有看到什么明显的东西。我认为这是一种很好的缓存数据的方法。。。但老实说,你最好还是依靠链接 原因是,您已经有了该表的功能定义,即存储销售。要加上商店销售的产品是什么品牌,就要把表格的“主题”或“主题”弄混,记录商店的销售额 现在,如果你有一个产品可以以

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

像在Dim_产品中一样,在实际销售中使用“Brand_Id”外键有意义吗?与销售/产品或产品/品牌一样,销售/品牌之间存在多对一的关系,因此有没有合理的理由不这样做?您可能希望直接加入Dim_Brand表


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

我认为这是一种很好的缓存数据的方法。。。但老实说,你最好还是依靠链接

原因是,您已经有了该表的功能定义,即存储销售。要加上商店销售的产品是什么品牌,就要把表格的“主题”或“主题”弄混,记录商店的销售额


现在,如果你有一个产品可以以不同的品牌出售(如果我知道一个包装如何可以有不同的个性…),那么是的,这在一定程度上是有意义的,但更合理的解决方案是给每个产品提供自己的SKU代码。

你所看到的关系类型是一种关系

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


因此,不,您不想将品牌添加到销售中。

如果您在一个维度模型中工作(问题中的星型/雪花型模式说明使人认为您是),那么从性能角度来看,将品牌ID添加到销售事实中是有意义的,如果业务试图回答的问题是“在此时间范围内,X品牌在所有产品中的销售额是多少”

如果产品维度为1类SCD,并且产品更改了品牌,则此功能也可能有用。您可能希望将以前的销售保留为“旧”品牌


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

谢谢。因此,销售直接与产品相关,而间接与品牌相关。因此,对于雪花型报告模式,是否会出现您想要FK的情况到第二级维度?维度(和事实)向上滚动的情况如何?例如,将产品->商店->品牌替换为任务->阶段->项目(即“项目”由“阶段”组成,而“阶段”由“任务”组成)同样的逻辑是否适用,或者在这种情况下,您可能希望在FactTask中使用ProjectID?您建议的是星型模式()。您可以这样做,因为这些对象是相关的。您将获得一点性能提升,但最终会遇到一点问题。您是在根据需要操作数据,而不是更改模式以适应数据。简短回答:这两种方法都可以,但您必须进行研究以确定要做什么st for your needs.Doh.说得好,Norla.比起将FK表示为子维度的雪花模式,将其表示为维度之间带有FK的星形模式显然更容易。