Oracle 具有多个帐户的多维数据仓库客户

Oracle 具有多个帐户的多维数据仓库客户,oracle,data-warehouse,dimensional-modeling,star-schema,Oracle,Data Warehouse,Dimensional Modeling,Star Schema,我正在星型架构中设计和构建销售事实表,但似乎无法解决以下问题: 一个客户可以有一个或两个帐户,但一个帐户只能属于一个客户。所以这是一种1对多的关系 我是否应该为客户和帐户创建维度,并将它们与桥接表链接 在最后一个事实表中,我将使用以下行作为示例: | date_id | cust_id | Acc_id | count(sales) | | 1 | 150 | 25 | 1 | | 1 | 150 | 26 |

我正在星型架构中设计和构建销售事实表,但似乎无法解决以下问题:

一个客户可以有一个或两个帐户,但一个帐户只能属于一个客户。所以这是一种1对多的关系

我是否应该为客户和帐户创建维度,并将它们与桥接表链接

在最后一个事实表中,我将使用以下行作为示例:

| date_id | cust_id | Acc_id | count(sales) |  
|    1    |    150  |   25   |      1       |  
|    1    |    150  |   26   |      1       |    

创建一个Customer表,Cust_ID作为主键。创建一个Account表,Acct_ID作为主键,Cust_ID作为外键。每个帐户必须有且只有一个客户,但一个客户可以在多个帐户上列出


什么是“销售事实表”?您正在尝试跟踪订单吗?

只需创建帐户和客户维度不要使用外键链接它们-如果您创建的是完全规范化的模式,而不是星型模式,那么您应该这样做。客户和帐户之间的链接保存在事实表中-因为在Acc_Id 25旁边有一行保存Cust_Id 150的数据,而在Acc_Id 26上有另一行保存相同Cust_Id的数据,因此在您构建的任何OLAP层中,这些都是相关的


注意,您也可以简单地拥有一个Account维度,并将客户的详细信息作为属性保存在Account上。如果不知道模型的其余部分,就无法判断这是否是一个更合适的解决方案。

这是数据仓库中星型模式的事实表。我认为您指的是关系数据库,这些数据已经存储在关系表中。我将它整合到一个模式中,总销售额作为聚合函数,客户和帐户作为维度。事实表的每一行对应于一个帐户的一次销售,该帐户有一个客户。一次销售只能针对一个客户和一个客户,但我所坚持的是,如何将客户和客户维度联系起来?这是一个独一无二的交易?它不是一个带有CUST_ID的复合键或任何愚蠢的东西,有可能为Account和Customer设置单独的维度,并且在Account维度中有一个外键链接回您的第一个建议非常有意义。谢谢我宁愿将它们分开,这样我就不会重复客户的详细信息。还有一些特定于帐户的详细信息可以存储在帐户维度中。谢谢你澄清我不需要链接它们。@GrantMcKinnon很高兴这有帮助!请记住,您不应该担心星型模式中的数据重复(只要它是有意的数据重复,就像我们正在讨论的类型一样)。事实和维度都应该由粒度决定——因此,如果事实表的粒度为Customer,则需要Customer维度。如果没有,那么拥有一个单独的维度就没有真正的好处。我发现,要适应这种心态需要一段时间!