解决方法
要正确合并使用自动生成(non_GUID)键的两个数据库,您需要执行几个步骤.首先将新的自动生成的密钥添加到父表,然后从两个表中导入所有数据,将旧的文件重命名为ID_old,并将新文件重命名为旧的ID名称.此时,您可以移动子表.您需要通过连接到父表并将新的id字段作为外键的值而不是现有表中的值来复制到子表.您需要为每个外键表重复此过程,如果该表也是父表,则需要在复制任何数据之前将conversionid字段添加到表中,以便您可以在链中一直工作.要做到这一点,需要掌握大量关于数据库结构和大量规划的知识.如果没有两个源数据库的良好备份,请不要考虑这样做.当两个数据库都处于单用户模式时,最好能够进行此过程.
如果您使用自然键并具有重复项,则会遇到很大的问题.所有重复的密钥记录都应首先移动到一个单独的表中,并确定应该制作哪个更正确的数据.在某些情况下,您会发现自然键实际上并不是唯一的(它们很少就是我几乎不使用它们的原因)并且合并的数据库需要使用某种类型的自动生成的键.这将涉及代码更改以及数据库更改,因此它是最后的选择.
您经常使用自然键找到的是每个数据的数据不同但是simliar(地址中的St. vice Street)在这种情况下标记插入的记录之一,然后在两个步骤中插入时,首先记录没有重复项,然后重复项表中标记为插入的记录.请记住,您必须检查所有外键表中的所有记录,以确定要保留哪些记录以及哪些记录不保留.抛弃任何重复项是一个坏主意,你会丢失数据,可能是关键数据(如客户的订单).这是一个漫长而乏味的过程,需要具有数据专业知识的人才能做出决定.作为程序员,您应该为他们提供一个重复数据删除工具,让他们检查每组重复项的所有数据,并选择要保留的内容和删除的内容,然后标记每个重复项,它将运行一个过程来插入记录.记住你的设计,对于真正的重复,会有一些子表(如订单)需要发送到数据库的记录选择作为输入的记录(订单是一个例子),对于其他表你会想要选择哪个是正确的(例如地址).因此,您可以看到这是一个复杂的过程,需要彻底了解数据库.
如果您有很多重复项,他们可能会清理并添加数据数月,因此工具非常重要.这样做的人很可能是系统用户,而不是数据库专家或程序员,因为他们是唯一真正可以判断保留哪条记录的人.可能你需要在任何情况下做一些类似的事情,因为即使你有一个自动生成的密钥,也可能有重复的记录.它们更难找到.