跳到主要內容

如何在團隊中管理 Schema 變更

10 分鐘

簡介

在團隊中工作時,管理資料庫 Schema 變更可能具有挑戰性。本指南將向您展示如何有效地協作處理 Schema 變更,使用 Prisma Migrate 確保所有團隊成員都可以安全地貢獻和整合 Schema 變更。

先決條件

開始本指南之前,請確保您已具備

  • 已安裝 Node.js (版本 18 或更高版本)
  • 已設定包含遷移的 Prisma 專案
  • 關聯式資料庫 (PostgreSQL、MySQL、SQLite、SQL Server 等)
  • Git 的基本理解
  • 對 Prisma Migrate 的基本熟悉
警告

本指南不適用於 MongoDB
對於 MongoDB,使用 db push 而不是 migrate dev

1. 了解遷移基礎知識

1.1. 遷移順序

遷移是按照它們建立的順序套用。建立日期是遷移子資料夾名稱的一部分 - 例如,20210316081837-updated-fields 是在 2021-03-16-08:18:37 建立的。

1.2. 原始碼控制需求

您應該將以下檔案提交到原始碼控制

  • .prisma/migrations 資料夾的內容,包括 migration_lock.toml 檔案
  • Prisma Schema (schema.prisma)

僅原始碼控制 schema.prisma 檔案是不夠的 - 您必須包含您的遷移歷史記錄,因為

  • 自訂遷移包含無法在 Prisma schema 中表示的資訊
  • prisma migrate deploy 命令僅執行遷移檔案

2. 整合團隊變更

2.1. 拉取最新變更

要整合來自協作者的變更

  1. 拉取已變更的 Prisma schema 和 ./prisma/migrations 資料夾
  2. 執行遷移命令
npx prisma migrate dev

2.2. 範例情境

讓我們逐步了解三個開發人員共享 schema 變更的範例情境

schema.prisma
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}

model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}

3. 處理並行變更

3.1. 開發人員 A 的變更

Ania 新增一個欄位

model User {
/* ... */
favoriteColor String?
}

並產生一個遷移

npx prisma migrate dev --name new-field

3.2. 開發人員 B 的變更

Javier 新增一個模型

model Tag {
tagName String @id
tagCategory Category
}

並產生一個遷移

npx prisma migrate dev --name new-model

3.3. 合併變更

遷移歷史記錄現在有兩個新的遷移

A diagram showing changes by two separate developers converging in a single migration history.

4. 整合您的變更

4.1. 拉取團隊變更

  1. 拉取最新的變更

    • 兩個新的遷移
    • 已更新的 schema 檔案
  2. 檢閱已合併的 schema

model User {
/* ... */
favoriteColor String?
bestPacmanScore Int?
}

model Tag {
tagName String @id
tagCategory Category
posts Post[]
}

4.2. 產生您的遷移

執行遷移命令

npx prisma migrate dev

這將會

  1. 套用您團隊的遷移
  2. 為您的變更建立新的遷移
  3. 套用您的新遷移

4.3. 提交變更

提交

  • 已合併的 schema.prisma
  • 您的新遷移檔案

下一步

現在您已了解團隊 schema 管理,您可以

如需更多資訊和更新