如何在团队中管理 Schema 变更
10 分钟
介绍
在团队协作中,管理数据库 Schema 变更可能具有挑战性。本指南将向您展示如何使用 Prisma Migrate 有效地协作进行 Schema 变更,确保所有团队成员都能安全地贡献和合并 Schema 变更。
先决条件
在开始本指南之前,请确保您已具备以下条件:
- 已安装 Node.js(版本 18 或更高版本)
- 已设置迁移的 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 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 上参与 加星收藏存储库、报告问题或为问题做出贡献。