轻松掌握 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
  • 数据模型总结
    1. 关系一对一、一对多,都用两张表;在被关联的模型里建立表关系。
    2. 关系多对多,需要三张表;在三方关联表里建立表关系。


## 基础表定义

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.prismaenum.prismarelation.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





文章收获

  • 如果觉得对你有所帮助,请点下“推荐”吧!
  • 如果担心文忘记章地址,请点下“收藏”吧!
  • 如果对博主文章内容喜欢,可进行“关注”博主,更好地获悉最新文章内容。
posted @ 2025-07-27 22:38  晨风不可依米  阅读(35)  评论(0)    收藏  举报