如何在團隊中管理 Schema 變更
10 分鐘
簡介
在團隊中工作時,管理資料庫 Schema 的變更可能會充滿挑戰。本指南將展示如何使用 Prisma Migrate 有效地協作處理 Schema 變更,確保所有團隊成員都能安全地貢獻並整合這些變更。
先決條件
在開始本指南之前,請確保您擁有:
- 已安裝 Node.js(版本 18 或更高)
- 已設置遷移(migrations)的 Prisma 專案
- 關聯式資料庫(PostgreSQL, MySQL, SQLite, SQL Server 等)
- 對 Git 的基本了解
- 對 Prisma Migrate 的基本熟悉程度
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指令只會執行遷移檔案
1.3. 設定 Prisma
在專案根目錄建立一個包含以下內容的 prisma.config.ts 檔案:
prisma.config.ts
import 'dotenv/config'
import { defineConfig, env } from 'prisma/config';
export default defineConfig({
schema: 'prisma/schema.prisma',
migrations: {
path: 'prisma/migrations',
},
datasource: {
url: env('DATABASE_URL'),
},
});
注意
您需要安裝 dotenv 套件來載入環境變數。如果您尚未安裝,請使用您的套件管理員安裝:
npm install dotenv
2. 整合團隊變更
2.1. 拉取最新變更
要整合協作者的變更:
- 拉取變更後的 Prisma schema 與
./prisma/migrations資料夾 - 執行遷移指令
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[]
}
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?
favoriteColor String? // Added by Ania
bestPacmanScore Int? // Added by you
posts Post[]
}
// Added by Javier
model Tag {
tagName String @id
tagCategory Category
}
3. 處理並發變更
3.1. 開發者 A 的變更
Ania 新增了一個欄位
model User {
/* ... */
favoriteColor String?
}
並產生了一次遷移
npx prisma migrate dev --name new-field
npx prisma generate
3.2. 開發者 B 的變更
Javier 新增了一個模型(model)
model Tag {
tagName String @id
tagCategory Category
}
並產生了一次遷移
npx prisma migrate dev --name new-model
npx prisma generate
3.3. 合併變更
現在遷移歷史紀錄中有兩次新的遷移

4. 整合您的變更
4.1. 拉取團隊變更
-
拉取最新的變更
- 兩次新的遷移
- 更新過的 schema 檔案
-
審閱合併後的 schema
model User {
/* ... */
favoriteColor String?
bestPacmanScore Int?
}
model Tag {
tagName String @id
tagCategory Category
posts Post[]
}
4.2. 產生您的遷移
執行遷移指令
npx prisma migrate dev
npx prisma generate
這將會:
- 套用您團隊的遷移
- 為您的變更建立一個新的遷移
- 套用您的新遷移
4.3. 提交變更
提交:
- 合併後的
schema.prisma - 您新的遷移檔案
後續步驟
現在您已了解團隊 Schema 管理,您可以:
更多資訊
與 Prisma 保持聯繫
透過以下方式與我們聯繫,繼續您的 Prisma 旅程: 我們的活躍社群。保持資訊靈通、參與其中,並與其他開發者合作
- 在 X 上關注我們 以獲取公告、現場活動和實用技巧。
- 加入我們的 Discord 提出問題、與社群對話,並透過對話獲得積極支援。
- 在 YouTube 上訂閱 查看教學、演示和直播。
- 在 GitHub 上交流 透過為存放庫加星標、報告問題或為 issue 做出貢獻。