我正在设置Fact和Dim表,并试图找出设置时间值的最佳方法。 AdventureworksDW为DimTime表中的每个时间条目使用时间键(UID)。我想知道有什么理由我不应该只使用时间值,即0106090800(我的粒度是每小时)?
答案 0 :(得分:3)
如果要更改维度中的定义,“智能密钥”(在本例中为编码日期和小时编号)可能会导致问题。例如,您的用户可能会坚持从本地时间到UTC的更改。现在你的密钥实际上不再是一个有用的数字,它是维度中的旧值。
此外,由于午夜翻转问题,智能密钥的日期部分可能与UTC的实际日期与当地时间更改不匹配。
为防止密钥出现问题,您不能将其用于任何类型的计算。在这种情况下,它比简单的GUID或自动递增数字好一点。
自动增量键(或GUIDS)快速而简单。最重要的是,它们在所有方面都非常一致。
时间碰巧有一个数字映射,但它有助于看到这是一个奇怪的巧合,而不是良好设计的基础。
答案 1 :(得分:1)
答案 2 :(得分:0)
主键应该是代理,没有意义 - 但是,使用YYYYMMDD作为日期维度键是难以抗拒的,并且还允许简单的表分区。诀窍是它应该仍然被认为是毫无意义的 - 它看起来像一个约会的事实应该被视为纯粹的巧合。永远不应该向业务用户公开此密钥。