轻松掌握 prisma 数据库构建工具
文/晨风不可依米 (2025.07.24)
重要概念
常用命令
- 安装基础依赖:
pnpm install -D prisma。 - 安装客户端依赖:
pnpm install @prisma/client cuid。
特别注意:以下命令,在具体项目(标准项目、微服务项目)根目录下执行。
- 初始化
prisma资源目录:prisma init。 - 本地启动
prisma服务(不常用):prisma dev。 - 生成数据库客户端实例:
prisma generate [--schema <schema_dir>]。 - 同步
schema.prisma配置到数据库客户端实例:prisma migrate dev [--schema <schema_dir>]。 - 拉取线上数据库模型定义到本地项目:
prisma db pull [--schema <schema_dir>]。 - 推送本地
schema.prisma定义数据库模型到线上数据库:prisma db push [--schema <schema_dir>]。
数据库定义
数据库枚举定义
enum Gender {
MALE
FAMALE
UNKNOW
}
数据库模型定义
- 数据库模型定义,需要用到
cuid依赖库;需安装依赖:pnpm i cuid。 - 数据模型总结
- 关系一对一、一对多,都用两张表;在被关联的模型里建立表关系。
- 关系多对多,需要三张表;在三方关联表里建立表关系。
## 基础表定义
model User {
id String @id @default(cuid())
name String?
avatar String @default("")
mobile String @unique
password String
created_at DateTime @default(now())
updated_at DateTime @updatedAt
## 设置数据库表名,否则沿用 model 定义的 User 作为表名。
@@map('users')
## 一对一关系
identity Identity?
## 一对多关系
artcles Artcle[]
## 多对多关系
roles RolesOnUsers[]
}
## 身份表(表关联:一对一关系)
model Identity {
id String @id @default(cuid())
cid String
## 使用枚举定义
gender Gender @default(UNKNOW)
... 其它字段定义
## 设置数据库表名
@@map("identitys")
## 建立表关系:一对一关系
user User @relation(fields: [user_id], references: [id])
user_id String @unique
}
## 文章表(表关联:一对多关系)
model Artcle {
id String @id @default(cuid())
title String
... 其它字段定义
## 设置数据库表名
@@map("artcles")
## 建立表关系:一对多关系
user User @relation(fields: [user_id], references: [id])
user_id String @unique
}
## 角色表(表关联:多对多关系)
model Role {
id String @id @default(cuid())
name String
... 其它字段定义
## 设置数据库表名
@@map("roles")
## 多对多关系
users RolesOnUsers[]
}
## 用户角色表(三方关联表)
model RolesOnUsers {
user User @relation(fields: [user_id], references: [id])
user_id String
role Role @relation(fields: [role_id], references: [id])
role_id String
@@id([role_id, user_id])
@@map("user_roles")
}
场景案例
单文件模式构建数据库
- 为
prisma构建数据库的默认模式;详细开发文档可参见https://www.prisma.io/docs/orm/overview/databases。 - 简单快速构建数据库,但所有数据模型、枚举、三方表关系等定义会造成内容堆积;代码可阅读性差。
- 主要依赖于
prisma/schema.prisma配置文件来构建数据库内容。
## 在项目根目录下执行相关依赖安装命令。
pnpm i -D prisma
pnpm i @prisma/client cuid
## 初始化项目 prisma 资源内容(prisma 目录、.gitignore、.env 等文件),请执行以下命令。
prisma init
## 配置数据库的生成器、数据源等配置。
### 项目根目录下会有 .env 配置文件,找到 DATABASE_URL,依据 https://www.prisma.io/docs/orm/overview/databases 文档设置数据库连接地址(数据库连接地址格式:mysql://USER:PASSWORD@HOST:PORT/DATABASE。)。
### 找到 prisma/schame.prisma 配置文件;指定数据源配置的数据库类型(provider)、数据库连接地址(默认使用 .env 配置文件的变量)。
## 定义数据库模型和枚举(单文件模式,请在 prisma/schema.prisma 配置文件里定义)
### 请参照上文 数据库定义 自行编写。
## 生成数据库客户端实例(同步数据库定义到实例,常在 **.service.ts 文件里应用),请执行以下命令。
prisma generate
## 同步数据库定义线上数据库(线上数据库的记录表 _prisma_migrations),执行以下命令。
prisma migrate dev
## 数据库设计完毕,将数据库定义内容上传到线上数据库,执行以下命令。
prisma db push
多文件模式构建数据库
- 详细开发文档可参见
https://www.prisma.io/docs/orm/prisma-schema/overview/location#multi-file-prisma-schema。 - 将数据模型、枚举、三方表关系等分类,并写入到各自定义的文件内;文件结构清晰,代码阅读性好。
- 主要依赖于
prisma/schema文件目录构建数据库内容。在该目录下定义数据模型、枚举、三方表关系等配置文件;并在main.prisma的生成器配置必须配置previewFeatures = ["multiSchema"],即代表启用多文件模式。 - 个人建议:在
prisma/schema文件目录下,应当存在main.prisma、enum.prisma、relation.prisma,以及其它数据模型所定义的**.prisma等配置文件。 - 特别注意:以下执行命令,都需要携带参数
--schema <schema 目录>。
## 在项目根目录下执行相关依赖安装命令。
pnpm i -D prisma
pnpm i @prisma/client cuid
## 初始化项目 prisma 资源内容(prisma 目录、.gitignore、.env 等文件),请执行以下命令。
prisma init
## 调整 prisma 目录文件内容。
### 复制 .gitignore 文件里对 prisma 资源相关忽略的配置内容,到单体仓库下的 .gitignore 文件里。
### 删除 prisma 目录下的 schema.prisma、.env、.gitignore 等文件。
### 在 prisma 目录下创建 schema 目录,并在 schema 目录下创建 main.prisma、enum.prisma、relation.prisma 等文件。
### main.prisma 文件,定义数据库的生成器、数据源等配置;由于本案例采用 nestjs monorepo 架构,微服务都有专用数据库;但在 docker-compose.yml 自动化统一管理下,因此在单体仓库下的 .env 文件里配置每个数据库的连接地址(建议采用服务名_DATABASE_URL格式)。
## 配置数据库的生成器、数据源等配置,请在 prisma/schema/main.prisma 文件里设置,且必须设置数据库生成器选项 previewFeatures = ["multiSchema"],代表启用多文件模式;设置数据源配置的数据库类型(provider)、数据库连接地址(默认使用 .env 配置文件的变量)。
## 定义数据库模型和枚举(多文件模式,请在 prisma/schema 目录下定义)
### 请参照上文 数据库定义 构建数据库内容;枚举定义在 prisma/schema/enum.prisma 文件里;三方关系表定义在 prisma/schema/relation.prisma 文件里;其它模型则新建并定义 **.prisma 文件里。
## 生成数据库客户端实例(同步数据库定义到实例,常在 **.service.ts 文件里应用),请执行以下命令。
prisma generate --schema ./prisma/schema
## 同步数据库定义线上数据库(线上数据库的记录表 _prisma_migrations),执行以下命令。
prisma migrate dev --schema ./prisma/schema
## 数据库设计完毕,将数据库定义内容上传到线上数据库,执行以下命令。
prisma db push --schema ./prisma/schema
文章收获
- 如果觉得对你有所帮助,请点下“推荐”吧!
- 如果担心文忘记章地址,请点下“收藏”吧!
- 如果对博主文章内容喜欢,可进行“关注”博主,更好地获悉最新文章内容。

浙公网安备 33010602011771号