如何在星形模式中处理一对多?

时间:2018-10-23 01:15:45

标签: data-modeling data-warehouse star-schema

我需要一种在以下星型模式中将一个或多个部分所有者与飞机关联的方法(请参见下图)。 enter image description here

下面的图表和示例为在数据仓库中建立这种关系建模的正确方法吗?

enter image description here

我可能最需要的是按分数所有者总数报告飞机的需求。有没有更“正确”的方式对此建模?

1 个答案:

答案 0 :(得分:2)

加入2个事实表是一个坏主意。许多BI工具甚至都不允许您这样做(仅允许1:M关系)。

您拥有的是在星型模式中对多对多属性建模的经典案例。最常见的解决方案是创建一个桥表,将(在您的情况下)飞机和所有者(可能也会随时间变化)相关联。 “所有者”将成为一个维,通过桥连接到事实表。

桥表的问题在于它们严重使模型复杂化,并使其难以使用。只要有可能,我都会尽量避免它们。我经常使用的两种常见设计技术:

  1. 计算数据仓库中每架飞机的小数所有者的数量,并将其作为事实添加到事实表中。这种方法的优势-它是最简单,最可靠的设计。缺点-如果您需要查看所有者的名称,则将无法(尽管您可以通过将多个所有者串联到字符串中并将其添加为属性来部分解决该问题)。

  2. 或者,您可以重新设置事实表的粒度。当前,事实表是飞机。您可以将其更改为“飞机所有权”(即飞机+所有者)。然后可以将所有者添加为维度并将其连接到事实表。优点:该模型仍然很简单(没有桥梁),并且功能强大,但是您将完全了解所有者及其属性。缺点:新谷物对于分析师而言可能不太直观;事实表的大小会增加(即,如果每架飞机平均有3位所有者,则事实表将增加三倍)。另外,如果您有任何其他事实,例如费用等,则必须按所有者分配(例如,均分或如果拥有数据,则按所有权百分比划分),以避免重复计算。