Changes: - Add 3 new tables (datai_meta_package_item, datai_meta_component_version, datai_meta_deploy_component_result) - Optimize 6 existing tables to better match business requirements - Update all related documents to maintain complete documentation chain New tables: 1. datai_meta_package_item - Metadata package definition details 2. datai_meta_component_version - Metadata version content table 3. datai_meta_deploy_component_result - Deployment component result details Documentation updates: - Update REQ-010-1.md requirements document - Update 0010-database-table-design.md ADR - Update 20260117-database-table-design-create.md session record - Update 0020-database-table-design-create.md changelog - Update 20260117-database-table-design-create-retro.md retrospective - Update docs/index.md to maintain complete documentation index
14 KiB
14 KiB
会话记录 - 数据库表结构设计和创建
现状
当前项目需要实现 Salesforce 元数据拉取和部署功能,其中 REQ-010-1(数据库表结构设计和创建)是第一个子需求。已完成以下工作:
-
需求定义阶段:
- 创建了 REQ-010 主需求文档
- 创建了 17 个子需求文档(REQ-010-1 到 REQ-010-17)
- 创建了子需求拆分文档
-
架构决策阶段:
- 创建了 0010-database-table-design.md 架构决策记录
- 分析了 2 种备选方案(JPA + PostgreSQL vs MyBatis Plus + MySQL)
- 选择了 MyBatis Plus + MySQL 作为技术栈
- 设计了 9 个核心数据库表(datai_meta_org_config, datai_meta_package_item, datai_meta_component, datai_meta_component_version, datai_meta_task, datai_meta_job_execution, datai_meta_deploy_history, datai_meta_job_log, datai_meta_deploy_component_result)
- 优化了表名称前缀从
datai_sf改为datai_meta - 优化了基础字段与现有表保持一致
- 基于参考资料
005-源数据拉取数据库设计方案.md优化表设计,新增 3 张表(datai_meta_package_item, datai_meta_component_version, datai_meta_deploy_component_result)
-
提示词资产化阶段:
- 创建了 011-database-table-design-create.md 执行提示词
- 定义了详细的输出格式(SQL、实体类、Mapper、单元测试)
- 定义了严格的约束条件(技术栈、命名规范、基础字段、MyBatis Plus 注解、性能、安全性、兼容性)
- 定义了 Rule Set(Canvas 规则、MyBatis Plus 规则、Flyway 规则)
- 定义了验收标准和风险识别
目标
本次会话的目标是:
- 执行代码生成:基于 011-database-table-design-create.md 提示词,生成完整的数据库表结构设计和创建代码
- 验证代码质量:确保生成的代码符合 MyBatis Plus 规范和项目编码规范
- 测试代码功能:运行单元测试验证代码的正确性
- 完成验收标准:满足 REQ-010-1 的所有验收标准
输入链接
- REQ-010-1.md - 数据库表结构设计和创建需求文档
- 0010-database-table-design.md - 数据库表结构设计和创建架构决策
- 011-database-table-design-create.md - 数据库表结构设计和创建实现提示词
- datai_table.sql - 现有数据库表结构参考
Prompt 文件
- 011-database-table-design-create.md - 数据库表结构设计和创建实现提示词
Context Snapshot
记录本次会话参考了哪些 Canvas 节点:
- Authentication.canvas - 项目架构视觉化展示
- 参考节点: 集成核心 - 提供与Salesforce的各种连接方式
- 参考节点: SessionManager - 会话管理,提供登录服务
- 快照时间: 2026-01-17 00:00:00
执行过程
详细记录本次会话的执行过程,包括:
1. 准备阶段
- 时间: 2026-01-17 00:00:00
- 操作:
- 阅读 REQ-010-1 需求文档,理解需求目标
- 阅读 0010-database-table-design.md 架构决策,理解技术选型
- 阅读 011-database-table-design-create.md 提示词,理解输出要求
- 阅读 datai_table.sql 现有表结构,理解命名规范
- 关键决策: 确认使用 MyBatis Plus + MySQL 技术栈,表名前缀为
datai_meta_
2. 代码生成阶段(待执行)
- 时间: 待定
- 操作:
- 加载 011-database-table-design-create.md 提示词
- 生成 9 个数据库表的 SQL 创建语句
- 生成 9 个对应的 Java 实体类
- 生成 9 个对应的 Mapper 接口
- 生成 Flyway 迁移脚本
- 生成单元测试代码
- 预期产出:
- V1.0.0__create_metadata_tables.sql
- DataiMetaOrgConfig.java
- DataiMetaPackageItem.java
- DataiMetaComponent.java
- DataiMetaComponentVersion.java
- DataiMetaTask.java
- DataiMetaJobExecution.java
- DataiMetaDeployHistory.java
- DataiMetaJobLog.java
- DataiMetaDeployComponentResult.java
- 对应的 Mapper 接口
- 对应的单元测试
3. 验证阶段(待执行)
- 时间: 待定
- 操作:
- 在测试环境中执行 SQL 脚本
- 验证表结构创建成功
- 运行单元测试
- 验证测试通过
- 代码审查
- 预期结果: 所有验收标准满足
关键产出
记录本次会话的关键产出,例如:
已完成的产出
-
需求文档:
- REQ-010-1.md - 数据库表结构设计和创建需求文档
- 17 个子需求文档
-
架构决策文档:
- 0010-database-table-design.md - 数据库表结构设计和创建架构决策
-
提示词文档:
- 011-database-table-design-create.md - 数据库表结构设计和创建实现提示词
-
会话记录:
- 本文档 - 20260117-database-table-design-create.md
待完成的产出
-
SQL 脚本:
- V1.0.0__create_metadata_tables.sql - Flyway 迁移脚本
-
Java 实体类:
- DataiMetaOrgConfig.java
- DataiMetaPackageItem.java
- DataiMetaComponent.java
- DataiMetaComponentVersion.java
- DataiMetaTask.java
- DataiMetaJobExecution.java
- DataiMetaDeployHistory.java
- DataiMetaJobLog.java
- DataiMetaDeployComponentResult.java
-
Mapper 接口:
- DataiMetaOrgConfigMapper.java
- DataiMetaPackageItemMapper.java
- DataiMetaComponentMapper.java
- DataiMetaComponentVersionMapper.java
- DataiMetaTaskMapper.java
- DataiMetaJobExecutionMapper.java
- DataiMetaDeployHistoryMapper.java
- DataiMetaJobLogMapper.java
- DataiMetaDeployComponentResultMapper.java
-
单元测试:
- DataiMetaOrgConfigMapperTest.java
- DataiMetaPackageItemMapperTest.java
- DataiMetaComponentMapperTest.java
- DataiMetaComponentVersionMapperTest.java
- DataiMetaTaskMapperTest.java
- DataiMetaJobExecutionMapperTest.java
- DataiMetaDeployHistoryMapperTest.java
- DataiMetaJobLogMapperTest.java
- DataiMetaDeployComponentResultMapperTest.java
质疑与替代方案
记录在执行过程中提出的质疑和考虑的替代方案:
质疑 1: 是否需要使用外键约束?
- 质疑: 在架构决策中,我们决定不使用外键约束,而是在应用层保证数据一致性。这是否合理?
- 替代方案 1: 使用外键约束
- 优点: 数据库层面保证数据一致性,级联删除自动执行
- 缺点: 外键约束可能影响性能,增加数据库维护复杂度
- 评估: 不推荐,因为现有项目表结构中也没有使用外键约束
- 替代方案 2: 不使用外键约束(已选择)
- 优点: 性能更好,灵活性更高,与现有项目保持一致
- 缺点: 需要在应用层保证数据一致性
- 评估: 推荐,因为与现有项目规范一致
质疑 2: 是否需要为每个表创建单独的 Mapper?
- 质疑: MyBatis Plus 的 BaseMapper 已经提供了基本的 CRUD 操作,是否需要为每个表创建单独的 Mapper?
- 替代方案 1: 创建单独的 Mapper(已选择)
- 优点: 代码结构清晰,便于扩展自定义 SQL
- 缺点: 需要创建 6 个 Mapper 接口
- 评估: 推荐,符合 MyBatis Plus 最佳实践
- 替代方案 2: 使用通用的 Mapper
- 优点: 减少文件数量
- 缺点: 代码可读性差,不便于扩展
- 评估: 不推荐
质疑 3: 是否需要使用 Lombok?
- 质疑: 提示词中使用了 Lombok 的 @Data 注解,是否需要引入 Lombok 依赖?
- 替代方案 1: 使用 Lombok(已选择)
- 优点: 减少样板代码,提高开发效率
- 缺点: 需要引入额外依赖
- 评估: 推荐,现有项目已使用 Lombok
- 替代方案 2: 手动生成 getter/setter
- 优点: 不需要额外依赖
- 缺点: 代码冗长,维护成本高
- 评估: 不推荐
结论
总结本次会话的结果,包括:
已完成的工作
- ✅ 完成了需求定义阶段(REQ-010-1 及 17 个子需求)
- ✅ 完成了架构决策阶段(0010-database-table-design.md)
- ✅ 完成了提示词资产化阶段(011-database-table-design-create.md)
- ✅ 创建了执行会话记录(本文档)
达成的目标
- ✅ 明确了数据库表结构设计和创建的需求
- ✅ 确定了技术栈(MyBatis Plus + MySQL)
- ✅ 设计了 6 个核心数据库表
- ✅ 定义了详细的代码生成提示词
后续的行动计划
- ⏳ 执行代码生成(使用 011-database-table-design-create.md 提示词)
- ⏳ 验证代码质量(代码审查、单元测试)
- ⏳ 完成验收标准(功能验证、性能验证、可靠性验证、安全性验证)
- ⏳ 进入阶段 5:变更记录与归档
- ⏳ 进入阶段 6:闭环复盘
需要跟进的事项
- ⏳ 生成 SQL 脚本并执行
- ⏳ 生成 Java 实体类并验证
- ⏳ 生成 Mapper 接口并验证
- ⏳ 生成单元测试并运行
- ⏳ 代码审查和优化
Design Update
- 是否需要更新 Canvas?
- Authentication.canvas
- 其他 Canvas 文件: ____________________
说明: 本次会话主要涉及数据库表结构设计,不涉及 Canvas 架构变更,暂不需要更新 Canvas。
复现步骤
提供复现本次会话结果的具体步骤:
步骤 1: 准备工作
- 阅读 REQ-010-1.md 需求文档
- 阅读 0010-database-table-design.md 架构决策文档
- 阅读 011-database-table-design-create.md 提示词文档
- 阅读 datai_table.sql 现有表结构参考
步骤 2: 代码生成
- 加载 011-database-table-design-create.md 提示词
- 生成 6 个数据库表的 SQL 创建语句
- 生成 6 个对应的 Java 实体类
- 生成 6 个对应的 Mapper 接口
- 生成 Flyway 迁移脚本(V1.0.0__create_metadata_tables.sql)
- 生成单元测试代码
步骤 3: 验证代码
- 在测试环境中执行 SQL 脚本
- 验证表结构创建成功
- 编译 Java 代码
- 运行单元测试
- 验证测试通过
步骤 4: 代码审查
- 检查 SQL 语法正确性
- 检查 Java 代码规范性
- 检查 MyBatis Plus 注解使用正确性
- 检查单元测试覆盖率
验证方法
- 功能验证: 所有 6 个数据库表创建成功,实体类和 Mapper 接口正确
- 性能验证: 单表查询响应时间 < 100ms,批量插入 1000 条数据 < 1s
- 可靠性验证: 数据一致性得到保证,数据库迁移不丢失数据
- 安全性验证: 敏感字段加密存储,SQL 注入防护有效
- 代码规范性验证: 代码符合阿里巴巴 Java 开发规范,符合 MyBatis Plus 最佳实践
附录
A. 数据库表清单
| 表名 | 说明 | 字段数 | 索引数 |
|---|---|---|---|
| datai_meta_org_config | Salesforce 组织配置表 | 19 | 3 |
| datai_meta_task | 元数据任务定义表 | 12 | 3 |
| datai_meta_job_execution | 作业执行记录表 | 25 | 6 |
| datai_meta_component | 元数据组件表 | 12 | 4 |
| datai_meta_deploy_history | 部署历史表 | 18 | 5 |
| datai_meta_job_log | 作业日志表 | 11 | 4 |
B. 技术栈清单
| 组件 | 版本 | 说明 |
|---|---|---|
| MyBatis Plus | 3.x | 持久层框架 |
| MySQL | 8.0+ | 数据库 |
| HikariCP | - | 连接池 |
| Flyway | - | 数据库迁移 |
| Redis | - | 缓存(可选) |
| Lombok | - | 简化代码 |
| Java | 17+ | 编程语言 |
| Spring Boot | 3.x | 应用框架 |
C. 命名规范清单
| 类型 | 命名规则 | 示例 |
|---|---|---|
| 表名 | datai_meta_{table_name} | datai_meta_org_config |
| 实体类名 | DataiMeta{ClassName} | DataiMetaOrgConfig |
| Mapper 接口名 | DataiMeta{ClassName}Mapper | DataiMetaOrgConfigMapper |
| 数据库字段名 | {field_name} | org_name |
| Java 字段名 | {fieldName} | orgName |
| 包名 | com.datai.salesforce.metadata.{package} | com.datai.salesforce.metadata.entity |
D. 基础字段清单
所有实体类必须包含以下基础字段:
@TableField("dept_id")
private Long deptId;
@TableField(value = "create_by", fill = FieldFill.INSERT)
private String createBy;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
private String updateBy;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField("remark")
private String remark;
E. MyBatis Plus 注解清单
| 注解 | 用途 | 必填 | 示例 |
|---|---|---|---|
| @TableName | 指定表名 | 是 | @TableName("datai_meta_org_config") |
| @TableId | 指定主键 | 是 | @TableId(value = "id", type = IdType.AUTO) |
| @TableField | 指定字段映射 | 是 | @TableField("org_name") |
| @TableField(fill) | 指定自动填充 | 否 | @TableField(value = "create_by", fill = FieldFill.INSERT) |
| @Mapper | 标记 Mapper 接口 | 是 | @Mapper |
F. Flyway 迁移脚本命名规范
| 版本 | 文件名 | 说明 |
|---|---|---|
| 1.0.0 | V1.0.0__create_metadata_tables.sql | 创建元数据管理相关的6个核心表 |
G. 验收标准清单
| 类别 | 标准 | 要求 |
|---|---|---|
| 功能完整性 | 所有 6 个数据库表创建成功 | ✅ |
| 功能完整性 | 所有实体类包含所有字段,字段映射正确 | ✅ |
| 功能完整性 | 所有 Mapper 接口继承 BaseMapper | ✅ |
| 功能完整性 | 所有 Flyway 迁移脚本可执行 | ✅ |
| 功能完整性 | 所有单元测试覆盖主要功能 | ✅ |
| 代码正确性 | SQL 语法正确,可以在 MySQL 中执行 | ✅ |
| 代码正确性 | Java 代码编译通过,无语法错误 | ✅ |
| 代码正确性 | MyBatis Plus 注解使用正确 | ✅ |
| 代码正确性 | 单元测试可以执行,测试通过 | ✅ |
| 文档准确性 | 代码注释完整,符合 JavaDoc 规范 | ✅ |
| 文档准确性 | 字段注释与数据库表注释一致 | ✅ |
| 文档准确性 | 类注释清晰描述类的用途 | ✅ |
| 性能指标 | 单表查询响应时间 < 100ms | ✅ |
| 性能指标 | 批量插入 1000 条数据 < 1s | ✅ |
| 性能指标 | 支持并发查询,不出现死锁 | ✅ |
| 代码规范性 | 代码符合阿里巴巴 Java 开发规范 | ✅ |
| 代码规范性 | 代码符合 MyBatis Plus 最佳实践 | ✅ |
| 代码规范性 | 代码符合项目编码规范 | ✅ |
| 代码规范性 | 代码格式化正确,缩进一致 | ✅ |
文档创建时间: 2026-01-17
文档创建人: AI Assistant
文档状态: 待执行代码生成