Prisma 中文文档 下载 App

Schema 结构详解:datasource、generator、model、enum

Schema 文件本质

schema.prisma 是一份用 Prisma Schema Language(PSL) 写的声明式配置文件。整个文件由三种顶层声明组成:

声明作用一个 Schema 里可以有几个
datasource指定连接哪个数据库最多 1 个
generator指定要生成什么客户端可以多个
model / enum定义数据模型可以多个

文件位置查找顺序

当你执行 prisma generate、prisma migrate dev 或 prisma studio 等命令时,Prisma CLI 会按以下顺序定位 Schema 文件:

  1. 命令行 --schema 参数指定的路径
  2. package.json 里 prisma.schema 字段配置的路径(v2.7+ 支持)
  3. 项目根目录下的 prisma/schema.prisma
  4. 项目根目录下的 schema.prisma

推荐把 Schema 放在默认的 prisma/schema.prisma,这样你不需要额外配置。

datasource

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
  // directUrl = env("DIRECT_URL")  // 生产环境可指定一个直接连接串
}

generator

generator client {
  provider = "prisma-client-js"
  // binaryTargets = ["native", "debian-openssl-1.1.x"]  // 多平台编译
  // output = "../custom-output-path"  // 自定义生成位置
}

一个 Schema 里可以有多个 generator,比如同时生成 JS Client 和 REST API generator。

model 与 enum

这两个是数据定义的主体,放在 datasource 和 generator 之后:

enum Role {
  USER
  ADMIN
  MODERATOR
}

model User {
  id    Int  @id @default(autoincrement())
  role  Role @default(USER)
}

环境变量

Schema 里可以用 env("VAR_NAME") 读取 .env 文件里的环境变量。推荐做法:

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

.env 文件:

DATABASE_URL="postgresql://postgres:password@localhost:5432/mydb"

Prisma CLI 在执行命令时,会自动从 Schema 文件所在目录开始往上查找 .env 文件并加载。

注释

Schema 支持两种注释:

/// 这是文档注释,会附加到下一个 AST 节点上
model User {
  /// 用户唯一 ID
  id   Int  @id
  // 普通注释,仅供阅读,不进入 AST
  email String
}

自动格式化

Prisma 提供了内置的格式化工具,没有配置选项,规则类似 Go 的 gofmt:

npx prisma format

VS Code 扩展也支持保存时自动格式化。格式化规则是固定的:

下一步

配置块看完了,接下来重点在 model 的字段定义和属性上——参见 字段类型与属性。