database-designlisted
Install: claude install-skill structure-projects/structure-agent-rules
# 数据库设计
> 产出表结构与迁移脚本。**MUST 含审计字段、逻辑删除、合适索引**。
## 前置条件
- 模型设计已完成(`model-design` 技能产出)
## 执行步骤
### 第 1 步:设计表结构
```sql
CREATE TABLE `user` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` BIGINT NOT NULL COMMENT '租户 ID',
`username` VARCHAR(64) NOT NULL COMMENT '用户名',
`password` VARCHAR(128) NOT NULL COMMENT '密码(加密存储)',
`email` VARCHAR(128) COMMENT '邮箱',
`mobile` VARCHAR(32) COMMENT '手机号',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1 启用 0 禁用',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除:0 正常 1 已删',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_username` (`tenant_id`, `username`),
KEY `idx_email` (`email`),
KEY `idx_mobile` (`mobile`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
```
### 第 2 步:关键约束(MUST 遵守)
| 约束 | 说明 |
|---|---|
| 主键 | `id BIGINT AUTO_INCREMENT`(不用 UUID,除非分库分表) |
| 审计字段 | `create_time` / `update_time` / `is_deleted` / `tenant_id` MUST 存在 |
| 逻辑删除 | `is_deleted TINYINT` + MyBatis-Plus `@TableLogic` |
| 命名 | 表名/字段名 MUST `lower_snake_case` |
| 字符集 | `utf8mb4` |
| 引擎 | `InnoDB` |
| 注释 | 每个表 / 字段 MUST 有 `COMMENT` |
### 第 3 步:设计索引
**MUST 索引**:
- 主键(PRIMARY KEY)
- 唯一约束(UNIQUE KEY)
- 高频查询字段(KEY)
- 外键关联字段(KEY)
- 多租户字段(tenant_id,几乎所有查询都带)
**禁止**:
- 在低选择性字段建索引(如 status 只有 0/1)
- 超过 5 个索引(影响写入性能)
### 第 4 步:生成 Flyway 迁移脚本
文件位置:`