免费工具
Prisma schema 转 ER 图
粘贴 schema.prisma 文件,或拖入多文件模式的全部文件,即可得到 ER 图:每个模型一张卡片,列出标量字段和键;每个关系一条连线,隐式多对多关系也包括在内。试用无需账号。
示例输出
使用方法
粘贴或拖入 Prisma 模式
可以是一个 schema.prisma 文件,也可以把 prisma/schema 文件夹中的所有 .prisma 文件一起拖入。datasource 和 generator 块可以保留,只读取其中的 provider。
查看模型和关系
每个模型会变成一张卡片,列出标量字段及其 Prisma 类型。每个带 fields 和 references 的关系会变成一条连线,从外键字段指向它引用的字段。
在 Archboard 中打开
保存为新图表后,可以重新排列、添加注释、分享链接,或导出为 SVG 和 PNG。注册只需 Google 或 GitHub 账号。
会从 Prisma 模式中绘制哪些内容
图表根据 schema.prisma 中的以下部分生成:
model每个模型都会成为一张以模型名命名的卡片,每个标量字段一行,类型按 Prisma 的写法显示,例如 String? 或 Int[]。枚举字段和复合类型字段也会列出。
@relationfieldsreferences带 fields 和 references 的关系,会用鸦脚记法的端点从外键字段画到被引用字段。外键唯一时关系为一对一,关系字段可选时另一端也为可选。复合外键同样支持。
Category[]Product[]两个模型互相以列表引用的隐式多对多关系,例如 Category[] 和 Product[]。它们会画成一条两端都是“多”的连线,不画 Prisma 在后台创建的连接表。
@id@@id来自字段上的 id 属性,或跨多个字段的块级 id 的主键,会在每个相关字段上标为 PK。
@unique@@unique唯一字段,标为 UK。跨多个字段的块级唯一约束不会在每个字段上标记,但外键恰好由这些字段组成的关系会画成一对一。
@@schema在多模式项目中分配到数据库模式的模型,会画在每个模式各自的框中。
typeMongoDB 模式中用 type 声明的复合类型,会显示为嵌入它的字段的类型,而不是单独的卡片。
Prisma 图表不包含的内容
- 像 posts Post[] 或 author User 这样的关系字段。它们只存在于 Prisma 层面,并不存在于数据库中,因此画成连线而不是卡片中的行;每张卡片只列出数据库中存储的字段。
- 指向未提供文件中模型的关系。模式拆分在多个文件中时,请把它们一起拖入;找不到的模型不会被绘制,而是在警告中提示。
- 用 view 块声明的视图(会被跳过并计数),以及标有 ignore 属性的模型或字段。
- autoincrement()、now() 或 dbgenerated 表达式等默认值,VarChar(255) 这类数据库原生类型,文档注释,以及 datasource 的 URL。
Prisma 模式常见问题
我的模式拆分在多个文件中,怎样生成图表?
拖入整个 prisma/schema 文件夹,或一次选中其中所有 .prisma 文件。它们会作为同一个模式读取,因此不同文件中模型之间的关系也会画出。只拖入一个文件也可以,这时指向其他文件中模型的关系会作为警告列出。
支持 MongoDB 模式吗?
支持。provider 为 mongodb 时,复合类型显示为字段类型,ObjectId 外键会成为关系连线;在两个模型中都以 ID 列表保存的多对多关系,会画成一条不带 FK 标记的连线。
图表使用模型名还是表名?
使用模型名,也就是你在 Prisma Client 中使用的名称。用 map 属性设置的表名和列名不会显示,因此映射到 customers 表的 Customer 模型显示为 Customer。
隐式多对多关系如何显示?
显示为两个模型之间一条两端都是“多”的连线。Prisma 把这类关系保存在 _CategoryToProduct 这样的后台连接表中,这张表不会被画出。你自己建模的关系表会显示为带两个关系的普通卡片。
在 Archboard 中打开图表时会保存什么?
预览不会被保存。选择“在 Archboard 中打开”后,绘制出的图表,包括模型卡片、字段名和类型以及关系连线,会作为新图表保存到你的工作区中。之后对 schema.prisma 的修改不会更新它。
Prisma ER 图工具免费吗?
是的。粘贴模式和查看图表无需账号。在 Archboard 中打开图表需要一个免费账号。