2015-06-04 98 views
0

我找一个小咨询如何与我们一直在进口的情况下将数据从其他部门的一个表进行:
复合主键与自动递增主键

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字段,并将其作为唯一标识符分配给我们已有的所有数据。

但是,由于这是我最近走入的一个遗留混乱,我正在寻找有关如何继续此操作的任何建议。

+0

我个人会使用身份字段,如果我不知道PK是由我认为它的列构成的。 –

+0

@TabAlleman,他们一直在使用不同的唯一标识符来处理他们的数据,我非常肯定它没有影响我使用前进的方向。我想我想知道是否有一个ID风险的选项实施。我的意思是在一个新的ID字段中添加一个列,但是对于复合,我正在改变PK - 对此的想法? –

+0

如果您拥有单个标识列,那么您可能需要编写一些特定查询,这些查询会更容易。除此之外,我无法真正想到两者之间的区别。 –

回答

1

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

那么你也必须确保任何接口更新由ReferenceNumber/dateor新的ID做查找。