【发布时间】:2013-10-28 09:49:16
【问题描述】:
我正在使用 SQL Server 2012,并且我想创建一个“更改”表 - 当第二个表列值发生更改时,它将使用来自其他表的数据填充。
我正在向“更改”表中添加“datatime2”和“rowversion”列,以便跟踪何时进行更改。
可以使用“rowversion”作为主键吗?
我已阅读here ,如果当前行已更新,它将被更改,这就是为什么它不是“主键”使外键无效的好候选者。
无论如何,如果它不会用作外键并且“更改”表的行将永远不会被更新(只会插入新行)是可以使用“rowversion”作为PK还是我应该使用附加列?
【问题讨论】:
-
请您指定您使用的数据库。您能否还请解释一下您的上述逻辑的上下文......这个数据库是用来做什么的。即,如果这是用于数据仓库,那么这绝对是错误的处理方式。
-
这个想法是,当表中的某些日期由于 DML 操作而发生更改时,旧数据将插入我的“更改”表中,因此如果我需要查看主要更改的方式或时间桌子已经做好了。
-
您要么必须实现某种渐变维度,要么使用触发器。我更喜欢 SCD 的第一个选项,但这是一个复杂的实施过程。除此之外,为什么要使用行版本而不是物理主键?
-
是的,我将使用触发器。系统中类似的表都是这样创建的,我正在关注它。无论如何,我已经读过这不是一个好主意,所以我决定检查它是否会出现这么大的问题。如果是,我将完成创建一个物理的。
-
@ElectricLlama 在“更改”表中,我将包含“主”表中的所有列+日期和行版本列。 “更改”表将使用“插入/删除/更新后”触发器了解“主”表中的记录如何随时间变化。
标签: tsql primary-key sql-server-2012 rowversion