2008-08-28 114 views
7

在開發應用程序數據庫時,不可避免地會彈出變化。我發現的訣竅是保持您的數據庫與您的代碼一致。在過去,我添加了一個構建步驟,可以針對目標數據庫執行SQL腳本,但這樣做會非常危險,因爲您可能會無意中添加虛假數據或更糟。根據代碼版本測試和管理數據庫版本

我的問題是保持數據庫與代碼一致的提示和技巧是什麼?如何回滾代碼?分枝?

回答

3

嵌入數據庫中的版本號很有幫助。有兩種選擇,將值嵌入到表中(允許對多個項進行版本控制),或者可以測試明確命名的對象(如表或其他)。

當您發佈到生產環境時,如果出現意外災難,您是否有回滾計劃?如果這樣做,它是模式回滾腳本的應用程序嗎?使用回滾腳本將數據庫回滾到以前的代碼版本。

1

您應該可以從頭創建數據庫到已知狀態。

雖然能夠做到這一點很有幫助(特別是在新項目的早期階段),但很多(大多數?)數據庫將很快變得太大而無法實現。此外,如果您有任何BLOB,那麼您將在生成整個數據庫的SQL腳本時遇到問題。

我一定對某種數據庫版本控制系統感興趣,但是我還沒有找到任何東西。所以,而不是一個解決方案,你會得到我的投票。 :-P

+1

我不同意。您只需*能夠測試數據庫的工作副本。您必須通過安全措施對生產進行測試,或者讓您的管理層爲更大的測試服務器提供現金。 – 2009-10-06 11:01:48

0

我喜歡Django做它的方式。您可以構建模型,並在運行syncdb時應用您創建的模型。如果你添加一個模型,你只需要再次運行syncdb。每次你推動你的構建腳本時,這很容易。

當您需要更改已經創建的表時,會出現問題。我不認爲syncdb處理。這將需要你進入並手動添加表格,並添加一個屬性到模型中。您可能想要對該更改語句進行版本化。儘管這些模型總是處於版本控制之下,所以如果您需要的話,您可以在不運行sql腳本的情況下在一個新框中啓動並運行數據庫模式。與此相關的另一個問題是跟蹤您始終想要在數據庫中使用的靜態數據。

Rails遷移腳本也很不錯。

一個數據庫版本控制系統會很好,但我不知道這樣的事情。

0

雖然能夠做到這一點很有幫助(特別是在新項目的早期階段),但許多(大多數?)數據庫將很快變得太大而無法實現。此外,如果您有任何BLOB,那麼您將在生成整個數據庫的SQL腳本時遇到問題。

備份和壓縮可以幫助你。對不起 - 沒有任何藉口不能獲得一組好的數據來開發。即使它只是一個子集。

1

您確實希望能夠使用乾淨的機器,從源代碼管理中獲取最新版本,一步構建,並且一步完成所有測試。快速實現這一點使您可以更快地生成優質軟件

就像external libraries一樣,數據庫配置也必須在源代碼管理中。

請注意,我不是說你的所有活動數據庫內容應該在同一個源代碼管理中,只需要達到一個乾淨的狀態。 (請備份數據庫內容!)

1

在版本控制的文本文件中定義模式對象和參考數據。例如,您可以定義格式爲Torque格式,格式爲DBUnit的數據(均使用XML)。然後,您可以使用工具(我們自己編寫的)來生成DDL和DML,這些工具將您從應用程序的一個版本轉移到另一個版本。我們的工具可以將(a)以前版本的模式&數據XML文件或(b)現有數據庫作爲輸入,以便您始終能夠將任何狀態的數據庫轉換爲正確的狀態。

0

將您的數據庫開發置於版本控制之下。我建議看看neXtep設計師 http://www.nextep-softwares.com/wiki

這是一個免費的GPL產品,通過與SQL生成引擎連接的版本信息提供了一個全新的途徑數據庫開發和部署可能會自動計算任何升級腳本您需要將任何版本的數據庫升級到另一個版本。任何現有的數據庫都可以通過反向同步進行版本控制。

它目前支持Oracle,MySql和PostgreSql。 DB2支持正在開發中。它是一個功能齊全的數據庫開發環境,您可以始終使用存儲庫中版本控制的元素。您可以在開發過程中通過簡單的同步來發布更新,並且可以生成可導出的數據庫交付,您可以通過獨立安裝程序在任何目標數據庫上執行該驗證版本,執行結構檢查並應用升級腳本。

IDE還爲您提供SQL編輯器,依賴關係管理,對模塊化數據庫模型組件,數據模型圖,SQL客戶端等的支持。

所有文檔和概念都可以在wiki中找到。