在一些數據庫重構過程中,我需要引入未來的多對多關係,我偶然發現了一些我認爲一定可能的事情。數據庫重構爲多對多的關係
給定一個原始表:
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之類的東西爲簡潔的外鍵。