我正在阅读拉尔夫·金博尔的“数据仓库和维度建模”一书,在第六章中,我读到了关于维度角色扮演的部分。
有时会发现与每个事务相关联的其他日期,例如订单的请求发货日期。每个日期都应该是事实表中的外键.但是,不能简单地将这两个外键连接到同一日期维度表。SQL会将这种双向同时连接解释为要求两个日期相同,这不太可能。。
我不太明白最后两句话的意思。这是否意味着如果事实表中的两个日期具有不同的值,则不能多次加入日期维度?为什么?
发布于 2021-10-16 13:49:06
它不是很好的表达,但它所表示的是,如果要从事实表中的不同FKs多次加入日期维度,则需要将日期维度化名。
对于任何SQL语句,如果有两个表被多次连接在一起,这是正确的,它并不是特定于维度建模的。
发布于 2021-10-16 18:35:55
这里隐藏的信息是,您需要多个连接,每个维度角色都需要一个连接。
假设您有一个包含登录日期entry_d和预订日期booking_d的事实表
这将是错误的,并且可能是文本中的意思。
select * from fact
join time_dim tim
on fact.entry_d = tim.date_d and
fact.book_d = tim.date_d;这是右,使用两个独立的连接到时间维
select * from fact
join time_dim entr on fact.entry_d = entr.date_d
join time_dim book on fact.book_d = book.date_d;还请注意,如果您使用内部连接(如上面的示例所示),您应该对这两个日期进行一些基本验证和绑定。要点是:您应该识别包含无效日期的事实行(时间维度或NULL中没有涉及),并正确地处理它们--而不是在联接中默默地丢弃它们。
对于非平凡的设置,特别是在时间列上对事实表进行分区时,您可以选择本机DATE格式,而不是其他维度的替代键。(这是一条实际的规则-理论中没有包括在内)
https://stackoverflow.com/questions/69595952
复制相似问题