12

我的数据仓库中有一些实体:

  1. Person - 具有 personId、dateFrom、dateTo 和其他可以更改的属性,例如姓氏、出生日期等 - 缓慢变化的维度

  2. 文档- documentId、编号、类型

  3. 地址- addressId、城市、街道、房屋、公寓

(Person and Document) 之间的关系是一对多的,(Person and Address) 是多对多的。

我的目标是创建可以回答我们以下问题的历史事实表:

  1. 哪些人在指定日期住在指定地址?

2、指定地址在指定时间间隔内有哪些居民历史?

这不仅是针对 DW 设计的,而且我认为这是 DW 设计中最难的事情。

例如,personId=1 的 Brown 小姐、documentId=1 和 documentId=2 的文档从 01/01/2005 到 02/02/2010 一直居住在 addressId=1 的地址,然后移动到 addressId=2 的地址。从 2010 年 2 月 3 日到当前日期(NULL?)。但自 2006 年 4 月 5 日起,她已将姓氏更改为格林夫人,自 2007 年 6 月 7 日以来,她的第一个 documentId=1 文档更改为 documentId=3。自 2010 年 2 月 3 日至今,具有 personId=2、documentId=4 的 Black 先生一直居住在 addressId=1。

我们查询问题 2(其中 addressId=1,时间间隔是从 2000 年 1 月 1 日到现在)的预期结果必须如下:

行:

last_name="Brown", documentId=1, dateFrom=01/01/2005, dateTo=04/04/2006

last_name="Brown", documentId=2, dateFrom=01/01/2005, dateTo=04/04/2006

last_name="Green", documentId=1, dateFrom=04/05/2006, dateTo=06/06/2007

last_name="Green", documentId=2, dateFrom=04/05/2006, dateTo=06/06/2007

last_name="Green", documentId=2, dateFrom=06/07/2007, dateTo=02/01/2010

last_name="Green", documentId=3, dateFrom=06/07/2007, dateTo=02/01/2010

last_name="Black", documentId=4, dateFrom=02/03/2010, dateTo=NULL

我有一个想法用复合键(personId、documentId、addressId、dateFrom)创建事实表,但我不知道如何加载这个表,然后用这个结构得到预期的结果。

我会很高兴得到任何帮助!

4

1 回答 1

5

有趣的问题@Argnist!

因此,要为我的示例创建一些通用语言,您需要

  • DimPerson (PK=kcPerson, 为唯一 Persons=kPerson 推荐密钥, type 2 dim)
  • DimDocument(PK=kcDocument,唯一 Documents=kDocument 的建议键,类型 2 dim)
  • DimAddress(PK=kcAddress,建议唯一地址的键=kAddress,类型 2 暗淡)

一位同事写了一篇关于使用两个代理键的简短博客来解释上述暗淡“在维度上使用两个代理键”。

我总是将 yyyymmdd 形式的带 PK 的 DimDate 添加到任何具有额外属性列的数据仓库中。

然后你会有你的事实表

  • FactHistory (FKs=kcPerson, kPerson, kcDocument, kDocument, kcPerson, kPerson, kDate) 加上任何附加措施。

然后加入“kc”,您可以显示当前的人员/文档/地址维度信息。如果您加入了“k”,您可以显示历史的人员/文档/地址维度信息。

这样做的缺点是该事实表需要为每个人/文档/地址/日期组合提供一行。但它确实是一个非常窄的表,因为该表只有一些外键。

这样做的好处是很容易查询您提出的各种问题。

或者,您可以将事实表设置为

  • FactHistory (FKs=kcPerson, kPerson, kcDocument, kDocument, kcPerson, kPerson, kDateFrom, kDateTo) 加上任何附加措施。

这显然更加紧凑,但查询变得更加复杂。您还可以在 Fact 表上放置一个视图,以便于查询!

解决方案的选择取决于数据变化的频率。我怀疑它不会那么快改变,所以事实表的替代设计可能会更好。

希望有帮助。

于 2011-05-27T15:23:17.357 回答