我正在从商店数据库创建数据仓库,我对维度和事实的设计有疑问。
在商店数据库中,存在一个包含 Person、Person_Address 和 Person_Address_Type 的表。这些由另一个表名称 Entity_Address_ID 链接,该名称通过主键链接三个表,以提供有关一个人的地址是什么以及地址类型的详细信息。
我的问题是,我应该为所有三个表创建一个维度,并创建一个无事实的事实表来将它们链接在一起,还是应该对我的维度进行去规范化并为每个维度添加一个外键,用于它们所链接的地址和地址类型也?
这是当前数据库的一个非常快速的 UML,以提供澄清
合并它们。有时有一个单独的表是值得的
Addresses
,但通常使这些字段成为一个Customers
维度是最简单的。因为地址几乎是唯一的,所以您不会通过将它们分散到它们自己的表中来保存很多记录。如果您的
Customers
表确实很大,并且地址变化相对频繁,那么将Addresses
其作为 Type-4 SCD 移出可能是一项值得优化的优化,但优化很小。如果有兴趣独立于客户的特定销售额来分析客户(例如,“我们前 100 名客户中有 20% 是国际客户”),您完全可以
NumCustomers
向该Customers
表添加一个虚拟列,将其变成一个无事实依据的事实表。