【问题标题】:How can I replicate many to many relationship如何复制多对多关系
【发布时间】:2022-01-18 06:03:07
【问题描述】:

我有一个产品数据库,我试图将特定产品的数据和关系复制到一个新产品,一个克隆。然而,我对如何复制几个多对多关系感到困惑。例如,考虑一个有两个部分的产品,对于每个部分,它们都有几种颜色可供选择。我有一个产品表、一个产品区域表和一个颜色表。产品id是区域表中的外键,一对多。区域表具有区域 ID (pk) 以及其他描述性字段,颜色具有颜色 ID (pk) 以及调色板信息。第四个表用作多对多查找表,它的主键是零件 ID 和颜色 ID 的组合。就目前而言,这是一个非常简单的配置。

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

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

感谢各位专家耐心看完这个问题。

【问题讨论】:

    标签: sql many-to-many


    【解决方案1】:

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

    【讨论】:

    • 这是一个相当赤裸裸的尝试,为了自我推销而偷偷提问,“答案”完全无关紧要。
    猜你喜欢
    • 2019-05-15
    • 1970-01-01
    • 2017-08-25
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2018-12-11
    相关资源
    最近更新 更多