类图和实体关系图(ER 图)是软件架构师和数据库设计师的必备工具。它们将系统的结构可视化,展示实体之间的关联方式。Mermaid 让创建这些图表变得异常简单,将复杂的可视化建模转化为可读的文本。
本指南将从零开始带你掌握这两种图表类型,提供可以立即使用的实战案例。
为什么要用 Mermaid 画结构图?
传统的建模工具如 Enterprise Architect 或 Visio 功能强大,但对于快速文档编写来说过于笨重。Mermaid 提供了一个轻量级替代方案:
- 版本控制友好:图表以文本形式存在于代码仓库中
- 快速迭代:重命名类或添加字段只需几秒钟
- 文档原生:直接将图表嵌入 README 和 Wiki 中
- 协作就绪:像审查代码一样在 Pull Request 中审查图表变更
Mermaid 类图
类图模拟系统的静态结构——类、属性、方法以及它们之间的关系。
基础语法
类图以 classDiagram 关键字开头:
classDiagram
class User {
+String id
+String email
+String name
+login()
+logout()
}
可见性修饰符
Mermaid 遵循标准 UML 可见性表示法:
| 符号 | 可见性 |
|---|---|
+ | Public(公有) |
- | Private(私有) |
# | Protected(受保护) |
~ | Package/Internal(包内/内部) |
类之间的关系
classDiagram
User "1" --> "*" Order : places
Order "1" --> "*" OrderItem : contains
Customer --|> User : inherits
| 关系 | 语法 | 含义 |
|---|---|---|
| 关联 | --> | A 使用 B |
| 继承 | --|> | A 是 B 的一种 |
| 组合 | *-- | A 拥有 B(强) |
| 聚合 | o-- | A 包含 B(弱) |
| 依赖 | ..> | A 依赖于 B |
| 实现 | ..|> | A 实现了 B |
基数(Cardinality)
多重性标签定义一个关系中有多少实例参与:
classDiagram
Company "1" --> "1..*" Employee : hires
Department "1" --> "0..*" Project : manages
完整示例
classDiagram
direction LR
class Animal {
+String name
+int age
+makeSound()
}
class Dog {
+String breed
+fetch()
}
class Cat {
+String color
+climb()
}
Animal <|-- Dog
Animal <|-- Cat
Mermaid 实体关系图(ER 图)
ER 图模拟数据库的逻辑结构——实体、属性以及它们之间的关系。
基础语法
ER 图以 erDiagram 关键字开头:
erDiagram
CUSTOMER {
string id PK
string email
string name
}
ORDER {
int id PK
date created_at
float total
}
CUSTOMER ||--o{ ORDER : places
属性类型与键
| 标记 | 含义 |
|---|---|
PK | 主键(Primary Key) |
FK | 外键(Foreign Key) |
UK | 唯一键(Unique Key) |
关系基数
Mermaid ER 图使用 Crow's Foot 表示法:
| 语法 | 含义 |
|---|---|
||--o| | 一对一或零 |
||--|{ | 一对多 |
||--o\{ | 一对零或多 |
}|--|{ | 多对多 |
完整的数据库架构示例
erDiagram
USER {
int id PK
string email UK
string password_hash
datetime created_at
}
PROFILE {
int id PK
int user_id FK
string bio
string avatar_url
}
POST {
int id PK
int author_id FK
string title
text content
datetime published_at
}
COMMENT {
int id PK
int post_id FK
int author_id FK
text body
datetime created_at
}
USER ||--o| PROFILE : has
USER ||--o{ POST : writes
POST ||--o{ COMMENT : receives
USER ||--o{ COMMENT : writes
最佳实践
- 从简单开始:先建模核心实体,然后添加属性和关系
- 使用一致的命名:在整个图表中坚持使用 snake_case 或 CamelCase
- 清晰标注关系:有命名的关联(如
places、manages)比无名线条更清晰 - 控制方向:使用
direction LR或direction TB保持图表可读 - 对大型图表分组相关类:使用命名空间或颜色编码
常见陷阱
- 过早过度建模:不要在第一稿中添加每个字段,先从键和关键字段开始
- 忽略基数:错误的多重性会导致不正确的数据库架构
- 布局混乱:没有方向控制的大型图表会变得不可读
- 缺少键:始终明确标记主键,以保持架构清晰
总结
类图和 ER 图是良好软件和数据库设计的基础。Mermaid 消除了传统建模工具的摩擦,让你专注于结构而非布局。无论你是在勾勒新的微服务架构,还是记录现有数据库,Mermaid 的文本化方法都能让你的图表保持可维护和可审查。
需要将 Mermaid 图表导出用于演示或文档?使用 Mermaid2img 一键生成高质量的 PNG、SVG 或 PDF 文件。