[ PROMPT_NODE_24628 ]
schema-design-checklist
[ SKILL_DOCUMENTATION ]
# 数据库架构设计清单
用于设计和审查数据库架构的完整清单。
---
## 设计前
- [ ] **收集需求**:了解数据实体和关系
- [ ] **识别访问模式**:了解数据将如何被查询
- [ ] **SQL vs NoSQL 决策**:选择了适当的数据库类型
- [ ] **规模估算**:预期的数据量和增长率
- [ ] **读/写比例**:了解是读密集型还是写密集型
---
## 规范化 (SQL)
- [ ] **1NF**:原子值,无重复组
- [ ] **2NF**:复合键上无部分依赖
- [ ] **3NF**:无传递依赖
- [ ] **反规范化合理性**:如果进行了反规范化,已记录原因
---
## 表设计
### 主键
- [ ] **定义主键**:每个表都有主键
- [ ] **选择键类型**:INT 自增或 UUID
- [ ] **避免有意义的键**:不使用电子邮件/用户名作为主键
### 数据类型
- [ ] **适当的类型**:每列的数据类型正确
- [ ] **字符串大小**:VARCHAR 大小适当
- [ ] **数值精度**:DECIMAL 用于金额,INT 用于计数
- [ ] **UTC 时间**:日期时间列使用 TIMESTAMP
### 约束
- [ ] **NOT NULL**:必填列标记为 NOT NULL
- [ ] **唯一约束**:唯一列(电子邮件、用户名)
- [ ] **检查约束**:验证规则(价格 >= 0)
- [ ] **默认值**:在适当的情况下设置合理的默认值
---
## 关系
### 外键
- [ ] **定义外键**:所有关系都有外键约束
- [ ] **ON DELETE 策略**:选择了 CASCADE、RESTRICT、SET NULL
- [ ] **ON UPDATE 策略**:通常为 CASCADE
- [ ] **外键索引**:所有外键都已建立索引
### 关系类型
- [ ] **一对多**:建模正确
- [ ] **多对多**:创建了连接表
- [ ] **自引用**:处理了父子关系
- [ ] **多态**:选择了策略(单独的外键或类型+ID)
---
## 索引
### 索引策略
- [ ] **主键索引**:自动,请验证
- [ ] **外键索引**:所有外键都有索引
- [ ] **WHERE 列**:WHERE 子句中的列已建立索引
- [ ] **ORDER BY 列**:排序列已建立索引
- [ ] **复合索引**:优化了多列查询
- [ ] **列顺序**:选择性最高的列在前
### 索引限制
- [ ] **不过度索引**:仅保留必要的索引
- [ ] **索引维护**:了解对写入的影响
---
## 性能
- [ ] **优化连接**:N+1 查询