2013-02-11 87 views
1

我正在使用SQL Server 2012,并且我想创建一个“更改”表 - 当第二个表的列值发生更改时,它将使用其他表中的数据填充。使用“rowversion”作为主键列

我正在添加到“更改”表“datatime2”和“rowversion”列以追踪何时进行更改。

可以使用“rowversion”作为主键吗?

我已经阅读here,如果当前行被更新,那么它会被更改,这就是为什么它不适合“主键”使外键无效。无论如何,如果它不会被用作外键,并且“更改”表的行将永远不会被更新(只有新行将被插入),那么可以使用“rowversion”作为PK或I应该使用额外的列?

+0

请你能指定你正在使用的数据库。你能否也请解释你的逻辑的上下文......这是什么数据库被用于。即如果这是针对数据仓库的话,那么这绝对是错误的方式。 – SQLGuru 2013-02-11 08:42:14

+0

这个想法是当某个表中的某个日期因DML操作而改变时,旧数据将被插入到我的“Changes”表中,所以如果我需要查看如何或何时在主表中进行更改。 – gotqn 2013-02-11 08:47:18

+0

你要么必须实现某种缓慢变化的维度,要么使用触发器。我更喜欢SCD的第一个选项,但这是一个涉及到的实施过程。除此之外,为什么要使用行版本而不是物理主键? – SQLGuru 2013-02-11 08:55:37

回答

0

一些好的信息here

的MSDN页面仔细阅读还表明,如果SELECT INTO语句使用不当重复的rowversion值是可能的。有什么要注意的地方。

我会坚持原始数据中的身份字段,将其带入具有其自己的身份字段的更改跟踪表中。