在事务所里,model 就像一类档案模板。
例如:
User是居民档案Post是文章档案Order是订单档案AuditLog是操作流水档案
#1. model 是什么
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}这表示:
User是一个模型id是主键email必须唯一name可为空
#2. relation 是什么
relation 就像档案馆里的“转介关系”或“挂靠关系”。
一个用户可以有很多文章:
model User {
id Int @id @default(autoincrement())
email String @unique
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
authorId Int
author User @relation(fields: [authorId], references: [id])
}它的关系图可以这样记:
User 1 ─────────── N Post
User.posts = 从用户视角看“他有哪些文章”
Post.author = 从文章视角看“作者是谁”
Post.authorId = 真正落在库里的外键字段#一个很容易忽略的点
User.posts 这种 relation field,很多时候不是数据库里真实存在的一列。
它是 Prisma 在“数据翻译层”给你的关系表达能力。
所以不要把下面两件事混为一谈:
关系字段 posts != 数据库里有一列叫 posts
外键字段 authorId = 数据库里真实存在的连接点#关系的本质
你可以把 relation 想成:
model是档案模板relation是档案之间的官方挂接规则- Prisma Client 则能顺着这些规则做关联读取和嵌套写入