PlantUML ER 图实战:从数据库设计到实体关系图
ER 图(Entity Relationship Diagram,实体关系图)是数据库设计最重要的工具。用 PlantUML 画 ER 图,可以直接从数据库 schema 出图,也可以手画结构后交给团队 review。
ER 图是什么
ER 图描述实体(表)、属性(字段)、关系(外键约束)三者之间的关系。数据库设计初期用来理清概念,数据架构评审时用来对齐理解,重构时用来追踪影响。
常见场景:
- 新项目启动:设计数据库 schema
- 评审时:展示表结构和外键关系
- 重构前:搞清楚表之间的依赖
- 文档:给新成员看数据库全貌
一、最小例子
1 | @startuml |
解释:
entity "显示名" as 别名声明一个实体{ -- }里面写字段,+前缀表示主键||--o{是关系基数符号(见下节)
二、关系基数(Cardinality)
ER 图的核心是关系基数——表示两个实体之间”一个 A 对应多少个 B”:
| 符号 | 含义 | PlantUML 写法 |
|---|---|---|
| ` | ` | |
o{ |
零或多个(zero or more) | o{ |
| `} | ` | 一个或多个(one or more) |
| `o | ` | 零或一个(zero or one) |
组合起来:
1 | @startuml |
User ||--o{ Post:一个 User 写零或多篇 Post(用户可以不写)Post ||--o{ Comment:一篇 Post 有零或多条 Comment
三、实体声明语法
3.1 基本字段声明
1 | entity "表名" as 别名 { |
3.2 主键和外键
1 | @startuml |
.. 表示弱关系(dashed line),-- 表示强关系(solid line)。
3.3 完整的订单系统 ER
1 | @startuml |
hide circle 隐藏关系端点的圆点,skinparam linetype ortho 让线条垂直/水平走,更像标准 ER 图。
四、ER 图 vs 类图:什么时候用哪个
| 场景 | 用 ER 图 | 用类图 |
|---|---|---|
| 数据库 schema 设计 | ✅ | ❌ |
| 描述数据库表关系 | ✅ | ❌ |
| ORM 实体建模 | ✅ | ✅ |
| 业务概念建模 | ❌ | ✅ |
| 服务间接口和数据结构 | ❌ | ✅ |
| 方法和行为 | ❌ | ✅ |
简单说:涉及数据库(表、字段、外键)→ ER 图;涉及代码结构(类、方法、接口)→ 类图。
五、实战:从数据库 Schema 直接出图
用 pg_dump 或 mysqldump 导出 schema,再用脚本转换成 PlantUML:
1 | # PostgreSQL 导出 schema |
推荐工具链:
- dbdiagram.io → 可以导出 PlantUML
- SchemaSpy → 从数据库反向生成 ER 图
- PlantUML Generator(dbuml)
六、样式美化
6.1 隐藏字段(只显示表名和关系)
1 | @startuml |
6.2 颜色编码
1 | @startuml |
6.3 垂直关系线
1 | @startuml |
七、常见报错
| 报错 | 原因 | 修复 |
|---|---|---|
Entity not found |
引用了未声明的实体别名 | 检查 entity "X" as Y 的别名拼写 |
Duplicate identifier |
同一实体声明了两次 | 合并或删除重复声明 |
| 关系箭头乱跑 | 默认 layout 问题 | 加 skinparam linetype ortho 或手动调位置 |
八、Mermaid ER 对比
Mermaid 也有 ER 图支持:
1 | erDiagram |
| 功能 | PlantUML ER | Mermaid ER |
|---|---|---|
| 主键/外键标识 | ✅ + / ~ |
✅ |
| 关系基数 | ✅ 完整 | ✅ 部分 |
| 字段类型 | ✅ 支持 | ❌ 不支持 |
| 样式定制 | ✅ 丰富 | 有限 |
| 嵌套实体 | ✅ | ❌ |
数据库设计阶段用 PlantUML(功能完整、样式丰富);文档里快速画 ER 用 Mermaid(上手快,不需要 Java)。
小结
PlantUML ER 图记住 4 点:
entity "显示" as ID { +pk: type / ~fk: type / -field: type }是标准声明格式- 关系基数:
||= 恰好一个,o{= 零或多个,}|= 一个或多个 skinparam linetype ortho让关系线更整齐- 数据库 schema 设计用 ER 图;代码结构用类图——别混用
ER 图是团队沟通数据库结构的通用语言,比文字描述准确 10 倍。
- 标题: PlantUML ER 图实战:从数据库设计到实体关系图
- 作者: puml.online
- 创建于 : 2026-08-08 10:00:00
- 更新于 : 2026-08-14 21:34:29
- 链接: https://puml.online/blog/plantuml-er-diagram/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。