2017-07-26 34 views
0

我有一個類似的問題,此前已解決here。但是,有一個關鍵的區別。我需要保持與原始數據的關係。將數據複製到另一個表加上鍊接表以維護關係

例如,假設有一個與信息的表,如這樣的:

user {id, first, last, address} 

我想地址部分移出「用戶」表,並進入它自己的「地址」的表。

user {id, first, last} 
address {id, address} 
user_address {user_id, address_id} 

因此新的「地址」表將包含用於存儲在「用戶」表和「user_address」鏈接表將保持原來的用戶連接的數據。

+0

這是真的,在 「地址」 表 「地址」 字段將是唯一的? –

+0

這不是要求。我確定存在重複的地址。事實上,爲了簡化這個項目,可能最好不要獨一無二。 –

+0

我發佈了答案。 「地址」表中不會有重複項。 –

回答

0

爲了實現所需,您應該應用三個遷移腳本。

INSERT INTO user(id, first, last) 
SELECT 
    u.id, 
    u.first, 
    u.last 
FROM 
    old_user u 

 

INSERT INTO address(id, address) 
SELECT DISTINCT 
    /* I assume, that "id" is populated automatically (by increment etc.) */ 
    u.address 
FROM 
    old_user u 

 

INSERT INTO user_address(user_id, address_id) 
SELECT 
    u.id, 
    a.id 
FROM 
    old_user u 
JOIN 
    address a ON a.address = u.address 
+0

因此,第一位用於複製並清理原始表格? –

+0

不,首先將舊結構的表格重新命名爲「old_user」,然後用適當的結構創建3個新表格,然後應用這些腳本。 –

+0

好的,還有我的最後一個問題:如果有更多的屬性不僅僅是地址而且不是唯一的呢?我仍然可以在多個列上進行連接,只是刪除select語句中的「distinct」位?例如地址= {地址,地址1,城市,州,郵編} –

相關問題