2008-10-25 94 views

回答

3

我建議總是可以重構糟糕的或過時的數據庫設計,它只是取決於你願意去做多少工作。

如果您正在尋找用代理鍵替換用戶定義的數據,那麼您應該能夠簡單地改變現有表以包含非空的標識列,這應該會導致分配所有現有記錄一個新的密鑰自動。

一旦新字段填充了唯一的ID,如果您需要移出並將外鍵引用替換爲此表,那麼我只需更改這些表以包含新字段並使用類似如下內容:

UPDATE child_table 
SET new_fk_val = 
    SELECT new_pk_val 
    FROM parent_table 
    WHERE parent_table.old_pk_val = child_table.old_fk_val 

該步驟完成後,您可以刪除舊的外鍵約束,刪除舊的外鍵列,刪除舊的主鍵列,建立新的主鍵約束,然後建立新的外鍵約束。

當然,如果舊版本的父和子表的關係就是這樣,你必須在子表無效的記錄,你可能需要做類似如下:

DELETE FROM child_table 
WHERE old_fk_val NOT IN 
    (SELECT old_pk_val FROM parent_table) 
相關問題