在维度建模的上下文中,作为典型情况,在维度表中使用代理键来跟踪行的变化(http://www.kimballgroup.com/2006/07/design-tip-81-fact-table-surrogate-key/)是很好的。
实现代理密钥有三种常用方法:1)序列号2)版本号3)散列密钥(由数据库使用)
我的问题是:为什么序列号在我见过的大多数维度建模中都是首选。
非常感谢
答案 0 :(得分:3)
我认为通常使用序列号有几个原因,但我不认为这是在所有情况下做事的明显优越方式。
我之前没有看过这个例子,谷歌搜索它似乎出现了这个问题和一些引用将它附加到现有字段,所以我将假设你正在谈论将版本附加到序列或散列或其他标识符。
如果你不打算使用序列号,这可能是我的首选。虽然我认为需要一些非常具体的情况
将信息编码到代理键中的次数之一意味着刺伤自己的脚,以便将来发展。
如果您正在使用类型1缓慢变化的尺寸,那么您只是在脚下刺伤了自己。更新了属性?尝试更新主键而不删除数据库的一半,看看你能得到多少。
所以这取决于你的情况,但是序列号很容易实现,并且在几乎所有情况下几乎完全可以忽略不计,直到它作为一个舒适的默认值。因此,选择其他选项通常属于“你必须解释为什么要这样做”的类别。