否定主键

时间:2010-03-18 20:41:14

标签: sql primary-key

对表使用否定主键是否有任何影响(身份增量-1,SQL Server 2005中的身份种子-1)?

原因是我们正在创建一个新数据库来替换现有数据库。两个数据库之间有类似的表格,我们希望信息的“来源”对我们的应用程序透明。该方法是创建从两个数据库中联合表的视图。负PK确保身份不重叠。

9 个答案:

答案 0 :(得分:15)

就像其他人所说的那样,数据库很好用。

但对于使用DataSet + DataAdapter的.NET应用程序来说,这将是一个问题,因为它们使用负面密钥作为新记录的临时代码。

其他数据访问层可能会使用类似的技巧。

答案 1 :(得分:7)

从SQL Server的角度来看,这非常好。真正的问题将是你的申请。

答案 2 :(得分:5)

您需要查看遗留代码并查找开发人员在主键上排序的位置,作为按日期排序的懒惰/草率方式(因为标识pk通常与时间强烈或完全相关)。

答案 3 :(得分:4)

唯一的问题是你无法以这种方式添加第三个数据源!

答案 4 :(得分:2)

不是问题。

这有点不正统,但除此之外,还不错。

SQL Server提供的默认设置就是 - 默认设置,可以根据需要进行更改。看起来你得到了很好的妥协。

答案 5 :(得分:1)

如果负数变为破坏某些东西,则对另一个使用偶数和一个奇数。

答案 6 :(得分:0)

这不是问题。只需确保您的标识列属于允许负数的类型。

答案 7 :(得分:0)

另一种选择是使用类似“OLD_”的字符串为旧密钥添加前缀。问题是你的关键字段是非数字的。

如果你必须有数字键,你可以引入一个“遗留”指标列,主键是数字ID和遗留指标的组合(希望这个组合应该是唯一的)。

答案 8 :(得分:0)

我认为有2个来源不是这种方法的正确理由,虽然技术上允许。它不具有可扩展性(Larry Lustig的答案为+1)。

我只是创建一个视图或存储过程,它结合了两个数据,通过根据需要转换ID,并且应用程序可以使用它而不是直接表读取和联合。这可以通过稍后修改视图/ SP以再添加一个源来进行扩展。

相关问题