维度数据仓库的客户拥有多个帐户
我设计和星型模式建立销售事实表,我似乎无法找出如何去以下问题:维度数据仓库的客户拥有多个帐户
客户可以有1或2个账户,但一个账户只能属于1个客户。所以这是一对多的关系。
我应该为客户和帐户创建维度,并将它们与桥表链接起来吗?
在最后的事实表我会为例行:
| date_id | cust_id | Acc_id | count(sales) |
| 1 | 150 | 25 | 1 |
| 1 | 150 | 26 | 1 |
只需创建账户和客户维度。 不要用外键链接它们 - 如果你要创建一个完全标准化的模式,而不是星型模式,那么你会这样做。客户与客户之间的链接保存在事实表中 - 因为您有一行数据与Acc_Id 25一起保存Cust_Id 150,另一行数据与Acc_Id 26保持相同的Cust_Id,所以在任何OLAP层你建立它是相关的。
请注意,您也可以只拥有一个帐户维度,并将该客户的详细信息保存为该帐户的属性。尽管不知道模型的其余部分,但无法分辨这是否是更合适的解决方案。
你的第一个建议很有意义。谢谢!我宁愿将它们分开,以免重复客户详细信息。此外还有一些帐户特定的细节可以存储在帐户维度中。感谢您澄清我不需要链接它们。 – 2015-04-24 01:30:58
@GrantMcKinnon很高兴帮助!请记住,在星型模式中,您不应该担心数据重复(只要它是有意的数据重复,就像我们正在讨论的类型一样)。事实和维度都应该由谷物决定 - 所以如果你有一个以客户为谷物的事实表,那么你需要一个客户维度。如果没有,单独维度没有真正的收益。需要一段时间才能习惯这种心态,我发现! – 2015-04-24 07:01:49
创建一个客户表,与CUST_ID作为主键。使用Acct_ID作为主键并将Cust_ID作为外键创建帐户表。每个帐户必须有且仅有一个客户,但客户可以在多个帐户中列出。
什么是“销售事实表”?你想跟踪订单吗?
数据仓库中星型模式的事实表。我认为你指的是关系数据库,这些数据已经存储在关系表中。我将它合并到一个总销售额作为总体功能和客户和账户维度的模式中。事实表的每一行对应于一个销售给一个客户的账户。销售只能是一个账户和客户,但是Im坚持的是如何连接客户和账户维度 – 2015-03-25 04:16:42
ACC_ID独一无二吗?这不是一个CUST_ID或任何类似这样的复合关键字, – APC 2015-03-25 05:07:28
是的,它的唯一 – 2015-03-25 05:14:21
是否有可能为账户和客户设置不同的维度,并且在账户维度中有一个外键链接回客户维度 – 2015-03-25 05:15:59