datai/docs/archive/retros/20260117-database-table-design-create-retro.md

190 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 迭代复盘 - 数据库表结构设计和创建
## 目标 vs 结果指标对比
| 指标 | 目标值 | 实际值 | 达成率 | 分析 |
|------|--------|--------|--------|------|
| 功能完成数 | 完成数据库表结构设计 | 完成 9 个数据库表设计 | 100% | 按时完成,所有表结构设计符合需求 |
| 代码质量 | 符合 MyBatis Plus 规范 | 符合 MyBatis Plus 规范 | 100% | 表结构设计符合 MyBatis Plus 规范,与现有项目保持一致 |
| 测试覆盖率 | 100% | 0%(待执行代码生成后测试) | 0% | 本次阶段仅完成设计和文档,代码生成和测试将在后续阶段完成 |
| 文档完整性 | 完整的文档链 | 完成需求文档、架构决策、提示词、会话记录、变更记录 | 100% | 文档链完整,符合项目规则要求 |
## 3 条有效 Prompt 模式
### 模式 1: 需求拆分模式
- **描述**: 将复杂需求拆分为多个小模块需求,每个子需求独立、可测试、可交付。拆分时遵循单一职责原则,确保每个子需求只关注一个核心功能点。拆分后为每个子需求创建独立的需求文档,并在主需求文档中建立引用关系。
- **适用场景**: 适用于复杂功能开发,特别是涉及多个模块、多个技术栈的功能。当需求文档过于庞大(超过 500 行)时,应该考虑拆分。
- **示例**: REQ-010 "Salesforce 元数据拉取和部署" 被拆分为 17 个子需求REQ-010-1 到 REQ-010-17每个子需求关注一个核心功能点如数据库表结构设计、基础实体类和 Mapper 创建、Salesforce 组织配置管理等。
- **效果**:
- 提高了需求管理的粒度,便于跟踪和验收
- 降低了单个需求的复杂度,便于理解和实现
- 支持并行开发,提高开发效率
- 便于优先级排序,可以按需调整开发顺序
### 模式 2: 架构决策模式ADR
- **描述**: 基于架构决策记录ADR模板进行架构决策。ADR 包含上下文、决策、后果三个核心部分。上下文描述当前情况和需要解决的问题决策描述做出的技术选择后果描述决策带来的积极和消极影响。ADR 必须引用需求文档,确保决策有据可依。
- **适用场景**: 适用于所有技术选型和架构设计决策,特别是涉及多个技术方案对比的场景。当需要做出技术决策时,应该创建 ADR 文档。
- **示例**: 0010-database-table-design.md 架构决策记录,针对 REQ-010-1 "数据库表结构设计和创建" 需求,对比了两种技术方案(方案 1使用外键约束 vs 方案 2不使用外键约束最终选择了方案 2并记录了决策理由和潜在风险。
- **效果**:
- 确保架构决策有据可依,避免随意决策
- 记录决策过程和理由,便于后续回顾和审计
- 明确决策的后果,便于评估风险
- 提供决策的可追溯性,便于问题排查
### 模式 3: 提示词资产化模式
- **描述**: 基于提示词模板创建可重复调用的提示词。提示词必须引用需求文档和架构决策文档,确保输出符合预期。提示词必须定义输出格式,包括代码规范、测试要求、文档要求等。提示词应该版本化管理,便于复用和迭代。
- **适用场景**: 适用于所有需要 AI 辅助开发的场景,特别是代码生成、文档生成、测试生成等。当需要 AI 生成代码或文档时,应该创建提示词文档。
- **示例**: 011-database-table-design-create.md 提示词文档,引用了 REQ-010-1.md 需求文档和 0010-database-table-design.md 架构决策文档,定义了详细的输出格式(包括 SQL 脚本、Java 实体类、Mapper 接口、单元测试等并指定了代码规范MyBatis Plus 规范、阿里巴巴 Java 开发规范)。
- **效果**:
- 确保代码生成符合预期,避免反复修改
- 提高代码质量,符合项目规范
- 提高开发效率,减少重复工作
- 便于知识沉淀和团队协作
## 3 条踩坑与改进
### 踩坑 1: 表名前缀不一致
- **现象**: 最初设计的表名使用 `sf_` 前缀(如 `sf_org_config`),与现有项目表结构不一致。用户反馈后,改为 `datai_sf_` 前缀(如 `datai_sf_org_config`),但用户再次反馈要求改为 `datai_meta_` 前缀(如 `datai_meta_org_config`),导致表名经历了三次修改。
- **原因分析**:
- 在设计初期没有充分了解现有项目的表命名规范
- 没有仔细阅读现有表结构参考文件datai_table.sql
- 在创建 ADR 文档时没有与用户充分确认表命名规范
- **改进措施**:
- 在设计初期仔细阅读现有项目的表结构参考文件
- 在创建 ADR 文档前与用户确认关键设计决策(如表命名规范)
- 在 ADR 文档中明确记录命名规范,避免后续修改
- **避免思路**:
- 在开始设计前,先阅读现有项目的相关文档和代码
- 对于关键设计决策,先与用户确认,避免反复修改
- 在 ADR 文档中记录所有设计决策,包括命名规范、技术选型等
### 踩坑 2: 缺少标准基础字段
- **现象**: 最初设计的表结构缺少标准基础字段dept_id, create_by, create_time, update_by, update_time, remark与现有项目表结构不一致。用户反馈后补充了这些标准基础字段。
- **原因分析**:
- 在设计初期没有充分了解现有项目的表结构规范
- 没有仔细阅读现有表结构参考文件datai_table.sql
- 在创建 ADR 文档时没有与用户充分确认表结构规范
- **改进措施**:
- 在设计初期仔细阅读现有项目的表结构参考文件
- 在创建 ADR 文档前与用户确认表结构规范
- 在 ADR 文档中明确记录表结构规范,包括基础字段、索引策略等
- **避免思路**:
- 在开始设计前,先阅读现有项目的相关文档和代码
- 对于关键设计决策,先与用户确认,避免反复修改
- 在 ADR 文档中记录所有设计决策,包括表结构规范、索引策略等
### 踩坑 3: 冗余索引设计
- **现象**: 最初设计的表结构包含冗余索引,如为每个外键字段都创建了单独的索引,导致索引过多,影响写入性能。用户反馈后,优化了索引策略,移除了冗余索引。
- **原因分析**:
- 在设计初期没有充分考虑索引的性能影响
- 没有仔细评估每个索引的必要性
- 在创建 ADR 文档时没有与用户充分确认索引策略
- **改进措施**:
- 在设计初期仔细评估每个索引的必要性
- 在创建 ADR 文档前与用户确认索引策略
- 在 ADR 文档中明确记录索引策略,包括索引类型、索引字段、索引用途等
- **避免思路**:
- 在开始设计前,先评估索引的性能影响
- 对于关键设计决策,先与用户确认,避免反复修改
- 在 ADR 文档中记录所有设计决策,包括索引策略、性能优化等
## Visual Debt
记录哪些代码修改了但还没来得及同步到 Canvas
- [ ] Authentication.canvas 需要更新
- 本次变更为数据库表结构设计,不涉及 Canvas 架构变更
- 如果后续需要更新 Canvas应该添加 "datai-salesforce-metadata" 模块,包含数据库表结构设计
- [ ] 其他 Canvas 文件: 无
- **具体修改**: 本次主要是数据库表结构设计,不涉及 Canvas 架构变更,暂不需要更新 Canvas
## AI Tooling
Trae 读取 Canvas 时的表现:
- **理解程度**: Trae 对 Canvas 的理解程度较高,能够准确识别 Canvas 中的节点和关系。在本次会话中Trae 正确理解了 Authentication.canvas 中的 "集成核心" 节点和 "SessionManager" 节点,并将其作为参考信息。
- **复杂逻辑**: Trae 能够理解复杂的嵌套逻辑。在本次会话中Trae 正确理解了 Canvas 中的模块关系和依赖关系,能够根据 Canvas 中的信息生成合理的建议。
- **改进建议**:
- 建议在 Canvas 中添加更多的注释和说明,特别是对于复杂的节点和关系
- 建议在 Canvas 中使用更清晰的命名,避免使用缩写和模糊的名称
- 建议在 Canvas 中添加版本信息,便于追踪 Canvas 的变更历史
## 模板更新记录
| 日期 | 模板名称 | 更新内容 | 更新原因 |
|------|----------|----------|----------|
| 无 | 无 | 无 | 本次使用的模板均适用,无需更新 |
## 技能练习记录
| 技能领域 | 练习内容 | 练习效果 | 改进方向 |
|----------|----------|----------|----------|
| 需求定义与入库 | 创建 REQ-010 主需求文档和 17 个子需求文档 | 成功创建完整的需求文档链,需求描述清晰,验收标准明确 | 在创建需求文档前,先与用户确认需求范围和优先级,避免需求变更 |
| 架构决策 | 创建 0010-database-table-design.md 架构决策记录 | 成功创建 ADR 文档,对比了两种技术方案,记录了决策理由和潜在风险 | 在创建 ADR 文档前,先与用户确认关键设计决策,避免反复修改 |
| 提示词资产化 | 创建 011-database-table-design-create.md 提示词文档 | 成功创建提示词文档,定义了详细的输出格式和代码规范 | 在创建提示词文档前,先与用户确认输出格式和代码规范,避免反复修改 |
| 执行与记录 | 创建 20260117-database-table-design-create.md 会话记录 | 成功创建会话记录,详细记录了执行过程和关键产出 | 在创建会话记录时,应该更详细地记录质疑与替代方案,便于后续回顾 |
| 变更记录与归档 | 创建 0020-database-table-design-create.md 变更记录 | 成功创建变更记录,详细记录了变更内容、影响范围、升级指南和测试信息 | 在创建变更记录时,应该更详细地记录测试结果,便于后续验证 |
| 闭环复盘 | 创建 20260117-database-table-design-create-retro.md 复盘报告 | 成功创建复盘报告,对比了目标与实际产出,提取了有效的 Prompt 模式和踩坑与改进 | 在创建复盘报告时,应该更详细地记录技能练习效果,便于后续改进 |
## 总结
本次迭代REQ-010-1 数据库表结构设计和创建)成功完成了以下工作:
1. **需求定义阶段**:创建了 REQ-010 主需求文档和 17 个子需求文档,建立了完整的需求文档链
2. **架构决策阶段**:创建了 0010-database-table-design.md 架构决策记录,对比了两种技术方案,记录了决策理由和潜在风险
3. **提示词资产化阶段**:创建了 011-database-table-design-create.md 提示词文档,定义了详细的输出格式和代码规范
4. **执行会话与代码生成阶段**:创建了 20260117-database-table-design-create.md 会话记录,详细记录了执行过程和关键产出
5. **变更记录与归档阶段**:创建了 0020-database-table-design-create.md 变更记录,详细记录了变更内容、影响范围、升级指南和测试信息
6. **闭环复盘阶段**:创建了 20260117-database-table-design-create-retro.md 复盘报告,对比了目标与实际产出,提取了有效的 Prompt 模式和踩坑与改进
本次迭代的亮点:
- 完整遵循了项目规则的 6 个阶段,建立了完整的文档链
- 成功将复杂需求拆分为 17 个子需求,提高了需求管理的粒度
- 成功使用 ADR 模式进行架构决策,确保决策有据可依
- 成功使用提示词资产化模式,为后续代码生成做好准备
- 成功创建了会话记录和变更记录,确保了文档的可追溯性
- 成功进行了闭环复盘,提取了有效的 Prompt 模式和踩坑与改进
本次迭代的不足:
- 在设计初期没有充分了解现有项目的表命名规范和表结构规范,导致表名和基础字段经历了多次修改
- 在创建 ADR 文档时没有与用户充分确认关键设计决策,导致反复修改
- 在创建会话记录时,质疑与替代方案的记录不够详细
本次迭代的改进方向:
- 在设计初期仔细阅读现有项目的相关文档和代码,了解项目的命名规范和结构规范
- 在创建 ADR 文档前与用户确认关键设计决策,避免反复修改
- 在创建会话记录时,更详细地记录质疑与替代方案,便于后续回顾
- 在设计初期仔细阅读参考文档,确保表设计符合业务需求
本次迭代的经验教训:
- 需求拆分模式是管理复杂需求的有效方法,可以提高需求管理的粒度,便于跟踪和验收
- ADR 模式是进行架构决策的有效方法,可以确保决策有据可依,便于后续回顾和审计
- 提示词资产化模式是提高开发效率的有效方法,可以确保代码生成符合预期,减少重复工作
- 在设计初期充分了解现有项目的规范,可以避免反复修改,提高开发效率
- 在创建文档前与用户确认关键决策,可以避免反复修改,提高开发效率
- 在设计初期仔细阅读参考文档,可以确保表设计符合业务需求,避免后续优化
## 后续优化建议
### 优化 1: 基于参考资料优化表设计
- **优化内容**: 基于参考资料 `005-源数据拉取数据库设计方案.md` 优化表设计,新增 3 张表datai_meta_package_item, datai_meta_component_version, datai_meta_deploy_component_result
- **优化原因**:
- 参考文档提供了更完善的表设计,包含 9 张表,覆盖了元数据管理的完整生命周期
- 新增的 3 张表提供了重要的功能支持:
- `datai_meta_package_item` - 支持元数据包定义的自动化生成,避免手动拼写 `package.xml`
- `datai_meta_component_version` - 支持"Java 版 Git"功能,实现组件版本管理和内容哈希对比
- `datai_meta_deploy_component_result` - 支持 CI/CD 功能,提供精确的错误报告(行号、错误原因)
- **优化效果**:
- 提高了元数据管理的完整性和可追溯性
- 支持了更高级的功能如代码比对、回滚、CI 部署流水线)
- 为后续功能开发提供了更完善的数据基础
- **优化时间**: 2026-01-17
- **优化状态**: 已完成文档更新,待执行代码生成