【发布时间】:2015-04-07 11:25:28
【问题描述】:
我在 Oracle TABLE_A 和 TABLE_B 中有两个表,这两个表都有大约 20000 到 30000 条记录。
TABLE_B 中的记录通过外键链接到 TABLE_A 中的记录 - (TABLE_B 包含 TABLE_A 的主键)
我需要交换外键。即
我希望现在 TABLE_A 应该包含 TABLE_B 的主键。 (这是一个功能需求——由于前端的一些验证,在当前数据库实现形式中对这些表的更新是不可能的。)
此外,在执行此操作时,我希望从 (TABLE_B -> TABLE_A) 链接的记录仍保持链接状态。 现在通过新的外键 (TABLE_A -> TABLE_B)。
可以通过几个 ALTER TABLE 命令轻松移动外键,主要问题是保持数据并正确重新链接。
最明显的方法是备份整个表,然后创建新脚本以在两个表中重新插入更新的数据。
有没有更快的方法来做到这一点而不会出错。
【问题讨论】:
-
除非表格是 1:1 的关系——即。表 A 中的每一行在表 B 中都有一行,表 B 中的每一行在表 A 中都有一行——我认为这不起作用。如果它们是 1:1,我不明白为什么它们是两张桌子而不是一张。
-
@DavidAldridge,1:1 关系在超类/子类模型中很常见。避免在单个宽表中出现大量 NULL 列。
-
@JeffreyKemp 是的,我想是的——不过,从引用子类表的超类开始是相当错误的。
-
是的,很难想象模型怎么会被这样弄得一团糟。
标签: database oracle foreign-keys