【问题标题】:How to handle one to many in a star-schema?如何在星型模式中处理一对多?
【发布时间】:2019-03-27 03:26:29
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢@RADO 非常有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多