数据库关系建模

Mermaid ER 图在线编辑器

通过上方 Mermaid ER 图编辑器描述数据库实体、键与关系。用基数符号区分必选和可选记录,再导出 ERD 用于表结构评审。

在线创建 Mermaid ER 图

参考下方客户、订单与订单项示例,分别检查关系两端的约束。已有工作区草稿会优先恢复。

OnUML
Loading diagram preview...

读清记录之间的数量与引用约束

ER 图帮助解释记录如何关联、哪些字段用于标识以及关系是否可选。它描述模型,不会连接或检查数据库。

实体与属性

在所属实体下组织设计讨论需要的字段。

必选与可选记录

通过端点符号区分一个、零或一个、一个或多个、零或多个。

主键、外键与唯一键

用 PK、FK、UK 标记字段角色,帮助理解身份与引用。

有含义的关系标签

用下单、包含等简短动词说明实体为什么关联。

创建用于表结构评审的 ERD

先聚焦一部分表结构,再逐条核对每个关系的两端。

  1. 01

    声明 erDiagram,列出实体,按“类型 名称 键标记”添加关键属性。

  2. 02

    使用符合必选性和数量约束的端点符号连接实体,并添加关系动词。

  3. 03

    对照真实表结构检查预览,导出 SVG 或 PNG,并把源码与结构文档一起保留。

基数、键与标识关系的 ER 语法

基数与标识关系回答不同问题。键标记用于记录字段角色,不会自动创建或验证数据库约束。

Mermaid ER 图语法参考 →

读取关系两端的基数

|| 表示恰好一个,o| 或 |o 表示零或一个,}| 或 |{ 表示一个或多个,}o 或 o{ 表示零或多个。左右端点使用对应方向的符号。

erDiagram
    CUSTOMER ||..o{ ORDER : 下单
    ORDER ||--|{ LINE_ITEM : 包含

属性与键标记

先写类型,再写属性名,必要时标记 PK、FK 或 UK。同一属性有多个键角色时,用逗号分隔。

erDiagram
    ORDER {
        string id PK
        string customer_id FK
        date created_at
    }

标识与非标识关系

-- 表示标识关系,.. 表示非标识关系。此示例中的订单拥有自己的 ID,并通过字段引用客户。

erDiagram
    CUSTOMER ||..o{ ORDER : 下单
    CUSTOMER {
        string id PK
    }
    ORDER {
        string id PK
        string customer_id FK
    }

用关联实体表达多对多数据

Mermaid 可以直接绘制多对多关系。关系数据库模型中,关联实体通常更便于记录两端引用以及选课时间等关系属性。

erDiagram
    STUDENT ||--o{ ENROLLMENT : 拥有
    COURSE ||--o{ ENROLLMENT : 包含
    ENROLLMENT {
        string student_id PK, FK
        string course_id PK, FK
        date enrolled_at
    }

Mermaid ER 图示例

客户—订单—订单项模型说明可选订单与必选订单项的基数,同时展示与关系有关的键标记。

erDiagram
    CUSTOMER ||--o{ ORDER : 下单
    ORDER ||--|{ LINE_ITEM : 包含
    CUSTOMER {
        string id PK
        string email UK
    }
    ORDER {
        string id PK
        string customer_id FK
        date created_at
    }
    LINE_ITEM {
        string order_id FK
        string sku
        int quantity
    }
  • CUSTOMER ||--o{ ORDER 表示每张订单对应一个客户,客户可以没有订单或有多张订单。
  • ORDER ||--|{ LINE_ITEM 表示订单至少包含一个订单项。
  • 请根据真实键设计核对标识关系与非标识关系。如果草稿订单允许没有订单项,尝试把 |{ 改为 o{。

常见问题

||、o{ 和 |{ 分别是什么意思?

|| 表示恰好一个,o{ 表示零或多个,|{ 表示一个或多个。完整关系还需要结合另一端的符号理解。

PK 和 FK 会检查数据库吗?

不会。PK、FK、UK 是图中的字段注释,当前编辑器不连接数据库、不读取结构,也不检查外键值。

如何建模多对多关系?

可以直接用 Mermaid 表示多对多;描述关系数据库时,可考虑增加关联实体,记录两个引用和选课日期等关系属性。

-- 与 .. 有什么区别?

它们分别表达标识关系与非标识关系,与端点的数量和可选性符号是不同维度。

应该包含全部数据库字段吗?

保留能解释身份、关联或当前设计问题的字段。如果无关列影响阅读,可以省略。

什么时候应该使用类图?

讨论方法、接口、继承和软件职责时使用类图;讨论持久化实体、键和数据库基数时使用 ER 图。

比较 ER 图语法

Mermaid 与 PlantUML ER 图对比

比较语法、关系表示、数据库建模深度和文本 ERD 的维护方式。

阅读 ER 图对比 →