我一般都知道将一个DateTime列作为你的PK并不是一个好主意,但是对于我的情况,我认为它比在Fact Table中有一个代理键更有意义。
原因是......
附注 - 时间将采用UTC并使用SQL 2008 R2。
我所要求的是提供这种情况 - 这样做有什么不利之处?我会遇到不可预见的问题吗? 在稍后查询数据时,这是否是一件好事?
想知道人们在DateTime字段上的观点作为复合PK的第一列。
答案 0 :(得分:3)
几乎所有数据仓库的基本功能都是日期/时间是大多数表中键的一个组成部分。这没有什么“错误”。
代理键通常不应该是表的 only 键,所以也许你的问题确实是“我应该在桌面上创建代理键吗?”。我的建议是,如果你没有理由创建一个代理密钥,那就不要了。创建代理人的时间就是当你发现需要时。
答案 1 :(得分:0)
大多数事实表都有复合键和日期时间,或者DateKey, TimeKey
通常是其中的一部分。实际上,很常见。
dimDate
和dimTime
仅用于避免在查询的 WHERE 子句中使用“有趣”的日期时间函数。例如
-- sales on
-- weekends for previous 28 weeks
--
select sum(f.SaleAmount)
from factSale as f
join dimDate as d on d.DateKey = f.DateKey
where d.IsWeekend = 'yes'
and d.WeeksAgo between 1 and 28 ;
所以我可以在IsWeekend
和WeeksAgo
(DateKey
)上建立索引。如果这些被日期时间函数替换,则会导致逐行处理。