在维度建模的背景下,作为典型情况,在维度表中使用代理键来跟踪行的变化是很棒的(http://www.kimballgroup.com/2006/07/design-tip-81-事实表代理键/)。
代理键有三种常见的实现方式 1)序列号 2)版本号 3)哈希键(数据仓库使用)
我的问题是:为什么在我见过的大多数维度建模中,序列号是首选。
我认为普遍使用序列号有几个原因,但我不认为这在所有情况下都是一种明显优越的做事方式。
我以前没有见过这样的例子,谷歌搜索似乎出现了这个问题以及一些将其附加到现有字段的参考,所以我假设你正在谈论将版本附加到序列或哈希值,或其他一些标识符。
如果您不打算使用序列号,这可能是我的首选。但我认为需要一些非常具体的情况
将信息编码到代理键中的少数情况之一并不意味着为了未来的发展而搬起石头砸自己的脚。
如果你使用类型1缓慢变化的维度,你就是搬起石头砸自己的脚。更新了属性?尝试在不删除一半数据库的情况下更新主键,看看能走多远。
所以这取决于您的情况,但是序列号非常容易实现,并且在几乎所有情况下其缺点几乎完全可以忽略不计,以至于它是一个舒适的默认值。因此,选择另一个选项通常属于“你必须解释为什么这样做”的类别。