多对 1/2 关系的星型模式和桥接表

Posted

技术标签:

【中文标题】多对 1/2 关系的星型模式和桥接表【英文标题】:Star schema and bridge tables for many to 1/2 relationship 【发布时间】:2015-08-12 11:45:58 【问题描述】:

目前,我正在参与一个新数据仓库的设计。我对这个主题很陌生,并且有一个关于星型模式和多对多关系的一般问题,特别是多对 1/2 关系。

我想用一个简短的例子来说明我的问题,例如销售数据集市。我有一个发票级别的事实表,其中包含以美元为单位的总销售额、增值税等指标……对于这些记录中的每一个,我至少有一个卖家,最多有两个卖家。两个卖家具有相同的属性,因此只需要一个简单的卖家维度。你会如何建模?

我可以想象以下三种不同的方法:

    通过桥接表加入 - 我更喜欢那个,但我不确定这一点,因为桥接表通过附加连接导致额外的工作,特别是对于大尺寸,特别是在这种情况下,其中记录事实表中仅与维度表中的一两条记录相关联。 在事实表中引入两个卖家外键 - 只有当两个卖家之间通常存在显着差异时,我才会使用这种方法。例如。第一个卖家始终是负责产品线的人(产品线卖家),第二个卖家始终是客户的大客户经理。另一方面,这种方法使查询数据仓库变得更加困难,例如,当我需要汇总所有卖家的总销售额时,无论他们的角色是什么。 每个卖家的事实表中有一条记录 - 我为有两个卖家的记录创建了一个副本。通过这种方法,与桥接表相比,我可以避免额外的连接,但我的事实表会更大。此外,在创建查询或报告期间,我必须考虑并在必要时消除重复项。因此,这种方法也使查询数据变得更加困难。

您对此有什么考虑吗?如果您能分享一些知识,那就太好了。非常感谢。

【问题讨论】:

这里似乎存在一个根本问题,如果您有两个卖家 A 和 B,他们与一张价值 10 英镑的发票相关联,那么当您运行卖方报告和发票价值时,发票值重复。这与您选择的任何方案无关(但尤其是“当 [您] 需要汇总所有卖家的总销售额时,无论他们的角色如何”),并向我表明模型存在问题一般的。卖家可以有多少种不同的角色? 感谢您的评论。我认为您对底层模型的看法是正确的,但不幸的是我们无法更改它。卖家有两个角色,但他们不可靠。通常角色是混淆的,我们无法识别有问题的记录并纠正混淆的角色。因此,我们希望平等对待他们,幸运的是,这足以让我们进行报道。 那么我会选择选项 1。 【参考方案1】:

根据我的经验,这是我对此的看法。

1) 我会将两个卖家放在同一行,例如,这样可以更轻松地管理您的汇总指标。

2) 当只有一个卖家时,在代表其他卖家的字段中输入一个代表“不适用”的代码。在您的卖家维度中插入此“不适用”行。这将确保引用完整性并提供有关该行的有用信息。

3) 为卖家 1 和卖家 2 制作单独的维度。只需制作一张卖家表并为该表设置一个视图,这样您最终就会拥有 2 个不同的维度,但只有一个物理表。

4)关于“这种方法使得查询数据仓库变得更加困难,例如当我需要汇总所有卖家的总销售额时,无论他们的角色是什么。”你可以在两个维度上通知同一个卖家给你答案。

DW 的发展,您对您的领域的知识也在发展,请记住这一点。也许这个设计有时需要升级,但你永远不知道。您唯一需要做的就是接受变化并为此做好准备。

最好的问候和好运。

【讨论】:

以上是关于多对 1/2 关系的星型模式和桥接表的主要内容,如果未能解决你的问题,请参考以下文章

在星型模式表设计中包含关系有啥好处?

多维数据集设计 - 带有附加列的多对多映射的桥接表

mysql - 来自桥接表的多对多查询[关闭]

hibernate关联关系(多对多)

预言机分析中的多对多关系

数据库模式中的多对多关系表是不是有正式名称?