AI ER 图生成器

描述表和它们之间的关系,拿一张带主键外键的 ER 图。

点一个试试 —— 会直接带进生成器

适用场景 AI ER 图生成器

用对话模式画 ERD —— 从一句含糊的话开始

一句话描述 schema,基数只能靠模型猜:一对多还是多对多,要不要中间表,外键能不能为空。对话模式只就那个会改变整张表结构的基数问一句,剩下的直接画,画完再把猜的地方一条条列出来给你划掉。下面是一套招聘系统的表结构,起点是一句故意含糊的话。

画一下我们招聘系统的数据库。
反问
application 是候选人和岗位之间单独的一张表,还是一个候选人只对应一个岗位?
单独一张表 —— 一个人可以投多个岗位,同一个岗位过一阵还能再投一次
一个人只对一个岗位,job_id 直接放在候选人表上
一个人一辈子只有一份申请
第一版草稿。APPLICATION 之所以是中间表,是因为你说了同一个岗位还能再投。其余的部门、面试小组、时间戳都是它自己推的,不再逐条来问,而是画完列在下面。
第一版草稿。APPLICATION 之所以是中间表,是因为你说了同一个岗位还能再投。其余的部门、面试小组、时间戳都是它自己推的,不再逐条来问,而是画完列在下面。
有几处你没提,我先按常见做法补上了
  • 加了一张 DEPARTMENT 表,并在 JOB 上挂了 department_id
  • 按面试小组来处理:一场面试几个面试官各写各的评价,于是有了 INTERVIEW_PANELIST
  • 给 APPLICATION 加了 stage 字段(screening / onsite / offer / rejected)
  • 给 CANDIDATE、JOB、APPLICATION 都加了 created_at
  • 主键统一用 bigint,外键类型跟着对齐
就这样删掉勾中的 1 项
已删掉 DEPARTMENT,JOB 上的 department_id 也一并去掉了。
一份申请可能开出不止一个 offer,我们会还价,所以加一张 OFFER 表,带 version、base_salary、start_date、status。别给它加 created_at,后面新建的表也都别加了,时间戳我们统一读事件日志。
最终版。OFFER 挂在 APPLICATION 下面是一对多,你说的那句「别加 created_at」对后面每一张新表都还算数。
最终版。OFFER 挂在 APPLICATION 下面是一对多,你说的那句「别加 created_at」对后面每一张新表都还算数。

四句话画出了两张中间表、一张可以重复投递的申请表和一张带版本的 offer 表 —— 「画一下我们招聘系统的数据库」这句话里一个都没有。同样一句话直接一次性生成,大概率给你一个 candidate.job_id、一场面试一个面试官,外加每张表都挂着的 created_at,还得你自己一条条删。

用这段对话开始 →打开对话模式,上面那句话已经替你填好了。

详细说明

ER 图用来讲清楚数据存成什么样,而不用直接甩一段建表语句给对方看。它把每张表画成一个框,列出字段和类型,标出主键外键,最关键的是把表之间是一对一、一对多还是多对多标清楚。

三个时候用得上:写第一个 migration 之前先把结构画出来给大家评审;新人接手已有项目的时候;技术方案里要解释数据模型为什么长这样的时候。要拆表或者合表的时候也好用 —— 可以直接在图上标出哪些字段搬到哪。

Mermaid 的 erDiagram 用的是鸦爪符号,支持字段类型、主键外键标记和关系上的说明文字,画设计文档够用了。它不画索引、不画键之外的约束,也不管物理存储 —— 这些要看 dbdiagram.io 或者 ORM 自带的可视化。但大部分时候你只是想说清楚「数据长什么样」,一张跟 migration 放在一起的纯文本 ER 图正好。

自己试一下?

常见问题

不知道怎么描述?

对话模式里 AI 会先问你两三个问题 —— 谁参与、发生什么、异常分支怎么走 —— 弄清楚了再动笔。

试试对话模式

想画得更规范?

教程里讲了常用符号、几种基本结构、九条画法规范,还有可以直接拿去用的 prompt 模板和真实业务例子。

看教程

相关工具