分享到

簡介

如果一個專案有多位開發人員共同參與,那麼要跟上開發資料庫的變更可能會是一項挑戰。在整個開發團隊中同步這些變更可能既繁瑣又耗時。當不同的團隊成員處理資料庫結構描述,或使用與最新狀態不符的開發資料庫中的資料時,可能會導致挫敗感,並導致錯誤最終出現在生產環境中。

特別是,這些問題可能會在以下情境中出現:

  • 開發人員正在處理不同版本的資料庫結構描述
  • 開發資料庫中的資料未反映結構描述的目前狀態

在本指南中,我們將探討團隊可以讓其資料庫結構描述和開發資料保持最新,並在團隊之間同步的一些方法。

在新人訓練期間設定開發資料庫

在資料庫結構描述和開發資料的變更可以在團隊成員之間共享之前,這些團隊成員需要使用一些初始資料庫狀態來啟動。對於大多數團隊來說,這是新人訓練流程的一部分,當他們開始參與專案時。此流程的複雜程度很大程度上取決於組織的規模和成熟度及其需求。

大多數新進開發人員入門的第一步是複製專案並在本地安裝。接下來,他們通常需要連線到開發資料庫。新進開發人員設定開發資料庫最常見的兩種方式是:

  1. 執行腳本以植入本機開發資料庫
  2. 連線到共用的遠端開發資料庫

這兩種方法都有其自身的一系列優點和缺點。

植入本機資料庫

植入本機資料庫的好處是它減輕了需要執行遠端開發資料庫的需求。開發人員可以在開始時更好地控制進入其開發資料庫的資料。與使用共用的遠端資料庫相比,他們也可以更輕鬆地重設資料庫。

如果採用這種方法,則需要額外努力來保持植入資料和邏輯與目前結構描述同步更新。如果變更頻繁發生,這可能會構成挑戰,並可能導致開發人員難以順利加入專案。

連線到共用的遠端資料庫

讓開發人員連線到共用的遠端開發資料庫可以減輕在新進開發人員的本機資料庫中填充資料的負擔。這可能很有幫助,因為它可以簡化初始新人訓練,使開發人員能夠更快地提高生產力。使用共用的遠端資料庫也可能是有益的,因為資料庫的變更可以由單一開發人員定期遷移,然後這些變更可以被所有團隊成員使用。

使用共用的遠端開發資料庫的缺點是它需要額外的資源來執行,可能會產生額外的成本。此外,如果所有開發人員都針對同一個資料庫工作,則很容易覆寫資料。另一個潛在的問題是,如果團隊成員非同步採用結構描述變更,則頻外變更可能會對資料狀態產生負面影響,使其難以使用。

持續的資料庫更新

無論是在本機還是遠端,一旦開發人員設定好要使用的資料庫,他們都需要持續檢查資料庫結構描述的更新,以及資料庫本身中的資料。如果團隊規模龐大且變更頻繁,這可能會很困難。

沒有一種適用於所有情況的方法可以讓團隊成員隨時掌握結構描述變更的最新資訊。適合您團隊的正確方法取決於具體情況。

以下列表包含一些可以組合起來以建立整體策略的方法,以便在您的團隊中保持資料和結構描述變更同步。

使用遷移

在團隊環境中使用關聯式資料庫時,使用遷移作為資料庫結構描述變更策略的起點至關重要。

資料庫遷移是一組工件,透過自動化,可以變更資料庫的結構。最簡單來說,遷移是一個 SQL 檔案,其中包含應用結構描述變更所需的語句。例如,向資料庫模型新增欄位可能會產生以下 SQL 檔案:

ALTER TABLE User ADD bio varchar(255);

雖然這個命令可以由單一開發人員在其本機開發環境的上下文中單獨執行,但將其作為資料庫遷移檔案存在,允許團隊中的所有其他開發人員透過自動化應用完全相同的變更。

特定資料庫遷移策略在語言和框架之間有所不同。但是,總的來說,它們遵循類似的模式:

  1. 變更描述資料庫模型的程式碼
  2. 產生一組遷移檔案
  3. 執行遷移以執行語句並使變更生效

通知團隊成員變更

使用資料庫遷移作為變更策略將有助於保持團隊成員之間的資料庫結構變更同步。但是,通知開發人員這些變更可能具有挑戰性。

當兩個或多個團隊成員正在處理資料庫結構描述的同一部分或應用程式的同一部分(使用結構描述的給定部分)時,這會成為一個問題。這種情況很可能產生合併衝突並導致挫敗感。

雖然這種情況最好透過改善團隊溝通來解決,但技術可以在一定程度上提供幫助。

Git hooks 可以用來在不同時間通知開發人員結構描述的變更。例如,hook 可以用來檢查已經合併並應用於上游的結構描述變更,然後才允許開發人員推送他們的變更。這有助於減輕合併衝突,並使團隊更同步。

這種行為可以使用腳本編寫並應用於您團隊的特定情境,並以 git-migration-hook 作為起點。

自動化資料同步

當資料庫結構描述變更時,整個團隊很可能需要重新植入資料庫,以便其中的資料符合新的結構描述。維護植入腳本、分發它,並讓團隊中的每個人持續應用它可能會很繁瑣。

自動化此流程的一種選項是使用提供資料庫之間雙向資料同步的服務。雖然這種服務更常被用於同步遠端生產資料庫以用於各種目的,但它也可以用於跨團隊同步開發資料。這樣做允許團隊使用他們自己的本機或遠端開發資料庫,這些資料庫會持續更新。此類服務的一個範例是 Azure 的 SQL Data Sync

結論

在團隊成員之間保持開發資料庫變更同步可能是一項具有挑戰性的任務。當團隊快速行動並在同一個結構描述上協作時,發生衝突的機會很多。

透過引入具有 Git hooks 和其他工具的工作流程來提供自動化,團隊可以更輕鬆地保持結構描述變更和資料同步。

關於作者
Ryan Chenkie

Ryan Chenkie

Ryan 是一位全端開發人員,對資料庫和 API 特別感興趣。他是 CourseLift 的創辦人,CourseLift 是一個課程託管平台,旨在幫助作者進行行銷和銷售。