我正在开发一个新站点,我必须将它的旧数据迁移到新数据库,该数据库具有新的布局结构。
我发现难以迁移,多个地址一个人可能有。
只是一个细节,当我从旧数据库插入这些客户端时,我让自动增量设置它的ID,所以新客户端ID将与旧数据库不同表,我应该保持不变吗?
考虑下表结构:
CLIENT TABLE :
#|id_client|#|name|#
#| 1 |#|John|#
#| 2 |#|Bob |#
#| 3 |#|Karl|#
这个表很容易迁移,我只需要这样做:
INSERT INTO NEW_DB.CLIENT SELECT * FROM (SELECT id_cliente,name FROM OLD_DB.CLIENT)
但是,如果我有一个地址表,用户可能有0..n地址怎么办?
如何将其插入到Client.id_client的FK引用中,记住新客户端ID与旧的?
#|id_address|#|address|#|Client_id_client
#| 1 |#|Addr123|#| 1
#| 2 |#|Addr321|#| 1
#| 3 |#|Addr124|#| 2
答案 0 :(得分:1)
要拥有一个完全可移植的脚本而不依赖于自动生成的ID,您需要确定CLIENT表中标识客户端的唯一列(ID除外)。
假设name是您客户端表上的唯一属性,您可以将数据插入地址表中,如下所示:
INSERT INTO NEW_DB.ADDRESS (COL1, COL2,..., CLIENT_ID)
SELECT OLD_DB.ADDRESS.COL1, OLD_DB.ADDRESS.COL2,...
(SELECT NEW_DB.CLIENT.CLIENT_ID from NEW_DB.CLIENT WHERE NEW_DB.CLIENT.NAME = OLD_DB.CLIENT.NAME)
FROM OLD_DB.ADDRESS, OLD_DB.CLIENT
WHERE OLD_DB.ADDRESS.CLIENT_ID = OLD_DB.CLIENT.CLIENT_ID