⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议
Skip to content

4.4.2 Schema 文件结构:generator/datasource/model

一句话破题

schema.prisma 是 Prisma 的核心配置文件——它定义了数据库连接、代码生成器和数据模型。

Schema 文件三大块

prisma
// 1. 生成器配置(Generator)
generator client {
  provider = "prisma-client-js"
}

// 2. 数据源配置(Datasource)
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

// 3. 数据模型(Model)
model User {
  id    String @id @default(cuid())
  email String @unique
  name  String?
  posts Post[]
}

Generator:生成器配置

prisma
generator client {
  provider        = "prisma-client-js"  // 生成 JS/TS 客户端
  previewFeatures = ["fullTextSearch"]   // 启用预览功能
}
选项说明
provider生成器类型,通常是 prisma-client-js
previewFeatures启用实验性功能
output输出路径(通常不需要修改)

Datasource:数据源配置

prisma
datasource db {
  provider = "postgresql"        // 数据库类型
  url      = env("DATABASE_URL") // 从环境变量读取连接字符串
}

支持的数据库

provider数据库
postgresqlPostgreSQL
mysqlMySQL
sqliteSQLite
sqlserverSQL Server
mongodbMongoDB

Model:数据模型

prisma
model User {
  // 字段定义
  id        String   @id @default(cuid())
  email     String   @unique
  name      String?
  role      Role     @default(USER)
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  
  // 关系定义
  posts     Post[]
  profile   Profile?
}

// 枚举
enum Role {
  USER
  ADMIN
}

常用字段修饰符

修饰符作用示例
@id主键id String @id
@unique唯一约束email String @unique
@default()默认值@default(now())
@updatedAt自动更新时间updatedAt DateTime @updatedAt
@relation定义关系@relation(fields: [userId], references: [id])
@map映射数据库字段名@map("user_id")
@@index创建索引@@index([email])
@@unique复合唯一约束@@unique([userId, teamId])

字段类型速查

Prisma 类型TypeScript 类型说明
Stringstring字符串
Intnumber整数
Floatnumber浮点数
Booleanboolean布尔值
DateTimeDate日期时间
JsonJsonValueJSON 数据
DecimalDecimal精确小数

可选字段:类型后加 ?

prisma
name String?  // 可以为 null

数组字段:类型后加 []

prisma
tags String[]  // 字符串数组

本节小结

  • schema.prisma 包含三部分:generator、datasource、model
  • generator 配置代码生成,datasource 配置数据库连接
  • model 定义数据结构和关系
  • 使用修饰符(@id, @unique 等)定义约束