DW中尺寸之间的多对多关系-更好的建模?

Posted

技术标签:

【中文标题】DW中尺寸之间的多对多关系-更好的建模?【英文标题】:Many to Many relationship between dimensions in a DW - The better modeling? 【发布时间】:2016-06-20 07:26:44 【问题描述】:

我面前有这种情况,想请教一下你对建模的看法:

一个活动可以有多个受邀公司(帐户) 公司(帐户)当然可以参加多个活动 事件具有开始时间和结束时间以及总费用

如您所见,存在多对多关系 ( Dim_Event ) 和 ( Dim_Accounts ) 我的问题是如何在 DW 中建模。

我做了什么: 插入一个名为 EVENT_GUEST_BRIDGE 的“表桥”,在其中我将一个键放入 Dim_Event 并将另一个键放入 Dim_Accounts 。 这就像在定义两个实体之间的多对多关系时生成的 * - * 表。

Fact_EVENT 表与 Dim_Event 相关联,并且由于事件具有开始日期和结束日期,因此与时间维度双重链接。

例如,我必须写出参加活动的公司所在的国家/地区:

SELECT [FK_EVENT]
,[FK_DEBUT_EVENT]
,[FK_FIN_EVENT]
,[TotalPriceByEvent]
,C.Country
FROM [DW_CRM].[dbo].[Fact_MARKETING_EVENT] A 
inner join [DW_CRM].[dbo].[EVENT_GUEST_ACCOUNT_BRIDGE] B on (A.FK_EVENT = B.FK_Event_ID)
inner join [DW_CRM].[dbo].[Dim_Accounts] C on (B.FK_Account_ID = C.Accounts_TechKey)

如果我选择纯星型设计会更好吗? 类似的东西:

我希望我知道每个设计的 + 和 - !

谢谢

【问题讨论】:

【参考方案1】:

嗯,这取决于您要建模的内容。第一个将每个事件 建模为事实,而另一个将每个出席邀请 建模为一个事实。您必须问自己的是,这将如何影响您的测量结果。它还很大程度上取决于您拥有哪些可衡量的数据。我不确定TotalPriceByEvent 包含什么,或者您是否有其他可以使用的衡量标准,但我能给出的最好的建议可能是始终在可行的情况下使用您可用的最精细的数据。

例如,如果您有每家公司的入场费,请使用 invitation 颗粒 - 您可能会生成模拟雪花的计算量度,但采用另一种方式是不可能的。

【讨论】:

【参考方案2】:

嗯,在我看来,第二个选项是最好的设计,这基于经验以及维度建模作者和专家给出的理论概念(我建议阅读他们的书:kimball 的数据仓库工具包)。

第二种方法更简洁,可以提供更好的理解,并且更接近业务人员如果你给他们图表就会理解的内容。 kimball 提供的设计模式之一是打破事实表上的多对多关系,这就是您的第二个设计所做的,您的查询也会更清晰,并且可能具有最佳性能。

【讨论】:

以上是关于DW中尺寸之间的多对多关系-更好的建模?的主要内容,如果未能解决你的问题,请参考以下文章

《Entity Framework 6 Recipes》翻译系列 -----第二章 实体数据建模基础之有载荷和无载荷的多对多关系建模 (转)

多维数据集设计 - 带有附加列的多对多映射的桥接表

在关系数据库中对相同实体之间的多个多对多关系进行建模

实体框架中的多对多关系导致无限循环

SQL Server Analysis Services 中的多对多关系;第二个多对多关系不起作用

Hibernate的多对多关联关系