Files

140 lines
8.0 KiB
SQL
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.
-- ================================================================
-- Fitness Agent 健康管理模块 - 数据库迁移脚本
-- 新增:体检报告、异常指标、禁忌规则、安全预警、复查提醒
-- ================================================================
-- 1. 体检报告记录表
CREATE TABLE IF NOT EXISTS health_checkups (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id VARCHAR(50) NOT NULL COMMENT '用户标识',
checkup_date DATE NOT NULL COMMENT '体检日期',
hospital VARCHAR(100) DEFAULT '' COMMENT '体检机构/医院',
summary TEXT COMMENT '体检总结/结论',
overall_status ENUM('正常','基本正常','异常','需复查') DEFAULT '基本正常' COMMENT '总体评价',
report_file VARCHAR(255) DEFAULT '' COMMENT '报告文件路径/URL',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_date (user_id, checkup_date DESC),
INDEX idx_status (user_id, overall_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='体检报告记录';
-- 2. 异常指标记录表
CREATE TABLE IF NOT EXISTS health_abnormal_indicators (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id VARCHAR(50) NOT NULL COMMENT '用户标识',
checkup_id BIGINT DEFAULT NULL COMMENT '关联体检报告ID',
indicator_name VARCHAR(100) NOT NULL COMMENT '指标名称(如:总胆固醇、尿酸、ALT)',
indicator_category VARCHAR(50) NOT NULL COMMENT '指标分类(血常规/肝功能/肾功能/血脂/血糖/尿酸/血压/其他)',
result_value VARCHAR(100) NOT NULL COMMENT '检测结果值',
unit VARCHAR(30) DEFAULT '' COMMENT '单位(如:mmol/L、μmol/L',
normal_range VARCHAR(100) DEFAULT '' COMMENT '正常参考范围',
deviation ENUM('偏高','偏低','临界偏高','临界偏低') NOT NULL COMMENT '偏离方向',
severity ENUM('注意','警示','危险') DEFAULT '注意' COMMENT '严重程度',
status ENUM('待处理','观察中','已复查','已正常','需持续关注') DEFAULT '待处理' COMMENT '处理状态',
doctor_advice TEXT COMMENT '医生建议',
ai_analysis TEXT COMMENT 'AI分析解读',
first_detected DATE NOT NULL COMMENT '首次发现日期',
resolved_date DATE DEFAULT NULL COMMENT '恢复正常日期',
note TEXT COMMENT '备注',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_indicator (user_id, indicator_name),
INDEX idx_user_status (user_id, status),
INDEX idx_severity (user_id, severity),
INDEX idx_checkup (checkup_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='异常指标记录';
-- 3. 用户禁忌规则表
CREATE TABLE IF NOT EXISTS health_restrictions (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id VARCHAR(50) NOT NULL COMMENT '用户标识',
indicator_id BIGINT DEFAULT NULL COMMENT '关联异常指标ID(可为空,表示通用禁忌)',
restriction_type ENUM('饮食','运动','作息','用药','其他') NOT NULL COMMENT '禁忌类型',
rule_name VARCHAR(100) NOT NULL COMMENT '规则名称(如:高嘌呤食物、剧烈运动)',
forbidden_items TEXT NOT NULL COMMENT '禁忌清单(JSON数组或逗号分隔)',
reason TEXT COMMENT '禁忌原因',
start_date DATE NOT NULL COMMENT '生效日期',
end_date DATE DEFAULT NULL COMMENT '失效日期(NULL=长期有效)',
priority ENUM('低','中','高','紧急') DEFAULT '中' COMMENT '优先级',
is_active TINYINT(1) DEFAULT 1 COMMENT '是否生效',
violation_consequence TEXT COMMENT '违反后果说明',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_active (user_id, is_active),
INDEX idx_indicator (indicator_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户禁忌规则';
-- 4. 安全预警日志表
CREATE TABLE IF NOT EXISTS health_alerts (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id VARCHAR(50) NOT NULL COMMENT '用户标识',
indicator_id BIGINT DEFAULT NULL COMMENT '关联异常指标ID',
alert_type ENUM('饮食违规','运动风险','指标恶化','复查逾期','禁忌冲突','综合预警') NOT NULL COMMENT '预警类型',
severity ENUM('提示','警告','危险') NOT NULL COMMENT '严重级别',
title VARCHAR(200) NOT NULL COMMENT '预警标题',
detail TEXT NOT NULL COMMENT '预警详情',
related_context TEXT COMMENT '相关上下文(JSON',
action_required VARCHAR(500) DEFAULT '' COMMENT '建议操作',
status ENUM('未处理','已处理','已忽略') DEFAULT '未处理' COMMENT '处理状态',
resolved_at TIMESTAMP NULL DEFAULT NULL COMMENT '处理时间',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_status (user_id, status),
INDEX idx_severity (severity),
INDEX idx_created (created_at DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='安全预警日志';
-- 5. 复查提醒表
CREATE TABLE IF NOT EXISTS health_reminders (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id VARCHAR(50) NOT NULL COMMENT '用户标识',
indicator_id BIGINT DEFAULT NULL COMMENT '关联异常指标ID',
reminder_type ENUM('复查提醒','复诊提醒','用药提醒','生活调整','其他') NOT NULL COMMENT '提醒类型',
title VARCHAR(200) NOT NULL COMMENT '提醒标题',
description TEXT COMMENT '提醒内容',
due_date DATE NOT NULL COMMENT '预计执行日期',
remind_before_days INT DEFAULT 3 COMMENT '提前提醒天数',
repeat_interval ENUM('不重复','每周','每月','每季度','每半年','每年') DEFAULT '不重复' COMMENT '重复周期',
repeat_count INT DEFAULT 0 COMMENT '已重复次数',
max_repeats INT DEFAULT 0 COMMENT '最大重复次数(0=不限)',
status ENUM('待执行','已执行','已过期','已取消') DEFAULT '待执行' COMMENT '执行状态',
completed_at TIMESTAMP NULL DEFAULT NULL COMMENT '实际完成时间',
result TEXT COMMENT '执行结果/复查结论',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_due (user_id, due_date),
INDEX idx_user_status (user_id, status),
INDEX idx_due_date (due_date, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='复查提醒';
-- 6. 指标变化追踪表(用于趋势分析)
CREATE TABLE IF NOT EXISTS health_indicator_trends (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id VARCHAR(50) NOT NULL COMMENT '用户标识',
indicator_name VARCHAR(100) NOT NULL COMMENT '指标名称',
indicator_category VARCHAR(50) NOT NULL COMMENT '指标分类',
record_date DATE NOT NULL COMMENT '检测日期',
result_value VARCHAR(100) NOT NULL COMMENT '检测值',
unit VARCHAR(30) DEFAULT '' COMMENT '单位',
normal_range VARCHAR(100) DEFAULT '' COMMENT '参考范围',
source ENUM('体检报告','自主检测','医院就诊') DEFAULT '体检报告' COMMENT '数据来源',
note VARCHAR(255) DEFAULT '' COMMENT '备注',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_indicator (user_id, indicator_name, record_date),
UNIQUE KEY uk_user_indicator_date (user_id, indicator_name, record_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='指标变化追踪';
-- 7. 用户异常指标概要表(汇总最新状态)
CREATE TABLE IF NOT EXISTS user_health_summary (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id VARCHAR(50) NOT NULL UNIQUE COMMENT '用户标识',
abnormal_count INT DEFAULT 0 COMMENT '当前异常指标数',
critical_count INT DEFAULT 0 COMMENT '高危指标数',
pending_reminders INT DEFAULT 0 COMMENT '待处理提醒数',
active_restrictions INT DEFAULT 0 COMMENT '生效禁忌数',
last_checkup_date DATE DEFAULT NULL COMMENT '最近体检日期',
last_review_at TIMESTAMP NULL DEFAULT NULL COMMENT '最近AI审核时间',
overall_risk_level ENUM('低','中','高') DEFAULT '低' COMMENT '综合风险等级',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户健康概要';