news 2026/9/10 1:28:00

3分钟画出能给业务讲明白的ER图:Mermaid erDiagram实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3分钟画出能给业务讲明白的ER图:Mermaid erDiagram实战指南

3分钟画出能给业务讲明白的ER图:Mermaid erDiagram实战指南

【免费下载链接】mermaidGeneration of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown项目地址: https://gitcode.com/GitHub_Trending/me/mermaid

Mermaid 的 erDiagram 语法用几行纯文本就能画出实体关系图(ER 图),不用打开重型画图工具。本文从一条关系线讲起,覆盖属性、基数标记、子图分组这几个常用技巧,让你在文档里直接描述数据模型。

3分钟画出第一条关系线

场景:新来的同事问数据库怎么设计的。打开 UML 工具要十分钟,在 Markdown 文档里敲三行只要十秒。

渲染后会得到 CUSTOMER 和 ORDER 两个实体框,中间由一条带鸦脚符号的连线连起来,线上标着 "places"。

每条关系语句由四部分组成:前实体、关系标记、后实体、冒号后的标签。注意标签是从前实体视角读的——"客户下单",而不是"订单下客户"。

上面效果是一个经典订单模型:除了关系线,每个实体还标注了属性,CUSTOMER、ORDER、INVOICE 之间的关联全部落在同一张图里。

给实体框标上属性和主键

关系线只说明"怎么连",属性才说明"框里装了什么"。在实体名后跟一段{}代码块,每行写类型 名称

解析后 CUSTOMER 框下方自动展开属性区,每行显示"类型 + 名称",custNumber 旁带一个主键符号。

键约束有三种:PK主键、FK外键、UK唯一键,用逗号分隔可叠加(如PK, FK)。行尾双引号是注释,类型后加?表示可空字段:

类型没有内置清单,以字母开头即可,所以decimal(10,2)这类自定义写法也完全合法。

用基数标记说清"多少条"

关系标记实际分三段:左端基数 + 连接类型 + 右端基数。每端两个字符,外字符是最大值、内字符是最小值,四种组合覆盖绝大多数业务场景:

标记含义场景示例
\|o/o\|零或一订单对应零或一张发票
\|\|恰好一订单行必属于唯一订单
}o/o{零或多客户可有零个收货地址
}\|/\|{一或多订单至少含一行明细

上图是典型的鸦脚效果:Galaxy 到 Star、Quasar、Nebula 的连线末端带鸦脚,表示"零或多个"。

连接类型还分两态:实线--是识别关系,子实体离开父实体无法独立存在;虚线..是非识别关系:

渲染后 CAR 那条是实线(车辆登记记录离开车就没意义),PERSON 那条是虚线(人有没有驾驶记录都独立存在)。这正是官方文档里的"驾照记录"建模例子。

用子图把大图分模块

实体一多,全铺在一层就像一盘意大利面。v11.17.0 起 erDiagram 支持子图,把实体按业务域圈起来,还可以嵌套:

渲染后每个子图被带标题的边框圈住,两个模块不再互相穿插。整图太高时,可以在开头加direction LR改成横向布局,子图内部还能单独声明方向。

一个小细节:关系里引用子图用的是 id 而不是标题;id 含空格时必须加双引号,否则解析报错。

出错了怎么办

⚠️ 几个高频踩坑点:

  • 实体名带空格或特殊字符要整体加双引号,如"客户账户";中文实体名则可以直接写。
  • 两个实体之间可以同时有多条关系线(比如一条记账单、一条记发货),各写一行即可,互不覆盖。
  • 大图标得拥挤:在 frontmatter 里加layout: elk切换 ELK 布局,交叉会明显减少,需要 v9.4 以上版本。
  • 拿不准语法时最稳的办法是打开 Mermaid 在线编辑器,左边写右边看,所见即所得。

💡 从一条关系线到子图分组,erDiagram 让数据模型变成可评审、可 diff、能直接提交进仓库的 Markdown 文本块。更多语法细节见 docs/syntax/entityRelationshipDiagram.md,解析与渲染实现在 packages/mermaid/src/diagrams/er/,想深挖行为可以直接对照源码。

【免费下载链接】mermaidGeneration of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown项目地址: https://gitcode.com/GitHub_Trending/me/mermaid

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 1:27:42

C++高精度减法:从原理到实现,彻底解决大整数相减

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 1:27:01

AI编程时代,程序员如何从编码者进化为价值定义者?

这两年,每隔一段时间就会有人把“AI编程会不会替代程序员”这个话题顶上热门。我也被问过很多次,问的人里有刚入行的新人、工作五六年的老同事,还有准备让孩子学编程的家长。说实话,我对“会不会被替代”这件事的焦虑已经过去了&a…

作者头像 李华
网站建设 2026/9/10 1:26:59

xhEditor集成PDF导入:高亮与注释还原完整方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 1:26:50

AI论文工具实测:7款软件全流程跑分与写作闭环选型指南

1. 毕业季实测:为什么我把市面上叫得上号的 AI 论文工具全跑了一遍 上个月学弟来找我时,我正在帮另一位朋友改硕士论文的致谢段落,改到第三版还是被答辩秘书挑毛病。他苦笑着说,现在连致谢这种固定套路的文字都写不顺,…

作者头像 李华
网站建设 2026/9/10 1:26:43

libcurl 自定义 DNS 服务器:CURLOPT_DNS_SERVERS 完整指南

libcurl 自定义 DNS 服务器:CURLOPT_DNS_SERVERS 完整指南 【免费下载链接】curl A command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, MQ…

作者头像 李华