name: 200-database-design description: 数据库设计技能。当需要设计或优化数据库时触发:(1)设计新系统数据库结构, (2)定义业务实体和数据关系, (3)设计索引优化策略。完成后自动调用 201-database-design-review。 alwaysApply: false author: "axeon(23231269@qq.com)" version: "1.0.0"
数据库设计
项目环境检测
从当前目录向上查找 project-info.md,最多 3 层,找到后记为 PROJECT_ROOT。详见 检测方法与前置检查。未找到 → 提示用户先执行 0-init。
输入
| 输入项 | 来源路径 | 说明 |
|---|---|---|
| PRD | PROJECT_ROOT/requirement/prds/* |
产品需求文档,包含项目背景、性能要求、用户角色、功能模块及各终端详细需求 |
前置条件
- 模块 PRD 已完成评审并定稿
- 核心业务实体已在 PRD 中明确描述
- 数据规模和访问模式已评估
角色职责
| 角色 | 职责 | 智能体 |
|---|---|---|
| 主导 | 数据库设计 | system-architect |
| 协作 | ORM映射确认 | java-developer |
| 协作 | 业务数据需求 | product-manager |
设计流程
Phase 0: 需求访谈与澄清(必须首先完成)
在开始数据库设计之前,必须通过访谈确认数据需求,避免因理解偏差导致返工。
访谈执行原则
| 原则 | 执行方式 |
|---|---|
| 逐题提问 | 每次只问一个问题,等待用户回答后再问下一个,禁止一次性列出所有问题 |
| 使用选择框 | 必须使用 AskUserQuestion 工具呈现可点击的选择框,禁止纯文本列出选项让用户手工录入 |
| 一步一确认 | 每个确认项单独提问,禁止批量确认 |
提问方式规范
所有访谈问题必须使用 AskUserQuestion 工具,参数要求:question(问题内容)、header(≤12字符)、options(3-5个可点击选项)、multiSelect(true/false)。工具自带"Other"选项供自由录入。
访谈框架(2个阶段)
阶段一:数据需求访谈(Interview)
目标:确认对 PRD 中数据需求的理解是否准确。
| # | 确认项 | 启发式技巧 |
|---|---|---|
| 1 | 核心业务实体是否遗漏 | "我识别到以下N个核心实体[列出],是否有遗漏?" |
| 2 | 实体间关系是否正确 | "A和B是1:N关系,还是N:N?请描述一个具体场景" |
| 3 | 数据规模预估 | "预计上线后3个月/1年/3年数据量级?" |
| 4 | 数据访问模式 | "哪些查询是高频的?哪些是后台报表类低频查询?" |
| 5 | 特殊数据类型 | "是否有附件、JSON、地理坐标等非结构化数据?" |
阶段二:设计细节澄清(Clarify)
目标:明确模糊点,消除设计歧义。
| # | 澄清维度 | 核心问题 | 确认标准 |
|---|---|---|---|
| 1 | 字段细节 | "XX字段的取值范围?是否允许为空?默认值?" | 每个字段有明确类型和约束 |
| 2 | 枚举定义 | "状态字段有哪些枚举值?未来是否可能扩展?" | 枚举值完整列出 |
| 3 | 唯一约束 | "哪些字段组合必须唯一?如用户名+租户?" | 唯一场景已明确 |
| 4 | 软删除策略 | "数据是物理删除还是逻辑删除?" | 删除策略已确定 |
| 5 | 历史数据 | "是否需要保留历史版本?如订单修改记录?" | 版本策略已确认 |
| 6 | 多语言需求 | "哪些实体的哪些字段需要多语言翻译?目标语言有哪些?" | 多语言字段和目标语言已确定 |
访谈检查清单
- 所有核心实体已与用户确认无遗漏
- 实体间关系(1:1/1:N/N:N)已逐一确认
- 关键字段的取值范围和约束已明确
- 枚举字段的值域已完整列出
- 数据规模和增长趋势已评估
- 高频查询场景已识别
- 软删除/硬删除策略已确定
- 历史数据保留需求已确认
- 多语言翻译需求已确认(哪些实体的哪些字段需要翻译)
任一项未完成,不得进入设计阶段。
1. 需求分析
从 PRD 文档提取业务实体,逐模块分析数据需求,详见 数据库设计指南
2. 概念逻辑模型
3. 库表DDL设计
- 数据库DDL模板 - 建库建表语句模板
- 数据库设计指南 - 索引设计 - 命名规范、设计流程、索引设计最佳实践
- 编写
PROJECT_ROOT/database/database-ddl.sql
⚠️ 完成验证(强制,全自动执行)
开发工作完成后,立即按以下顺序自动执行:
- 强制调用
201-database-design-review - 如果评审不通过(< 95),自动修复问题,然后回到步骤 1(最多 5 轮)
- 直到评审通过(≥ 95),才向用户报告最终结果
此流程全自动执行:中间不暂停、不询问、不汇报。 未收到通过确认前,禁止结束本技能任务。
输出要求
输出位置: PROJECT_ROOT/database/
目录结构:
PROJECT_ROOT/database/
├── database-design.md # 设计文档(E-R图、实体定义、覆盖度验证)
├── database-ddl.sql # 建表语句
├── migrations/ # DDL变更文件
└── reviews/ # 评审报告(REVIEW评审产出)
└── REVIEW-DB-YYMMDDHHMM.md # 按时间戳命名,24小时制
包含内容:
database-design.md- E-R图、实体说明、数据规模、非功能设计、覆盖度验证。字段定义和索引设计统一在DDL中维护,设计文档通过DDL引用(参见 database-ddl.sql → {表名})避免重复database-ddl.sql- 所有建表、索引、约束语句(字段和索引的唯一真实来源)reviews/REVIEW-DB-YYMMDDHHMM.md- 评审报告
参考
指南与规范
- 数据库设计指南 - 命名规范、设计流程、非功能设计、索引设计指南
模板文件
关联技能
- 数据库设计评审技能 - REVIEW评审技能