复合主键与自动增量主键

时间:2015-06-04 17:08:00

标签: sql-server

我正在寻找一些关于如何处理我们一直从另一个部门导入案例数据的表的建议:

  Id    CreationDate                ClosedDate  LastUpdateDate            Name                                 Description          
DE5838  2015-06-02 06:14:11.11      NULL        2015-06-02 06:19:33.33    Look UP : Should be updated ...      Description : This is not a defect…          
DE5834  2015-06-01 16:16:03.03      NULL        2015-06-01 16:24:19.19    Sync error for Ultimate packages...  We are getting an error ....         
DE5822  2015-06-01 10:37:10.10      NULL        2015-06-01 10:37:10.10    Terminal subscription has expired... For given terminal serial number…            
DE5818  2015-06-01 09:53:44.44      NULL        2015-06-01 09:53:44.44    No Option Code…                      Allie pulled the report....          

很长一段时间(并且没有来自外部部门的大量数据定义),我们一直将ID字段视为PK - 现在我们才开始看到其他部门已经回收这些ID号(我知道,我知道 - 真的糟糕的主意)。那么,我们正在试图导入的数据是什么呢?不接受它,因为唯一标识符已经分配给案例数据。

我想的可能是一个很好的解决方案是将PK更改为具有ID和CreationDate的复合(我们认为可能外部部门创建数据的方式),或者我可以添加一个自动递增的ID字段,并将其作为唯一标识符分配给我们已有的所有数据。

因为这是我最近进入的遗传混乱,我正在寻找有关如何处理此事的任何建议。

1 个答案:

答案 0 :(得分:1)

创建复合键不仅会使您更改索引,而且所有引用主键的表也必须添加其他列。我建议在表格上添加一个标识字段。将您当前的ID字段重命名为ReferenceNumber。然后更新其他表中的所有外部引用以使用新ID。然后,您可以将外键字段转换为整数字段。这样可以最终节省数据库中的空间,并可能在将来加快连接速度。

然后你还必须确保更新任何接口以通过ReferenceNumber / date或新ID进行查找。