# 训练表结构设计说明 ## 问题描述 发现数据库表命名不一致的问题: - 代码中引用了 `training_projects` 和 `ak_training_projects` 两个表名 - 数据库中只存在 `ak_training_plans`(训练计划)表 - 缺少 `training_projects`(训练项目)表的定义 ## 概念区分 ### Training Projects(训练项目) - **概念**:可复用的训练活动模板 - **用途**:定义标准化的训练内容,如"5公里跑步"、"篮球基础训练"等 - **特点**:模板化、可重复使用、包含评分标准和训练要点 - **表名**:`training_projects` 和 `ak_training_projects` ### Training Plans(训练计划) - **概念**:具体的训练安排 - **用途**:为特定用户制定的个性化训练计划 - **特点**:个人化、时间性、包含具体的开始结束日期 - **表名**:`ak_training_plans` ## 解决方案 ### 1. 创建缺失的表 创建了 `create_training_projects_tables.sql` 文件,包含: - `training_projects` 表(Service层使用) - `ak_training_projects` 表(与现有命名约定保持一致) ### 2. 统一表名引用 修复了 `projects-management.uvue` 中的不一致问题: - 将第7行的 `ak_training_projects` 改为 `training_projects` - 保持第90行的 `training_projects` 不变 - 确保整个文件使用统一的表名 ### 3. 字段设计 基于 `TrainingProject` 类型定义设计了完整的字段结构: ```sql - id: SERIAL PRIMARY KEY - name: VARCHAR(128) - 项目名称 - description: TEXT - 项目描述 - category: VARCHAR(64) - 项目分类 - difficulty: INTEGER - 难度等级(1-5) - duration: INTEGER - 持续时间(分钟) - training_points: TEXT - 训练要点 - scoring_criteria: TEXT - 评分标准 - image_url: VARCHAR(512) - 项目图片 - status: VARCHAR(16) - 状态(active/inactive) - usage_count: INTEGER - 使用次数统计 - created_at: TIMESTAMP - 创建时间 - updated_at: TIMESTAMP - 更新时间 ``` ## 数据库部署 ### 执行步骤 1. 运行 `create_training_projects_tables.sql` 创建表结构 2. 确认应用代码使用正确的表名 3. 测试功能是否正常工作 ### 示例数据 已包含5个示例训练项目: - 5公里跑步 - 俯卧撑训练 - 篮球基础 - 游泳训练 - 瑜伽基础 ## 下一步工作 ### 1. 代码检查 确认所有引用 `training_projects` 的地方都能正常工作: - ✅ `sportsservice.uts` - 已使用正确表名 - ✅ `projects-management.uvue` - 已修复不一致问题 - 📋 其他可能的引用位置需要检查 ### 2. 功能测试 - 📋 测试项目列表加载 - 📋 测试项目创建功能 - 📋 测试项目编辑功能 - 📋 测试项目状态切换 ### 3. 数据迁移(如需要) 如果现有环境中有相关数据,可能需要数据迁移策略。 ## 设计理念 这个设计遵循了以下原则: 1. **概念清晰**:训练项目和训练计划概念分离 2. **代码兼容**:支持现有Service层代码 3. **命名一致**:提供两个表名选项以适应不同的命名约定 4. **扩展性**:字段设计支持未来功能扩展 5. **数据完整性**:包含必要的约束和索引