2011-07-04 65 views
5

我在想什麼是創建和維護數據庫映射和SQL腳本的最佳方法。我知道我更喜歡在文本編輯器上手工編寫SQL腳本(另外還設計了一張貼在我旁邊的地圖),而其他人則更喜歡使用數據庫映射軟件(MySQL Workbench,Visual Studio ...一些在this post中列出)自動生成腳本。你如何創建和更新你的SQL腳本?

這兩種解決方案都有優點和缺點。我看到這些優點:

  • SQL腳本用手
    1. 你知道究竟寫什麼。
    2. 你可以保持一個乾淨,易於閱讀的SQL代碼。
    3. 編寫代碼,您可以更好地查看數據庫細節。
    4. 編寫代碼使您能夠掌握SQL知識。
  • 從設計圖自動生成的腳本:
    1. 節省一些時間。
    2. 即使不知道SQL語言,也可以生成一個腳本(即使我用將這個腳本列爲SQL腳本的相反優點)。
    3. 防止輸入錯誤。

你怎麼看,你進入什麼樣的方式?

回答

7

如果自動執行某些操作可以節省時間和人爲錯誤,爲什麼不這樣做?我會嘗試自動生成SQL,如果:

  1. 我已經填充的測試數據庫,並通過編寫和執行,我沒有保持跟蹤特設SQL非查詢建立起有機的方式架構;和
  2. 如果數據庫是相當簡單的,用標準化的低量

另一種罕見的情況可能是,如果你有爲此所需的架構在SQL的形式來提取數據集的大規模名單。

手寫書寫的好處在於您能夠意識到設計的每個部分,並且能夠更好地執行數據完整性(例如通過使用外鍵或限制數據類型)。總之,我會同意你的專家名單。

對於升級腳本,我強烈傾向於手動編寫這些腳本,因爲它們通常很短,對於最終運行它們的人來說,它們更具可讀性。

我想要升級腳本的一個提示是確保每個腳本都添加一行,在唯一存在的表中確定數據庫版本是否正確。例如:

INSERT INTO DB_VERSION (upgrade_time, version_from, version_to, comment) 
    VALUES ('2011-07-04T120320', '2.2.4', '2.3', 'add column x to table y.') 
+1

愛db_version的想法 – Goran

+2

db_version(我也使用)有另一個更重要的用途。需要保證db的簡單升級路徑。我通常擁有升級腳本,只執行從版本X升級到版本Y的升級腳本,並通過檢查當前版本進行升級。如果我需要從以前的版本升級,那麼我需要執行正確的升級腳本序列。 – Frazz