【发布时间】:2018-12-08 03:05:10
【问题描述】:
假设我有一个需要复合 PK 的表:
Table1
+---------+---------+
| CompA | CompB |
+---------+---------+
| Value 1 | Value 2 |
| Value 1 | Value 3 |
| Value 2 | Value 3 |
+---------+---------+
然后我构建了第二个表,并希望在这个新的表 2 中使用表 1 中的 PK 作为 FK。有两种方法可以做到这一点。
选项 1 - 我最初选择的选项是仅使用表 1 中的复合键作为表 2 中的 FK。
Table 2
+------+---------+---------+
| T2PK | CompA | CompB |
+------+---------+---------+
| A | Value 1 | Value 2 |
| B | Value 1 | Value 3 |
| C | Value 2 | Value 3 |
| D | Value 2 | Value 3 |
+------+---------+---------+
选项 2 - 我现在要过渡到的选项是将表 1 中的 PK 更改为 ID 列,并对值对施加复合 UNIQUE 约束
Table 1
+----+---------+---------+
| ID | CompA | CompB |
+----+---------+---------+
| 1 | Value 1 | Value 2 |
| 2 | Value 1 | Value 3 |
| 3 | Value 2 | Value 3 |
+----+---------+---------+
因此,现在,在您想要使用表 1 作为 FK 的任何其他表中,您引用单个 ID 列(因为现在是表 1 的 PK)
Table 2
+----+------+
| PK | T1FK |
+----+------+
| A | 1 |
| B | 2 |
| C | 3 |
| D | 3 |
+----+------+
问题 - 我最初使用选项 1 构建表。为 1 个实体拥有跨越多个列的 FK 变得很烦人,并且使我的连接语句比它们需要的更复杂。我现在想过渡到选项 2。我已经使用选项 2 的方法构建了表,但是我想不出一个很好的方法来将选项 1 表的数据转储到我的新选项 2 表中。我不知道如何将Table1, Option1 的数据转储到Table1 Option2 的表中并生成ID,如何将这些生成的ID 与Table2 Option1 的同一组数据绑定到新的Table2 Option2
【问题讨论】:
-
Oracle 11g 对不起
-
您不能在多列上生成带有 ROW_NUMBER() 的 ID 并将其用作 PK 吗? docs.oracle.com/cd/B28359_01/server.111/b28286/…
-
令人惊讶的是没有找到任何重复项(嗯,一些 EntityFramework 的东西)。也许当这成为一个问题时,它往往会由有足够经验的人来解决。 Related, but OP is apparently past this point。本质上,重要的是生成一个包含 旧键和新键的表,至少是暂时的。