如何复制多对多关系

时间:2019-11-22 23:52:15

标签: sql many-to-many

我有一个产品数据库,正在尝试将特定产品的数据和关系复制到新产品的克隆中。但是,我对如何复制几个多对多的关系感到困惑。例如,考虑一个有两个部分的产品,每个部分都有几种可用的颜色。我有一个产品表,一个产品区域表和一个颜色表。产品ID是区域表中的外键(一对多)。面积表具有区域ID(pk)以及其他描述性字段,而颜色具有颜色ID(pk)以及调色板信息。第四个表用作多对多查找表,它的主键是部件ID和颜色ID的总和。就目前而言,这是一个非常简单的配置。 enter image description here

但是,尽管有很多方法在这里无法详细说明,但我无法想到克隆此结构的方法。我可以轻松地复制左手产品区域关系,从而生成新的AreaID(A,B,C)。但是,下一步,我想使用新的区域ID复制多对多关系。但是,现在我不知道要与哪个新ID关联的原始ID(H,L,W)。 例如,新ID A是否从旧ID H,L或W映射到颜色集?我只有身份证可以使用。我可以在一条select语句中从源中同时选择零件和零件颜色对,但是我无法使用一条语句插入两个表。

换句话说,如果我想为其提供一半的新ID,该如何复制多对多关系?我必须求助于游标吗?如果需要,我可以,但是我在想一种完美的方法来实现这一点,而我却无法解决。也许使用临时表或某种表值函数?我试图寻找答案,但是我能找到的是建立多对多关系的建议。

感谢您有耐心阅读此问题的专家。

詹姆斯

1 个答案:

答案 0 :(得分:-1)

SymmetricDS使用更改数据捕获将具有许多关系的表复制。关键是执行初始加载以使数据库最初保持同步,这样,如果更新了子记录,更改数据捕获也将起作用。在最新版本的SymmetricDS(3.10及更高版本)中,如果数据库不同步,它将自动解决外键错误。如果子行被加载到没有父行的目标中,它将回调到源以加载丢失的父行,因此您无需干预。