如何处理星型模式中的一对多?

ra9*_*a9r 1 data-modeling data-warehouse star-schema

我需要一种方法将一个或多个部分所有者与以下星型模式中的飞机相关联(见下图)。 在此处输入图片说明

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

在此处输入图片说明

我可能遇到的最常见的需求是需要按部分所有者的总数报告飞机。是否有更“正确”的建模方式?

RAD*_*ADO 5

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

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

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

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

  2. 或者,您可以重新调整事实表。目前,事实表grain是飞机。您可以将其更改为“飞机所有权”(即飞机+所有者)。然后可以将所有者添加为维度并连接到事实表。优点:模型仍然很简单(没有桥接),也很健壮,但您将完全了解所有者及其属性。缺点:新的grain对分析师来说可能不太直观;事实表的大小增加(即,如果您平均每架飞机有 3 个所有者,您的事实表将增加三倍)。此外,如果您有任何附加事实,例如成本等,则必须按所有者分配(即,平均分配,或者如果您有数据,则按所有权百分比分配),以避免重复计算。