Mysql
遷移和規範化數據
我們正在重寫一個使用 MySQL 數據庫的大型 Django 應用程序,並且數據庫模式需要進行重大修改。我們還將應用程序移植到使用 PostgreSQL,有幾個很好的理由。
我編寫了一個小腳本,允許我將舊的 MySQL 表轉儲到 PostgreSQL 數據庫中,在它們的名稱前加上 oldapp_*
我們開始編寫一些數據遷移腳本,這些腳本基本上是:
insert into foobar(c1, c2, ..., cn) select c1, c2, ..., cn from oldapp_foobar where ...
現在,這個應用程序廣泛使用代理鍵(Django 不允許複合主鍵並鼓勵大量使用代理)。對於第一個遷移腳本,我暫時跳過了插入/選擇中的代理鍵,因此 PostgreSQL 會自動生成新的 id。
這當然可行,但是在遷移外鍵時,這不是一個好主意。我正在考慮幾種方法,但我很感激這裡的一些輸入。
只保留鑰匙。例如,您將能夠更輕鬆地在舊數據庫中定位數據。
但請記住在遷移後更新與您的鍵關聯的序列,以便它們的值大於數據庫中最大的鍵。
我會像你已經做過的那樣生成新的代理鍵。刪除鍵空間中的間隙。
但是我會將每個表的舊代理鍵保存在另一行中,以便您可以可靠地連接到舊數據。當遷移完成並且您最終永久地放開您的
oldapp_*
表時,您可以刪除額外的列。