2017-10-05 128 views
0

我有一個填充SQL Server數據庫的服務。該服務是用nodejs編寫的。如何存儲由多個項目共享的數據庫模式?

不久,我將不得不創建一個網站,顯示數據庫中的數據。然後創建一個單獨的網站,數據庫的管理面板。

即將增加與數據庫交互的更多服務。新服務可能不會使用相同的語言或平臺。

當前數據庫模式包含在與服務代碼捆綁在一起的SQL文件中。單元測試使用該文件在每次測試之前設置一個測試數據庫。

2個,3個或更多項目共享數據庫模式的最佳方式是什麼?

我想確保如果我更改數據庫,我不能忘記更新其中一個項目或其測試。

行業最佳實踐是什麼?數據庫模式應該放在一個單獨的模塊中,作爲依賴關係嗎?如何解決使用不同語言的問題?

+0

不確定最佳做法。但是你可以爲每個網站進行集成測試,不是嗎? – mike123

回答

1

這是一個複雜的問題,我不確定是否有一個最佳答案。

您面臨的問題是耦合之一 - 您的解決方案中有一個artefact,它是其他幾個工件的依賴關係。軟件中最古老的體系結構原則之一就是減少耦合 - 它會導致錯誤,開發速度較慢,代碼難以修改。

有許多方法可以減少軟件設計中的耦合。經典的答案是介紹接口和依賴注入;數據庫顯然不實用。

「最乾淨」的方式是通過API訪問數據庫。您可以使用版本控制來允許多個應用程序管理該依賴項 - 應用程序A是針對1.0版API編碼的,並且您承諾不會更改該版本(或者至少不是沒有棄用聲明)。這確實引入了大量的額外工作,以及潛在的性能挑戰。

一個更實用的解決方案是堅持所有環境的自動化部署機制,並從中央位置檢索數據庫模式,堅持所有應用程序都包含一組集成測試以執行所有數據庫功能。您可以通過虛擬機映像分發開發和測試數據庫,例如,對於您的模式具有「只讀」狀態。

我已經使用各種技術做到了這一點。第一步是創建一個將數據庫轉換爲文本文件的過程,這些文件可以在源代碼存儲庫中進行管理,然後播放以創建工作數據庫。 Here's有很多關於如何做到這一點的信息的SO問題。

將數據庫置於版本控制之後,您可以決定如何分發數據庫 - 可以要求項目檢出數據庫並自行構建數據庫,或者作爲docker鏡像或虛擬機或其他。

您依賴於您的應用程序來做正確的事情 - 它不是通過技術功能實施的 - 但您不必爲解決方案引入重要的新層。

+0

如何構建數據庫模式的中心源? 我目前的想法: 1.創建一個存儲sql文件來設置數據庫的git存儲庫。 2.製作數據庫泊塢窗圖像,從官方數據庫映像開始,並將SQL應用到它。 3.對於每個項目創建一個docker撰寫文件,運行項目+ db – Euphe

+0

我已經更新了答案 - 訣竅是讓您的數據庫處於版本控制之下,以便您可以以受控方式更新您的架構;一個你有,你可以創建碼頭圖像等。 –

相關問題