跳到主要內容

如何在團隊中管理模式變更

10 分鐘

簡介

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

先決條件

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

  • 已安裝 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.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. 拉取最新變更

    • 兩個新遷移
    • 更新的模式檔案
  2. 審查合併後的模式

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
  • 你的新遷移檔案

下一步

現在你已經瞭解了團隊模式管理,你可以

更多資訊


與 Prisma 保持聯絡

透過以下方式繼續你的 Prisma 之旅 我們的活躍社群。保持瞭解,參與其中,並與其他開發者協作

我們真誠地重視你的參與,並期待你成為我們社群的一員!

© . This site is unofficial and not affiliated with Prisma Data, Inc.