多对多维度模型

Posted

技术标签:

【中文标题】多对多维度模型【英文标题】:Many-To-Many dimensional model 【发布时间】:2010-01-06 20:32:20 【问题描述】:

伙计们,

我有一个名为 DIM_FILE 的维度表,其中包含我们从客户那里收到的文件的信息。每个文件都有构成我的 FACT 表 CUST_DETAIL 的详细记录。在主进程中,文件经历了几个阶段,每个阶段都为其标记一个状态。总而言之,我有多对多的关系。关于星型模式维度建模的任何想法。一条客户记录只属于一个文件,一个文件可以有多种状态。

FACT
----
CustID
FileID
AmountDue


DIM_FILE
--------
FileID
FileName
DateReceived

FILE_STATUS
-----------
FileID
StatusDateTime
StatusCode

【问题讨论】:

你的问题到底是什么? 【参考方案1】:

您可以做一些事情来将此与维度模型/星型模式结合起来:

    构建两颗星(可能它们最终会位于不同的数据集市中)。一个将 FACT 作为事实表,另一颗星将 FILE_STATUS 作为事实(您可以将其视为事务粒度的事实表)。为了完成这项工作,我可能会去规范化并将 CustId 添加到 FILE_STATUS 中 由于您正在处理 FILE_STATUS,您可以将 FACT 转换为 累积快照 事实表。在此模型中,您将在 FACT 中有一组单独的额外列来记录属于每个状态转换的所有信息。至少,您有一个日期/时间维度的列来记录何时达到特定状态。在您的 ETL 中,您必须更新事实表以记录文件如何通过状态进行。这种设计仅在状态数量有限且相对较小的情况下才有效。此外,应该有或多或少清晰的状态进展路径(如客户订单:收到 -> 拣选 -> 包装 -> 发货 -> 已付款) 为状态创建一个所谓的多值维度:FACT 将获得这个新维度的键,而这个新维度实际上代表了应用于 FACT 表中的一行的状态集合。 你可以有一个桥牌桌(虽然我不认为这适用于这个主题,不确定)

参考资料:

累积快照:http://blog.chrisadamson.com/2007/03/accumulating-snapshot-use-accumulating.html

多值维度与桥表:http://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/dimensional-modeling-techniques/multivalued-dimension-bridge-table/

【讨论】:

考虑更新链接或从提供的链接中提供关键信息,因为它们现在已失效。

以上是关于多对多维度模型的主要内容,如果未能解决你的问题,请参考以下文章

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

SSAS多维中不同粒度的多对多货币转换

数据立方建立-如何实现一对多,多对多

Django自引用多对多模型

Laravel5.1 模型 --多对多关系

雄辩的多对多对多 - 如何轻松加载远距离关系