---
name: business-db-design
description: SpecPow business-db-design skill
---

# 数据库设计
> 根据 PRD 或需求描述，设计数据库表结构，输出 DDL + 索引建议 + 状态码

## 触发条件

- 用户要求设计数据库/表结构
- PRD 中包含数据模型需求
- 用户提到"建表"/"DDL"/"字段设计"

## 铁律

1. **命名规范** — 表名小写下划线，字段名小写下划线
2. **必备字段** — id, create_time, update_time, is_deleted
3. **索引合理** — 查询条件建索引，不滥用联合索引
4. **注释完整** — 表注释、字段注释、枚举值说明

## 工作流

### 阶段 1：需求分析
1. 读取 PRD 或需求描述
2. 识别实体和关系（1:1, 1:N, M:N）
3. 确认字段列表和数据类型
4. 识别查询场景（决定索引策略）

### 阶段 2：表结构设计

**每个表包含：**
```sql
CREATE TABLE `table_name` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  -- 业务字段
  `create_by` varchar(64) DEFAULT '' COMMENT '创建人',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新人',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除(0正常 1删除)',
  PRIMARY KEY (`id`),
  -- 索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='表注释';
```

### 阶段 3：索引设计
- 等值查询字段 → 单列索引
- 范围查询 → 联合索引（最左前缀）
- 唯一约束 → UNIQUE 索引
- 避免过多索引（单表 ≤ 5 个）

### 阶段 4：状态码/枚举分配

```
字段: status
0 - 草稿
1 - 待审核
2 - 已通过
3 - 已拒绝
```

## 输出格式

1. DDL 脚本（可直接执行）
2. 索引建议说明
3. 枚举值对照表
4. ER 关系图（Mermaid）

## 红旗

- 字段超过 30 个 → 考虑拆表
- 需要 TEXT/BLOB → 确认是否应该独立表
- 多对多关系 → 确认中间表设计
