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 面向数据存储,允许冗余与反范式;类图面向领域模型,强调行为与不变量,二者不必一一对应。
只画表结构不标基数与可空性,评审无法发现约束缺失,脏数据只能靠上线后的清洗任务处理。