2010-09-10 59 views
1

這是一個針對你們開發的開發團隊的問題,你們所有人都有獨立的數據庫。您使用源代碼控制和其他工具版本化數據庫,這些工具會自動將開發數據庫更新到最新版本的數據庫(模式,數據,SP,函數等)。數據庫版本控制 - 分支交換如何工作?

好極了!可是等等!如果您正在開發軟件的4.0版本,但是現在您需要將分支機構切換到3.2分支來修復錯誤?架構可以(現在幾乎可以肯定)與現在非常不同...

我想如果您經過額外的努力來編寫回滾腳本以及您的更改腳本,這可能會起作用。但是,這似乎很多工作 - 它真的值得嗎?

回答

1

更容易的是創建一個新的3.2分支數據庫並在3.2分支代碼上工作。我要求每個開發人員只有一個數據庫可以工作,這似乎並不合理。

0

我正在做一個假設,並假設您將數據庫版本化爲二進制文件?如果您的所有數據庫資產都是建設性代碼的形式(例如SQL腳本和/或文本數據轉儲),那麼解決方案將很簡單,就像Mark建議的那樣:將這些資產存儲爲開發分支的一部分。要在版本3.2上工作,請切換分支,重新運行創建腳本和3.2,數據庫。合併將與常規代碼一樣簡單(或根據您選擇的版本控制系統一樣痛苦)。

這裏有一些建議,在此模式下工作:

  • 如果創建從文本數據庫實例太慢,做一個共享磁盤捲上的高速緩存,被所有的架構/數據的內容鍵控文件(或其MD5總和)。
  • 編寫預提交鉤子以確保開發者實例中的模式和數據轉儲與版本控制下的模式和數據轉儲相同。這可以防止人們使用交互式工具更改開發數據庫,​​然後忘記提交它們。
  • 您提到更改腳本;將其視爲一項責任。儘管您的部署方案可能需要它們(例如對於想要就地升級的客戶),但它們會複製數據庫版本歷史記錄中的信息,而墨菲的法律複製遲早會意味着不同步。嘗試使用「diff」從版本化數據庫資產中自動生成更改腳本;或者如果無法實現,請將一些嚴重的單元測試用於數據庫升級。