分享至

簡介

如果一個專案有多個開發人員協同工作,跟上開發資料庫的變更可能是一個挑戰。在整個開發團隊中同步這些變更可能既繁瑣又耗時。當不同的團隊成員在資料庫模式上工作,或者使用的開發資料庫資料未能反映最新狀態時,可能會導致挫敗感,並引發可能最終進入生產環境的錯誤。

特別是,這些問題可能在以下場景中出現

  • 開發人員正在處理資料庫模式的不同迭代版本
  • 開發資料庫中的資料未能反映模式的當前狀態

在本指南中,我們將探討團隊如何在不同團隊之間保持資料庫模式和開發資料最新並同步。

入職時設定開發資料庫

在資料庫模式和開發資料變更可以在團隊成員之間共享之前,這些團隊成員需要透過一些初始資料庫狀態進行引導。對於大多數團隊來說,這是他們開始專案時的入職過程的一部分。這個過程的複雜程度很大程度上取決於組織的大小、成熟度和其需求。

大多數新入職開發人員的起點是本地克隆並安裝專案。接下來,他們通常需要連線到一個開發資料庫。新開發人員設定開發資料庫最常見的兩種方式是:

  1. 執行指令碼以填充本地開發資料庫
  2. 連線到共享的遠端開發資料庫

這兩種方法都有各自的優點和缺點。

填充本地資料庫

填充本地資料庫是有益的,因為它消除了執行遠端開發資料庫的需要。開發人員在開始時可以對進入其開發資料庫的資料擁有更多控制權。與使用共享遠端資料庫相比,他們也可以更輕鬆地重置資料庫。

如果採用這種方法,則需要額外努力使填充資料和邏輯與當前模式保持同步。如果變更頻繁發生,這可能會帶來挑戰,並可能導致開發人員無法順利入職的問題。

連線到共享遠端資料庫

讓開發人員連線到共享的遠端開發資料庫可以減輕在本地填充新開發人員資料庫的負擔。這很有幫助,因為它使初始入職更容易,讓開發人員更快地投入生產。使用共享遠端資料庫也可能是有益的,因為資料庫的變更可以由單個開發人員定期遷移,然後所有團隊成員都可以使用這些變更。

使用共享遠端開發資料庫的缺點是它需要執行額外的資源,可能產生額外的成本。此外,如果所有開發人員都在同一資料庫上工作,資料很容易被覆蓋。另一個潛在問題是,如果團隊成員非同步採用模式變更,帶外變更可能會對資料狀態產生負面影響,使其難以處理。

持續的資料庫更新

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

沒有一種適用於所有情況的方法來讓團隊成員及時瞭解模式變更。適合您團隊的方法取決於具體情況。

以下列表包含了一些可以組合起來構建您的整體策略的方法,以在團隊之間保持資料和模式變更同步。

使用遷移

在團隊環境中處理關係型資料庫時,將遷移作為資料庫模式變更策略的起點至關重要。

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

ALTER TABLE User ADD bio varchar(255);

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

具體的資料庫遷移策略在不同的語言和框架之間有所不同。然而,總的來說,它們遵循相似的模式:

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

通知團隊成員變更

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

當兩個或更多團隊成員在資料庫模式的相同部分或應用程式中消耗給定模式部分的某個部分時,這就會成為一個問題。這種情況很可能產生合併衝突並導致挫敗感。

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

Git 鉤子可用於在不同時間點通知開發人員模式變更。例如,鉤子可以在允許開發人員推送其變更之前,檢查是否已在上游合併和應用了模式變更。這有助於緩解合併衝突,並使團隊更加同步。

可以使用 git-migration-hook 作為起點,編寫指令碼並將此行為應用於您團隊的特定場景。

自動化資料同步

當資料庫模式發生變更時,整個團隊可能需要重新填充資料庫,以使其中的資料符合新模式。維護填充指令碼、分發它並讓團隊中的每個人持續應用它可能很繁瑣。

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

總結

保持開發資料庫變更在團隊成員之間同步可能是一項具有挑戰性的任務。當團隊快速迭代並在相同的模式上協作時,衝突的機會比比皆是。

透過引入使用 Git 鉤子和其他工具的工作流來提供自動化,團隊可以更輕鬆地保持模式變更和資料同步。

關於作者
Ryan Chenkie

Ryan Chenkie

Ryan 是一名全棧開發人員,對資料庫和 API 特別感興趣。他是 CourseLift 的創始人,這是一個幫助作者進行營銷和銷售的課程託管平臺。
© . This site is unofficial and not affiliated with Prisma Data, Inc.