ER 图生成器 — 用文本绘制实体关系图
用文本写出数据库结构,实时渲染实体关系图——可导出 PDF 或 SVG。
一切都在你的浏览器中运行——你的图表从不上传。滚动可缩放,拖动可平移。导出 PDF 会打开打印对话框:请选择“另存为 PDF”。
发现问题,或者觉得哪里可以更好?每条消息我们都会阅读,并尽快修复。
这款免费的 ER 图生成器会在你输入时把文本渲染成实体关系图。在左侧定义表及其字段,用标准的基数表示法(一对多、多对多)把它们连起来,右侧的图表就会实时更新——然后导出为 PDF 用于文档,或导出为 SVG 用于演示文稿和 Wiki。
对于真正的数据库工作,基于文本的绘图胜过拖拽:你的数据库结构可以纳入版本管理(和迁移文件一起放进 git),可以在 Pull Request 中审查,修改只需几秒钟,而不必花几分钟挪动方框。语法采用标准的 Mermaid erDiagram 表示法,所以在这里画的图在 GitHub、GitLab 和 Notion 中也能渲染。
使用方法
- 打开工具栏中的“指南”查看两分钟就能看完的语法参考,或者加载一个内置的示例数据库结构。
- 把每个实体定义为一个代码块:先写实体名,再每行写一个属性及其类型。主键标为 PK,外键标为 FK。
- 用基数箭头连接实体——CUSTOMER ||--o{ ORDER : places 读作“一个客户下零个或多个订单”。
- 滚动缩放,拖动平移,点击“适应”重新居中。用“下载 PDF”(会打开打印对话框——选择“另存为 PDF”)或“下载 SVG”导出。
常见问题
什么是 ER 图?
实体关系图是设计和记录数据库的标准方式:用方框表示实体(你要存储的事物——客户、订单、商品),方框内是属性(字段),连线上的基数标记表示实体之间的关系(一对一、一对多、多对多)。团队用它在编写迁移之前就数据库结构达成一致,也用它记录现有的数据库。
这个工具使用什么语法?
标准的 Mermaid erDiagram 语法——一种开放且被广泛支持的文本表示法。在这里写的图表在 GitHub README、GitLab、Notion、Obsidian 以及其他支持 Mermaid 的地方都能一模一样地渲染,所以你的源文本始终可以随处使用。
如何表示多对多关系?
在实体之间使用 }o--o{(两侧都是零个或多个),或者用关联表显式建模——例如 POST ||--o{ POST_TAG 和 TAG ||--o{ POST_TAG——这更接近你在 SQL 中的实际实现方式。内置的博客示例展示了关联表的写法。
我的数据库结构会被上传吗?
不会。渲染完全在你的浏览器中进行——文本从不离开你的设备,这在绘制生产数据库结构时尤为重要。
如何保存我的工作?
图表的源代码就是纯文本——把它复制到文件、工单或代码仓库中,随时粘贴回来就能继续编辑。完成后的图表可以导出为 PDF(用于文档)或 SVG(可无限缩放,能干净地嵌入演示文稿和 Wiki)。
基数表示法速查
• || — 恰好一个(必须存在的单条记录)
• o| — 零个或一个(可选的单条记录)
• |{ — 一个或多个(必须存在的多条记录)
• o{ — 零个或多个(可选的多条记录)
两侧各取一个符号组合起来:CUSTOMER ||--o{ ORDER 表示每个订单恰好属于一个客户,而一个客户可以有任意数量的订单——这是业务数据库中最常见的关系。对于非标识关系,用虚线(..)代替实线(--)。
为什么要在写代码之前设计数据库结构
大多数代价高昂的数据库问题——孤立记录、重复数据、谁也连接不上的表——都源于没有规划、随意生长的数据库结构。花十分钟画 ER 图,就能尽早逼你回答那些关键问题:什么能唯一标识这个实体?这个关系真的能是一对多吗,还是等到第一个客户有两个地址时就会变成多对多?删除时会发生什么?
它也是技术人员和非技术干系人之间最快捷的共同语言:业务负责人能从图上读出“一个客户下多个订单”并纠正你——赶在错误的假设被写进六个月的代码之前。一张共享的图表能帮助团队在实现之前就数据库结构达成一致。