跳到主要内容

如何在团队中管理模式变更

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 之旅 我们的活跃社区。保持了解,参与其中,并与其他开发者协作

我们真诚地重视你的参与,并期待你成为我们社区的一员!

© . All rights reserved.