首页
/ 使用mermaid绘制专业实体关系图(ER图)教程

使用mermaid绘制专业实体关系图(ER图)教程

2026-02-03 04:37:38作者:戚魁泉Nursing

什么是实体关系图(ER图)

实体关系图(Entity Relationship Diagram)是一种用于描述特定知识领域中相关事物概念的数据模型。它由实体类型(对感兴趣事物的分类)和实体间可能存在的关系组成。在mermaid项目中,我们可以使用简洁的语法来绘制专业的ER图。

基础ER图示例

让我们从一个简单的订单系统示例开始:

erDiagram
    CUSTOMER ||--o{ ORDER : places
    ORDER ||--|{ LINE-ITEM : contains
    CUSTOMER }|..|{ DELIVERY-ADDRESS : uses

这个例子展示了:

  • 客户(CUSTOMER)可以下多个订单(ORDER)
  • 每个订单包含多个订单项(LINE-ITEM)
  • 客户可以使用多个送货地址(DELIVERY-ADDRESS)

实体和关系语法详解

基本语法结构

mermaid的ER图语法遵循以下格式:

<实体1> [<关系> <实体2> : <关系标签>]

每个部分解释如下:

  • 实体名称:必须以字母或下划线开头,可以包含数字和连字符
  • 关系:描述两个实体间的关联方式
  • 关系标签:从第一个实体的角度描述关系

关系表示法

mermaid使用最流行的"乌鸦脚"表示法来描述关系的基数性。关系标记由三部分组成:

  1. 第一个实体相对于第二个实体的基数
  2. 关系是否赋予"子"实体身份(实线或虚线)
  3. 第二个实体相对于第一个实体的基数

基数标记由两个字符组成:

  • 外层字符表示最大值
  • 内层字符表示最小值

基数类型对照表

标记 含义 别名
|o 零或一 zero or one
|| 恰好一 exactly one
}o 零或多个 zero or more
}| 一或多个 one or more

实体属性定义

在ER图中,我们可以为实体定义属性来增强图表的可读性:

erDiagram
    CUSTOMER ||--o{ ORDER : places
    CUSTOMER {
        string name
        string custNumber
        string sector
    }
    ORDER ||--|{ LINE-ITEM : contains
    ORDER {
        int orderNumber
        string deliveryAddress
    }

属性定义包含在实体名称后的大括号内,格式为类型 名称。属性类型可以是任何有效的标识符,没有预定义的限制。

主键和外键

在属性定义中,我们可以指定主键(PK)、外键(FK)和唯一键(UK):

erDiagram
    PERSON {
        string driversLicense PK "驾照号码"
        string(99) firstName "最多99个字符"
        string lastName
        string phone UK
        int age
    }

高级特性

实体别名

从v10.5.0开始,可以使用方括号为实体定义别名:

erDiagram
    p[Person] {
        string firstName
        string lastName
    }
    a["客户账户"] {
        string email
    }

关系标签

  • 多词标签需要用双引号括起来
  • 如果不需要标签,使用空字符串""

样式定制

mermaid提供了多种样式定制选项:

基本颜色设置

参数 用途
fill 实体或属性的背景色
stroke 实体边框或关系线颜色

CSS类选择器

选择器 用途
.er.entityBox 实体框样式
.er.relationshipLine 关系线样式
.er.attributeBoxOdd 奇数行属性框样式

最佳实践建议

  1. 命名规范:虽然mermaid不强制要求,但建议实体名称使用单数名词和大写字母
  2. 属性选择:不必列出所有属性,选择最能说明实体用途的关键属性即可
  3. 外键处理:在逻辑模型中,可以省略外键属性,因为关系线已经表达了关联
  4. 渐进式构建:可以先定义实体,再逐步添加关系和属性

通过mermaid的ER图功能,开发者可以快速创建专业的数据模型图,无论是用于数据库设计还是系统分析,都能清晰表达实体间的复杂关系。

登录后查看全文
热门项目推荐
相关项目推荐