教程

Mermaid 类图与 ER 图入门指南

2026年2月10日
4 分钟阅读
mermaid2img

类图和实体关系图(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

最佳实践

  1. 从简单开始:先建模核心实体,然后添加属性和关系
  2. 使用一致的命名:在整个图表中坚持使用 snake_case 或 CamelCase
  3. 清晰标注关系:有命名的关联(如 placesmanages)比无名线条更清晰
  4. 控制方向:使用 direction LRdirection TB 保持图表可读
  5. 对大型图表分组相关类:使用命名空间或颜色编码

常见陷阱

  • 过早过度建模:不要在第一稿中添加每个字段,先从键和关键字段开始
  • 忽略基数:错误的多重性会导致不正确的数据库架构
  • 布局混乱:没有方向控制的大型图表会变得不可读
  • 缺少键:始终明确标记主键,以保持架构清晰

总结

类图和 ER 图是良好软件和数据库设计的基础。Mermaid 消除了传统建模工具的摩擦,让你专注于结构而非布局。无论你是在勾勒新的微服务架构,还是记录现有数据库,Mermaid 的文本化方法都能让你的图表保持可维护和可审查。


需要将 Mermaid 图表导出用于演示或文档?使用 Mermaid2img 一键生成高质量的 PNG、SVG 或 PDF 文件。