【问题标题】:DATA WARE HOUSE Model with 1 to M and M*M relationship具有 1 到 M 和 M*M 关系的数据仓库模型
【发布时间】:2016-09-06 23:03:36
【问题描述】:

我正在为数据仓库建模。让我解释一下情况:

  • 一个事件有很多会议
  • 一个活动有多个帐户
  • 一个事件有一个开始日期和一个结束日期

  • 会议必须是活动的一部分

  • 一个会议有一个或多个主管(一个主管可以监督多个会议)-多对多

  • 一个会议有一个或多个发行人(发行人可以参加许多会议) - 多对多

  • 一个会议有一个或多个投资者(投资者可以参加许多会议)-多对多

这是我的模型:

我用谷歌搜索了一下,发现有我们所说的桥接解决方案,但我不太了解它的用途以及是否必须在我的模型中使用它。

谢谢

【问题讨论】:

    标签: database-design data-warehouse business-intelligence


    【解决方案1】:

    Bridge 模型也可以称为 Snowflake 模式。在您的场景中处理多对多关系时,此方法非常有用。使用此模型,您可以将维度表分解为子维度表。通常我们知道,维度表具有唯一的行。如果我们从您的场景中获得一个示例,则 Dim_meeting 和 dim_supervisor 具有彼此唯一的行。也就是说,supervisor 中的每一行都是唯一的,并且没有可用的重复数据。因此,要处理多对多关系,如果没有两个维度之间的桥接表,就很难做到。对于我举的同一个例子(会议和主管),主管可能会监督许多会议。根据你的说法,一个会议可能有多个主管。

    在这种情况下,如果我们在两者之间引入一个桥接表,桥接表就会有自己的唯一 id(代理键 - 主键)、主管 ID 和会议 ID。会议维度将具有所有唯一的会议记录,而主管维度将具有唯一的主管记录。桥接表将有许多主管记录和许多会议记录,因此将在桥接表中创建多对多关系。

    这就是它的工作原理。

    我还使用桥接表处理了许多类似的情况,这些表在解决类似问题时似乎非常有效。 希望你能理解

    【讨论】:

    • 感谢您的回答!我已经用桥表制作了一个模型,但我还有一个问题:为什么要在桥表中添加一个(代理键 - 主键)以及两个 ID(例如:主管和会议)我所做的是在通过多对多关系相关的每个维度之间创建一个桥表,但在桥表中我只放了两个引用两个 ID 的外键!
    • 是的,你的设计很好,代理键实际上是每一行的唯一数字。通常在 Dimension 设计中,我们在大多数情况下使用代理键。它就像唯一标识特定行的键。这就是我提到它的原因。它充当行号,没什么。只需遵循概念:)
    • @S.BM 对于不同的观点,我通常不会为桥接表添加单独的代理 - 如果您愿意,您可以这样做,这可能会有所帮助,但这不是必需的,我'我并不完全相信这是一种概括的好习惯。
    【解决方案2】:

    另一种选择是有一个单一的 EVENT_ACTIVITY 事实,其中所有内容都表示为“活动”:

    ACTIVITY_ID
    PARENT_ACTIVITY_ID
    ACTIVITY_LEVEL
    ACTIVITY_TYPE
    START_DATE
    END_DATE
    PERSON_ID
    other DIM Keys
    

    活动的类型可以是活动、会议、出勤、监督,以及您可能想要包含的任何其他内容。 对于多对多会议/主管,您将有多个具有相同父事件的监督活动记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2011-07-26
      • 2018-08-18
      • 1970-01-01
      相关资源
      最近更新 更多