我们有两个rails应用程序实例,每个实例都与自己的数据库通信;我们正在使用单个数据库将它们转换为单个应用程序。我们已经使得需要特定于特定域的部分正常工作;现在我们只需要合并数据库。我们要将数据从一个实例复制到另一个实例中,并修复ID以使它们不重叠。有很多表有很多外键。这样做有什么好办法,这样外键仍然指向新数据库中的正确行?
如果不清楚,我很高兴用糟糕的ascii艺术来解决问题。
答案 0 :(得分:3)
大多数关系数据库允许您注释要限制的外键,以便在指向表中的主键更改时进行监视。使用ON UPDATE CASCADE
时,可以将外键设置为“自动更新”。对两个数据库中的所有外键执行此操作,然后更新两个数据库中的所有主键,并自动转换所有外键。
答案 1 :(得分:2)
如何将每个id列(包括外键)更新为其原始值乘以10,然后为第一个数据库添加1,为第二个数据库添加2。
这样,id 1在db 1上变为11,在db 2上变为12。由于主键和外键都经历了相同的更改,因此您不必担心记录的相关性,只需进行更新即可相同的公式。
所以它会像
那样在db 1上:
UPDATE user SET id = id * 10 + 1;
UPDATE privilege SET id = id * 10 + 1, user_id = user_id * 10 + 1;
在db 2上:
UPDATE user SET id = id * 10 + 2;
UPDATE privilege SET id = id * 10 + 2, user_id = user_id * 10 + 2;