Files
plates-server/sql-scripts/training-plans-tables-only.sql
richarjiang 485ba1f67c feat: 新增饮食记录和分析功能
- 创建饮食记录相关的数据库模型、DTO和API接口,支持用户手动添加和AI视觉识别记录饮食。
- 实现饮食分析服务,提供营养分析和健康建议,优化AI教练服务以集成饮食分析功能。
- 更新用户控制器,添加饮食记录的增删查改接口,增强用户饮食管理体验。
- 提供详细的API使用指南和数据库创建脚本,确保功能的完整性和可用性。
2025-08-18 16:27:01 +08:00

139 lines
5.3 KiB
SQL
Raw 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.

-- 训练计划相关表单独创建脚本
-- 此脚本仅创建训练计划相关的表,前提是动作表已经存在
-- 禁用外键检查
SET FOREIGN_KEY_CHECKS = 0;
-- 删除训练计划相关表(如果存在)
DROP TABLE IF EXISTS `t_schedule_exercises`;
DROP TABLE IF EXISTS `t_training_plans`;
-- 重新启用外键检查
SET FOREIGN_KEY_CHECKS = 1;
-- 创建训练计划表
CREATE TABLE `t_training_plans` (
`id` char(36) NOT NULL COMMENT '训练计划唯一ID',
`is_active` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否激活',
`user_id` varchar(255) NOT NULL COMMENT '用户ID',
`name` varchar(255) DEFAULT NULL COMMENT '计划名称',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`start_date` datetime NOT NULL COMMENT '开始日期',
`mode` enum('daysOfWeek','sessionsPerWeek') NOT NULL COMMENT '计划模式',
`days_of_week` json NOT NULL COMMENT '周几训练0-6',
`sessions_per_week` int NOT NULL COMMENT '每周训练次数',
`goal` enum('postpartum_recovery','fat_loss','posture_correction','core_strength','flexibility','rehab','stress_relief','') NOT NULL COMMENT '训练目标',
`start_weight_kg` float DEFAULT NULL COMMENT '起始体重(公斤)',
`preferred_time_of_day` enum('morning','noon','evening','') NOT NULL DEFAULT '' COMMENT '偏好训练时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已删除',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_is_active` (`is_active`),
KEY `idx_deleted` (`deleted`),
KEY `idx_user_active` (`user_id`, `is_active`, `deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='训练计划表';
-- 创建训练计划动作表
CREATE TABLE `t_schedule_exercises` (
`id` char(36) NOT NULL COMMENT '计划动作唯一ID',
`training_plan_id` char(36) NOT NULL COMMENT '训练计划ID',
`user_id` varchar(255) NOT NULL COMMENT '用户ID',
`exercise_key` varchar(255) DEFAULT NULL COMMENT '关联的动作key仅exercise类型',
`name` varchar(255) NOT NULL COMMENT '项目名称',
`sets` int DEFAULT NULL COMMENT '组数',
`reps` int DEFAULT NULL COMMENT '重复次数',
`duration_sec` int DEFAULT NULL COMMENT '持续时长(秒)',
`rest_sec` int DEFAULT NULL COMMENT '休息时长(秒)',
`note` text DEFAULT NULL COMMENT '备注',
`item_type` enum('exercise','rest','note') NOT NULL DEFAULT 'exercise' COMMENT '项目类型',
`completed` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已完成',
`sort_order` int NOT NULL COMMENT '排序顺序',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已删除',
PRIMARY KEY (`id`),
KEY `idx_training_plan_id` (`training_plan_id`),
KEY `idx_exercise_key` (`exercise_key`),
KEY `idx_user_id` (`user_id`),
KEY `idx_sort_order` (`sort_order`),
KEY `idx_item_type` (`item_type`),
KEY `idx_plan_sort` (`training_plan_id`, `sort_order`),
CONSTRAINT `fk_schedule_exercises_training_plan` FOREIGN KEY (`training_plan_id`) REFERENCES `t_training_plans` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_schedule_exercises_exercise` FOREIGN KEY (`exercise_key`) REFERENCES `t_exercises` (`key`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='训练计划动作表';
-- 验证表创建
SELECT
TABLE_NAME,
TABLE_COMMENT,
ENGINE
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME IN ('t_training_plans', 't_schedule_exercises')
ORDER BY TABLE_NAME;
-- 验证外键约束
SELECT
CONSTRAINT_NAME,
TABLE_NAME,
COLUMN_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = DATABASE()
AND REFERENCED_TABLE_NAME IS NOT NULL
AND TABLE_NAME = 't_schedule_exercises'
ORDER BY CONSTRAINT_NAME;
-- 测试外键约束(插入测试数据)
-- 注意:这需要先有有效的 exercise_key 数据
/*
示例测试(请根据实际数据调整):
-- 插入测试训练计划
INSERT INTO t_training_plans (
id, user_id, name, start_date, mode, days_of_week, sessions_per_week, goal
) VALUES (
'550e8400-e29b-41d4-a716-446655440000',
'test_user_123',
'测试训练计划',
NOW(),
'daysOfWeek',
'[1,3,5]',
3,
'core_strength'
);
-- 插入测试动作
INSERT INTO t_schedule_exercises (
id, training_plan_id, user_id, exercise_key, name, sets, reps, item_type, sort_order
) VALUES (
'550e8400-e29b-41d4-a716-446655440001',
'550e8400-e29b-41d4-a716-446655440000',
'test_user_123',
'mat_hundred',
'百次拍打',
3,
10,
'exercise',
1
);
-- 验证数据
SELECT
tp.name as plan_name,
se.name as exercise_name,
se.exercise_key,
e.target_muscle_groups
FROM t_training_plans tp
JOIN t_schedule_exercises se ON tp.id = se.training_plan_id
LEFT JOIN t_exercises e ON se.exercise_key = e.key
WHERE tp.user_id = 'test_user_123';
-- 清理测试数据
DELETE FROM t_schedule_exercises WHERE user_id = 'test_user_123';
DELETE FROM t_training_plans WHERE user_id = 'test_user_123';
*/