Mysql

遷移和規範化數據

  • June 1, 2012

我們正在重寫一個使用 MySQL 數據庫的大型 Django 應用程序,並且數據庫模式需要進行重大修改。我們還將應用程序移植到使用 PostgreSQL,有幾個很好的理由。

我編寫了一個小腳本,允許我將舊的 MySQL 表轉儲到 PostgreSQL 數據庫中,在它們的名稱前加上 oldapp_*

我們開始編寫一些數據遷移腳本,這些腳本基本上是:

insert into foobar(c1, c2, ..., cn)
select c1, c2, ..., cn from oldapp_foobar where ...

現在,這個應用程序廣泛使用代理鍵(Django 不允許複合主鍵並鼓勵大量使用代理)。對於第一個遷移腳本,我暫時跳過了插入/選擇中的代理鍵,因此 PostgreSQL 會自動生成新的 id。

這當然可行,但是在遷移外鍵時,這不是一個好主意。我正在考慮幾種方法,但我很感激這裡的一些輸入。

只保留鑰匙。例如,您將能夠更輕鬆地在舊數據庫中定位數據。

但請記住在遷移後更新與您的鍵關聯的序列,以便它們的值大於數據庫中最大的鍵。

我會像你已經做過的那樣生成新的代理鍵。刪除鍵空間中的間隙。

但是我會將每個表的舊代理鍵保存在另一行中,以便您可以可靠地連接到舊數據。當遷移完成並且您最終永久地放開您的oldapp_*表時,您可以刪除額外的列。

引用自:https://dba.stackexchange.com/questions/18624