# 设计数据库

## 规则（Rules）

# 数据库设计规范

## 1. 表名

表名使用小写蛇形（snake_case），单数形式。

✅ `user_accounts`、`order_items`、`product_category`
❌ `UserAccounts`、`userAccounts`、`users`（复数）

## 2. 字段名

字段名使用小写蛇形（snake_case）。

✅ `user_name`、`created_at`、`is_active`
❌ `userName`、`createdAt`、`isActive`

## 3. 主键

每个表必须有主键，通常为自增INT或UUID。

✅ `id INT AUTO_INCREMENT PRIMARY KEY`
❌ 无主键或用业务字段做主键

## 4. 第三范式

数据库设计至少满足第三范式（3NF），禁止存储冗余数据。

✅ 用户信息在users表，订单在orders表，通过user_id关联
❌ 在orders表中同时存储user_name、user_email

## 5. 索引

为查询条件字段创建索引。

✅ 为email创建唯一索引，为status创建普通索引
❌ 不为查询字段创建索引，导致全表扫描

## 方法（Methods）

# 数据库设计方法

## 步骤

### 1. 分析数据需求
分析需求文档，提取数据实体和关系。

### 2. 设计表结构
对每个实体设计表：表名（snake_case）、字段（名/类型/长度/是否为空/默认值）、主键、外键。编写表结构文档。

### 3. 设计索引
分析查询场景，设计主键索引、唯一索引、普通索引、复合索引。编写索引设计文档。

### 4. 编写SQL脚本
编写建表SQL脚本。

### 5. 输出设计文档
输出数据库设计文档。

## 技巧（Tips）

# 数据库设计技巧

## 1. 索引使用原则

| 索引类型 | 适用场景 | 示例 |
|---------|---------|------|
| 主键索引 | 唯一标识 | id |
| 唯一索引 | 业务唯一字段 | email、id_card |
| 普通索引 | 查询条件字段 | status、category_id |
| 复合索引 | 多条件查询 | (status, created_at) |

## 2. 常见问题

| 问题 | 原因 | 解决 |
|------|------|------|
| 查询速度慢 | 缺少索引 | 为查询字段添加索引 |
| 数据不一致 | 未使用事务或外键 | 添加事务控制和外键约束 |
| 存储空间增长快 | 字段类型过大 | 优化字段类型，定期归档 |
