需求分析与建模61 条

实体关系图(ERD)

用实体、属性与关系描述数据模型,主流记法有 Chen 记法与鸦脚(Crow's Foot)记法;关系基数包括一对一、一对多与多对多,多对多通常需拆解为关联实体。

ERD 是什么

实体关系图用实体、属性与关系描述数据模型,主流记法有 Chen 记法与鸦脚记法,后者在工程中使用更广。关系基数包括一对一、一对多与多对多,多对多通常需要引入关联实体拆开。ERD 分逻辑模型与物理模型两个层次:逻辑模型关注实体与关系、不绑定具体数据库;物理模型落到表、列、类型、索引与约束,是建库迁移的直接依据。

Mermaid ER 示例

Mermaid ER 示例
erDiagram
  CUSTOMER ||--o{ ORDER : places
  ORDER ||--|{ ORDER_LINE : contains
  PRODUCT ||--o{ ORDER_LINE : "ordered in"
  ORDER {
    string order_id PK
    string customer_id FK
    string status
  }

基本信息

逻辑模型关注实体与关系,不绑定具体数据库与数据类型
物理模型落到表、列、类型、索引、主外键与约束
常见补充主键、外键、可空性、唯一约束、默认值
基数记法鸦脚记法用符号表达零或一、恰好一、多等语义
常见工具dbdiagram、draw.io、PowerDesigner、数据库客户端内置建模

建模检查点

检查点说明常见问题
主键每个实体有稳定唯一标识用业务可变字段作主键
关系基数明确一对一、一对多、多对多多对多未拆关联表
可空性区分必填与可选属性全部允许为空,约束落到应用层
索引按查询条件设计索引只在主键上建索引,查询全表扫描
历史与审计需要留痕的实体设计历史表直接覆盖旧值,无法追溯

典型使用场景

  • 需求评审:用逻辑 ERD 与业务方确认实体与关系是否完整
  • 建库设计:从逻辑模型生成物理模型并评审索引与约束
  • 文档交付:作为数据字典的可视化入口,降低理解成本
  • 数据治理:识别缺失的外键与可空约束,统一规范
  • 系统对接:与外部系统协商字段映射与主键约定
  • 重构评估:评估拆表拆库对关系完整性的影响
ERD 与类图的对象不同:ERD 面向数据存储,允许冗余与反范式;类图面向领域模型,强调行为与不变量,二者不必一一对应。
只画表结构不标基数与可空性,评审无法发现约束缺失,脏数据只能靠上线后的清洗任务处理。

易错点

  • 多对多关系不拆关联实体,后续需要为关系附加属性时无处安放
  • 用可变业务字段(状态、手机号)作主键,业务调整时牵动大量外键
  • ERD 与数据库实际结构长期不一致,新同学按图写 SQL 频繁报错
  • 只设计主键索引,忽略高频查询条件,上线后出现全表扫描与慢查询
  • 物理模型直接暴露给领域层,领域模型被表结构绑死,业务规则无处表达

数据来源与参考

  • Peter Chen《The Entity-Relationship Model》(1976)
  • OMG UML 2.5.1 规范(类图表达数据模型)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌