如果您的事实有多个维度实例怎么办?

时间:2018-02-07 22:21:02

标签: sql data-warehouse star-schema

在服装店的星型模式中,有一个交易事实可以捕获所有购买的东西。这通常会有通常的日期,时间,金额维度,但也会有人指示是谁购买的。在某些情况下,您可以在同一笔交易中拥有多个人。如果外键在Fact表上,那么如何建模,因此只能指向一个Person?

3 个答案:

答案 0 :(得分:2)

尺寸建模的标准技术是使用“桥梁”。表。 您可以找到的经典示例包括拥有帐户(或交易)的客户群,以及访问医院时有多重诊断的患者。

在您的情况下,这可能如下所示:

表: FactTransaction

  • PersonGroupKey
  • 其他FactTableColumns

表: BridgePersonGroup

  • PersonGroupKey
  • PersonKey

表: DimPerson

  • PersonKey
  • 其他人专栏

对于每组人,您都要创建一个新的PersonGroupKey并最终得到如下行:

PersonGroupKey 1, PersonKey 5
PersonGroupKey 1, PersonKey 3
PersonGroupKey 2, PersonKey 1
PersonGroupKey 3, PersonKey 6

然后,PersonGroupKey代表事实中的一组人。

从逻辑上讲,应该有另一个表DimPersonGroup,它只列出了PersonGroupKeys,但是大多数数据库都不需要这样,所以Kimball建模者通常不会这样做。

这是Bridge表的基础知识,但您可以根据具体情况考虑修改!

答案 1 :(得分:1)

您需要加入表格TransactionPerson(或类似内容),其中PersonTransactionPerson为1:M关系,然后为TransactionPersonTransaction是M:1的关系。

通过这种方式,您可以间接地将多个人与一个交易相关联。

答案 2 :(得分:1)

我建议将Bridge表与您的事务和人员表结合使用。例如:

表:fact_transaction

  • transaction_id(主键)
  • transaction_person_id(外键)
  • ...

表:bridge_transaction_person

  • transaction_person_id
  • person_id

表:dim_person

  • person_id(主键)
  • ...