|
我的数据仓库中有一些实体:2 Y+ W _* Y2 `
[ol]人员 -具有personId,dateFrom,dateTo其他属性(如姓氏、生日姓氏、生日等)。-尺寸变化缓慢5 D! I5 x& N6 K1 E8 }
文档 -documentId,编号,类型
$ e2 i; u5 q$ r4 \9 e( L. e' y; K地址 -addressId,城市、街道、房屋、公寓* s( q- \% d" O
[/ol](人与文档)之间的关系是一对多,(人与地址)之间的关系是多对多。
: |( R) S5 ^* S E% }5 w我的目标是创建历史事实表来回答以下问题:% q. t j* S4 k# Y) x7 l
[ol]谁在规定的日期居住在规定的地址,并携带哪些文件?[/ol]2.规定时间间隔内规定地址的居民历史记录是什么?) F/ P; L* s6 I& H5 F, L# `7 ?4 x
这不仅是DW我认为这是设计的目的DW设计中最难的事情。
+ E0 p5 D% |5 Q) Q& ]- M例如,从2005年1月1日到2010年2月2日,布朗小姐personId = 1,documentId = 1和documentId =7 b3 U/ ~+ G# u$ B0 q2 Q1 K
一直住着2份文件addressId = 1地址,然后移到addressId =
; T! @3 a8 R& o3 K- p2010年3月2日起居住日期(NULL?)。但从2006年5月4日起,她将姓氏改为姓氏Green从2007年7月7日起,这位女士将她的第一份文件作为documentId
( e& N$ N# @1 O/ ?3 O= 1更改为documentId = 3。自2010年3月2日起,Black先生的personId = 2,documentId =
" U. h) j7 C, N2 Q+ a6 t7 q- [9 a4一直居住在addressId = 1。9 [5 X! d: |0 B$ Y6 B3 q f$ Y
问题2(地址ID = 1,从2000年1月1日到现在,时间间隔必须与查询的预期结果相似:
; Q- i& [$ ]( A0 s# u9 F) ?1 h# x6 D行数:
/ B7 p! r9 l7 Qlast_name="Brown",documentId=1,dateFrom=01/01/2005,dateTo=04/04/2006last_name="Brown",documentId=2,dateFrom=01/01/2005,dateTo=04/04/2006last_name="Green",documentId=1,dateFrom=04/05/2006,dateTo=06/06/2007last_name="Green",documentId=2,dateFrom=04/05/2006,dateTo=06/06/2007last_name="Green",documentId=2,dateFrom=06/07/2007,dateTo=02/01/2010last_name="Green",documentId=3,dateFrom=06/07/2007,dateTo=02/01/2010last_name="Black",documentId=4,dateFrom=02/03/2010,dateTo=NULL我有一个复合键(personId,documentId,addressId,dateFrom)创建事实表的想法,但我不知道如何加载表,然后通过这个结构得到预期的结果。
6 @; }: f% h. w我很高兴为您提供任何帮助!# j- O, R4 q+ h% G! @
2 y! H- {( z& k' Q+ |# I3 w' U
解决方案: * w9 a1 @1 J' ~# A' {( X9 P
有趣的问题@Argnist!
2 k0 C }5 d; z8 Q9 q3 ^. {: b1 g& |因此,你需要为我的例子创建一些通用语言( W5 b9 c( ]- u- m% E
DimPerson(PK = kcPerson,唯一人员的建议密钥= kPerson,类型2 dim)
# W: W. M9 ~4 T$ nDimDocument(PK = kcDocument,文档中唯一的建议键= kDocument,类型2 dim)
, r3 |% u3 F$ X2 E' ]7 A5 f0 \DimAddress(PK = kcAddress,建议键的唯一地址= kAddress,类型2 dim)一位同事写了一个简短的博客,介绍了两个代理键的用法,以解释上述暗淡的维上使用两个代理键。
5 A& `% @. f) t: \1 z我将始终以yyyymmdd将带来形式PK的DimDate添加到任何具有额外属性列的数据仓库中。
8 k; I! `; t) y* ?然后你把事实表作为, {# @1 I* U! R% a. R
FactHistory(FK = kcPerson,kPerson,kcDocument,kDocument,kcPerson,kPerson,kDate)以及任何其他测量。加入 kc您可以显示当前的人员/文件/地址维度信息。如果您添加 k历史的人员/文件/地址维度信息可以显示。
3 X3 s$ I0 |7 H& r/ I不利的一面是,对于每个人/文档/地址/日期的组合,这个事实表需要一行。但这实际上是一个非常狭窄的表,因为它只有许多外部键。* q% u1 M7 t( y+ F" t: M
这样做的好处是,你可以很容易地发现你问的各种问题。
5 a( N2 W2 b5 [# M+ U& Y或者,您可以将事实表设置为! A1 v2 u9 N+ d# m( r
FactHistory(FKs = kcPerson,kPerson,kcDocument,kDocument,kcPerson,kPerson,kDateFrom,kDateTo)以及任何其他测量。这显然要紧凑得多,但查询变得更加复杂。你也可以Fact在表上放置视图,使其更容易查询!
5 i/ m2 R- l1 D4 G$ ?解决方案的选择取决于数据变化的频率。我怀疑情况不会很快改变,所以事实表的替代设计可能会更好。5 D* U: A; F1 {) ^6 }$ }/ q
希望能有所帮助。 |
|