-- ========================================================= -- 食谱计算器表结构变更 SQL -- 版本:v1.0 -- 日期:2026-02-01 -- 说明:根据开发文档优化后,需要新增以下字段 -- ========================================================= -- 检查并添加 bmi_status 字段 ALTER TABLE `v2_calculator_results` ADD COLUMN IF NOT EXISTS `bmi_status` VARCHAR(20) DEFAULT NULL COMMENT 'BMI状态描述:体型过轻/正常/超重/肥胖' AFTER `bmi`; -- 检查并添加 food_list_json 字段 ALTER TABLE `v2_calculator_results` ADD COLUMN IF NOT EXISTS `food_list_json` TEXT DEFAULT NULL COMMENT '食物份数建议 JSON' AFTER `energy_intake`; -- 检查并添加 tips_json 字段 ALTER TABLE `v2_calculator_results` ADD COLUMN IF NOT EXISTS `tips_json` TEXT DEFAULT NULL COMMENT '重要提示 JSON' AFTER `meal_plan_json`; -- 如果表不存在,创建完整表结构 CREATE TABLE IF NOT EXISTS `v2_calculator_results` ( `result_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '计算结果ID', `user_id` BIGINT NOT NULL COMMENT '用户ID', -- 输入参数 `gender` VARCHAR(10) NOT NULL COMMENT '性别:male/female', `age` INT NOT NULL COMMENT '年龄(岁)', `height` INT NOT NULL COMMENT '身高(cm)', `weight` DECIMAL(5,2) DEFAULT NULL COMMENT '体重(kg)', `has_dialysis` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否透析:0-否 1-是', `dialysis_type` VARCHAR(20) DEFAULT NULL COMMENT '透析类型:hemodialysis/peritoneal', `dry_weight` DECIMAL(5,2) NOT NULL COMMENT '干体重(kg)', `creatinine` DECIMAL(8,2) NOT NULL COMMENT '血肌酐(μmol/L)', -- 计算结果 `egfr` DECIMAL(6,2) NOT NULL COMMENT 'eGFR(ml/min/1.73m²)', `standard_weight` DECIMAL(5,2) NOT NULL COMMENT '标准体重(kg)', `bmi` DECIMAL(4,1) NOT NULL COMMENT 'BMI', `bmi_status` VARCHAR(20) DEFAULT NULL COMMENT 'BMI状态描述', `ckd_stage` VARCHAR(50) NOT NULL COMMENT 'CKD分期', `protein_intake` DECIMAL(5,1) NOT NULL COMMENT '每日蛋白质目标(g)', `energy_intake` INT NOT NULL COMMENT '每日能量目标(kcal)', -- JSON 数据 `food_list_json` TEXT DEFAULT NULL COMMENT '食物份数建议 JSON', `meal_plan_json` TEXT DEFAULT NULL COMMENT '配餐方案 JSON', `tips_json` TEXT DEFAULT NULL COMMENT '重要提示 JSON', -- 状态字段 `is_adopted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否已采纳:0-未采纳 1-已采纳', `adopted_at` DATETIME DEFAULT NULL COMMENT '采纳时间', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`result_id`), INDEX `idx_user_id` (`user_id`), INDEX `idx_created_at` (`created_at`), INDEX `idx_is_adopted` (`is_adopted`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='营养计算结果表'; -- 营养计划表(如果不存在则创建) CREATE TABLE IF NOT EXISTS `v2_nutrition_plans` ( `plan_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '营养计划ID', `user_id` BIGINT NOT NULL COMMENT '用户ID', `result_id` BIGINT DEFAULT NULL COMMENT '关联的计算结果ID', -- 健康数据(冗余存储,便于查询) `gender` VARCHAR(10) DEFAULT NULL COMMENT '性别', `age` INT DEFAULT NULL COMMENT '年龄', `height` INT DEFAULT NULL COMMENT '身高(cm)', `weight` DECIMAL(5,2) DEFAULT NULL COMMENT '体重(kg)', `has_dialysis` TINYINT(1) DEFAULT 0 COMMENT '是否透析', `dialysis_type` VARCHAR(20) DEFAULT NULL COMMENT '透析类型', `creatinine` DECIMAL(8,2) DEFAULT NULL COMMENT '血肌酐', -- 计算结果 `egfr` DECIMAL(6,2) DEFAULT NULL COMMENT 'eGFR', `standard_weight` DECIMAL(5,2) DEFAULT NULL COMMENT '标准体重', `bmi` DECIMAL(4,1) DEFAULT NULL COMMENT 'BMI', `ckd_stage` VARCHAR(50) DEFAULT NULL COMMENT 'CKD分期', `protein_intake` DECIMAL(5,1) DEFAULT NULL COMMENT '蛋白质目标', `energy_intake` INT DEFAULT NULL COMMENT '能量目标', -- 配餐方案 `meal_plan_json` TEXT DEFAULT NULL COMMENT '配餐方案 JSON', -- 计划状态 `status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态:active/completed/abandoned', `start_date` DATE NOT NULL COMMENT '开始日期', `end_date` DATE 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 '更新时间', PRIMARY KEY (`plan_id`), INDEX `idx_user_id` (`user_id`), INDEX `idx_result_id` (`result_id`), INDEX `idx_status` (`status`), INDEX `idx_start_date` (`start_date`), UNIQUE INDEX `uk_user_result` (`user_id`, `result_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='营养计划表';