[ PROMPT_NODE_23348 ]
erd-diagrams
[ SKILL_DOCUMENTATION ]
# 实体关系图 (ERD)
ERD 用于建模数据库架构,展示表(实体)、列(属性)以及表之间的关系。对于数据库设计和文档编制至关重要。
## 基本语法
mermaid
erDiagram
CUSTOMER ||--o{ ORDER : 下单
## 定义实体
mermaid
erDiagram
CUSTOMER
ORDER
PRODUCT
## 实体属性
定义带有类型和约束的列:
mermaid
erDiagram
CUSTOMER {
int id PK
string email UK
string name
string phone
datetime created_at
}
**属性格式:** `type name constraints`
**常见约束:**
- `PK` - 主键
- `FK` - 外键
- `UK` - 唯一键
- `NN` - 非空
## 关系
### 关系符号
**基数指示符:**
- `||` - 恰好一个
- `|o` - 零个或一个
- `}{` - 一个或多个
- `}o` - 零个或多个
**关系线:**
- `--` - 非识别关系
- `..` - 识别关系(实际中较少见)
### 常见关系
mermaid
erDiagram
%% 一对一
USER ||--|| PROFILE : 拥有
%% 一对多
CUSTOMER ||--o{ ORDER : 下单
%% 多对多(使用连接表)
STUDENT }o--o{ COURSE : 选修
STUDENT ||--o{ ENROLLMENT : 拥有
COURSE ||--o{ ENROLLMENT : 包含
%% 可选关系
EMPLOYEE |o--o{ DEPARTMENT : 管理
### 带标签的关系
mermaid
erDiagram
AUTHOR ||--o{ BOOK : 编写
BOOK }o--|| PUBLISHER : "出版于"
READER }o--o{ BOOK : 阅读
## 数据类型
使用标准数据库类型:
- `int`, `bigint`, `smallint`
- `varchar`, `text`, `char`
- `decimal`, `float`, `double`
- `boolean`, `bool`
- `date`, `datetime`, `timestamp`
- `json`, `jsonb`
- `uuid`
- `blob`, `bytea`
## 综合示例:电子商务数据库
mermaid
erDiagram
CUSTOMER ||--o{ ORDER : 下单
CUSTOMER ||--o{ REVIEW : 撰写
CUSTOMER ||--o{ ADDRESS : 拥有
ORDER ||--|{ LINE_ITEM : 包含
PRODUCT ||--o{ LINE_ITEM : "订购于"
PRODUCT }o--|| CATEGORY : "属于"
PRODUCT ||--o{ REVIEW : 接收
PRODUCT ||--o{ INVENTORY : 跟踪
ORDER ||--|| PAYMENT : "支付方式"
ORDER ||--o| SHIPMENT : "发货方式"
CUSTOMER {
uuid id PK
varchar email UK "NOT NULL"
varchar name "NOT NULL"
varchar phone
timestamp created_at "DEFAULT NOW()"
timestamp updated_at
}
ADDRESS {
uuid id