首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据仓库、Kimball客户和客户地址维数

数据仓库、Kimball客户和客户地址维数
EN

Database Administration用户
提问于 2018-10-16 05:17:54
回答 1查看 4K关注 0票数 1

我有一个客户表和多个客户地址。客户可以有多个地址:家、工作、度假等。

在Kimball数据仓库中,我会使用桥接表来连接客户和客户地址信息吗?

(a) So DimCustomer to DimCustomerAddressBridge to DimAddress Table?这是正确的技术吗?

(b)还是我只会有一个事实表,如CustomerTransactionPayment表,连接二维DimCustomer和DimAddress?

因此,一种策略是使用桥接连接的二聚体,另一种是通过事实事务表连接的断开连接的二聚体?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-10-16 12:57:57

正确的架构取决于您打算如何使用此数据。让我们谈谈你的选择:

a)桥表.

我不会使用这种方法,因为桥表用于表示N:N关系。如果你去做这件事,那就不可能准确地说出你的交易的正确地址;所以它将是无用的。

按照Kimball组->,“桥表是used...where,在事实表本身中不能解决多到多的关系.”https://www.kimballgroup.com/2008/09/design-tip-105-snowflakes-outriggers-and-bridges/

( b)创建另一个维度DimAddress (DimGeography?)

这看起来是一种很好的方法,特别是如果这些地址信息可能与其他事实表相关的话。也许你可以把它扩展成一个DimGeography,或者类似的东西。在这种情况下,DimGeography和DimCustomer不会直接相关。

其他选项

( c)您还可以将客户维度的粒度更改为地址级别;因此,每个地址将有一行,“主客户数据”对于该维度中的同一客户是相同的。如果大多数数据与地址级别相关,->就会这样做。

( d)另一种方法是将模式雪花化。然后创建一个可用于此事实的DimCustomerAddress;其中事实表指向DimCustomerAddress,DimCustomerAddress指向DimCustomer。这样,您既不更改客户表,也不更改其他事实表,并且可以创建客户->地址层次结构。

( e)如果您必须跟踪历史地址更改(基于注释)

此解决方案类似于d),但DimCustomerAddress将是SCD类型2,这将使您的新DimCustomerAddress的粒度成为“地址历史”。例如:我假设这个维度的业务密钥是Customer、AddressID和Address类型,所以每次您得到地址更改时都应该添加一个新行;跟踪地址有效的开始日期和结束日期。您的事实表应该通过代理键"CustomerAddressKey“与CustomerAddressKey关联,DimCustomerAddress应该使用"CustomerKey”与DimCustomer关联。可以在ETL时间内使用开始日期和结束日期来填充事实表,以确定正确的"CustomerAddressKey“。

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/220190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档