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

时间:2015-08-12 11:45:59

标签: database-design etl data-warehouse star-schema

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

我想用一个简短的例子说明我的问题,例如:销售数据集市。我有一个事故表,它在发票级别,包含总销售额为$,增值税等措施。对于每个记录,我至少有一个卖家,最多两个卖家。两个卖家都具有相同的属性,因此只需要卖家的一个简单维度。你会如何模仿这个?

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

  1. 通过桥接表加入 - 我更喜欢那个,但我不确定这是因为桥表通过额外的连接引起的额外努力,特别是对于大尺寸,特别是在这样的情况下,记录在事实表中只与维度表中的一个或两个记录相关联。
  2. 将两个卖家外键引入事实表 - 我只会在两个卖家之间存在显着差异时使用此方法。例如。第一个卖方始终是负责产品线(产品线销售商)的人,第二个卖方始终是客户的关键客户经理。另一方面,这种方法使得查询数据仓库变得更加困难,例如,当我需要所有卖家的总销售额时,无论他们的角色如何,都需要总计。
  3. 每个卖家的事实表中的一条记录 - 我为有两个卖家的记录创建了一个副本。通过这种方法,我可以避免与桥接表相比的额外连接,但我的事实表会更大。此外,在创建查询或报告期间,我必须考虑并在必要时删除重复项。因此,这种方法也使得查询数据变得更加困难。
  4. 你对此有任何考虑吗?如果你能分享一些知识,那将是很棒的。非常感谢。

1 个答案:

答案 0 :(得分:1)

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

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

2)每当只有一个卖家时,请输入代表"不适用的代码"到代表其他卖家的领域。插入此"不适用"排在你的卖家维度。这将确保参照完整性,并提供有关该行的有用信息。

3)为seller1和seller2制作单独的尺寸。只需制作一张卖家表并为该表设置一个VIEW,这样你最终会有两个不同的维度,但只有一个物理表。

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

随着DW的发展,您对域名的了解也在不断发展,请记住这一点。也许这个设计需要在某个时候升级,但你永远不知道。你唯一要做的就是接受改变并做好准备。

祝福,祝你好运。