2016-01-20 33 views
2

我的意思是允許應用程序修改數據庫的好習慣?還是應該從應用程序代碼庫的外部完成數據庫遷移?將Flyway,Liquibase等數據庫遷移工具與應用代碼庫集成到一起可以嗎?

這是新的,所以任何輸入將不勝感激。

我們使用java和gradle來構建應用程序。

+0

你究竟是什麼意思?跟蹤遷移腳本?或執行遷移? – Stultuske

+0

兩者其實。在此之前,我們曾經在CVS中保留單獨的文件夾,特別是對於db腳本。與代碼庫分開。 – ashishjmeshram

+0

'Both,actually'..遷移不是你的應用程序的一部分,我也沒有看到你的應用程序如何執行它。但保留您的項目的遷移腳本是合乎邏輯的:如果您不知道如何構建數據庫,您將如何在以後安裝您的應用程序? – Stultuske

回答

10

Flyway作者在這裏。

是的!在一天結束的時候,有在玩兩支重要力量:

  1. 您的模式實在是緊耦合的應用程序代碼:你希望在應用某些表和列出現,以便它可以讀取&寫給他們。從你的應用程序的一個版本到下一個版本,哪一個完全不同。
  2. 您不希望在應用程序/服務之間進行基於數據庫的集成,因爲這會打破所有封裝。數據庫是服務的私有實現細節。與其他服務的集成應該通過一個API層來進行,並具有適當的驗證和業務規則實施。

等等所有這一切,只是一起在一起

通過讓應用程序migrate the database on startup確保數據庫模式始終與應用程序對應該在其中找到的內容的期望保持同步。

+0

flyway可以生成更新模式,而不是直接針對數據庫運行。在某些DBA中,可能需要在生產dbs上執行它們之前查看腳本。 – ashishjmeshram

+0

生產對於這個太晚了。讓你的數據庫管理員與開發人員進行協作,以便對所有數據庫(開發,測試,分期和產品)應用正確的更改。 –

+0

理想情況下,數據庫管理員會與開發人員合作,以便更改將被預先批准,但事實是有些組織難以更改已建立的流程,需要審查腳本。 Axel - 也許這是我們可以添加到FlySQL的增值功能? ;)@anything - 請聯繫我在大衛點阿特金森在紅門網點com,因爲我想更詳細地瞭解您的要求! –

1

我完全同意Axel關於保持在一起。

但是,當您的數據庫用戶沒有權限更改數據庫結構或者您根本不應該更改結構時,它會派上用場,不讓工具直接運行結構更改,而是生成SQL腳本。

然後可以將這些數據提供給首先檢查並批准SQL的數據庫管理員,然後自行運行這些數據庫。

這是我們(必須)做到的。

不要誤會。這只是間接的一個層面。不要讓工具直接執行SQL,而是讓工具將SQL寫入文件。然後DBA將從文件中執行SQL。

0

不,除非你是不知道的:

  • 你在同一個數據庫中運行多個應用程序。所以,你需要選擇一個將保存所有腳本的文件。

  • 您需要能夠回滾您的部署,否則需要在每次啓動時對數據庫進行快照。

  • 您的DBA向您的應用程序提供執行架構更改的能力,即在未經他們批准的情況下進行架構更改。

通過在所有項目中使用代碼保留飛橋目標版本,可以輕鬆實現耦合代碼和模式。

相關問題