在一些数据库重构过程中,我需要引入未来的多对多关系,我偶然发现了一些我认为一定可能的事情。数据库重构为多对多的关系
给定一个原始表:
CREATE TABLE a (
id serial NOT NULL,
field1 varchar,
field2 varchar,
field3 varchar
);
和新创建的表:
CREATE TABLE b (
id serial NOT NULL,
field1 varchar,
field2 varchar
);
我想FIELD1和FIELD2的内容从移动到B。为了适应多对一对多的关系,关联表也可:
CREATE TABLE a_b (
aid serial NOT NULL,
bid serial NOT NULL
);
这里原来的A-ID的和新建的B-ID的应该结束。
因此,如果我像这样
| 33 | John | Jane | Juli |
| 34 | Fred | Carl | Josh |
的a-表开始我想看到它在B-表结束:
| 1 | John | Jane
| 2 | Fred | Carl
和关联A_B
| 33 | 1 |
| 34 | 2 |
原始表将然后删除FIELD1和FIELD2删除,因此我会像这样
| 1 | Juli |
| 2 | Josh |
我立即想到使用with-queries,但没有找到办法让它工作。 这显然不起作用:
WITH new AS (
INSERT INTO b (field1, field2)
SELECT field1, field2 FROM a
RETURNING id
)
INSERT INTO a_b (???, bid) SELECT * FROM new;
但说明了问题。我没有找到插入b的方法,同时保持与相应的a-id的关系。我认为这一定是可能的。
有什么想法?
瑟伦
PS我omitteded之类的东西为简洁的外键。