xinli/sql/psy_assessment_system.sql

322 lines
18 KiB
MySQL
Raw Normal View History

2025-11-03 18:21:32 +08:00
-- ========================================
-- 心理测评系统数据库表结构设计
-- 基于若依(RuoYi)框架扩展
-- 创建时间: 2025-10-31
-- ========================================
-- 设置字符集
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- 1、心理量表基本信息表
-- ----------------------------
DROP TABLE IF EXISTS `psy_scale`;
CREATE TABLE `psy_scale` (
`scale_id` bigint NOT NULL AUTO_INCREMENT COMMENT '量表ID',
`scale_code` varchar(50) NOT NULL COMMENT '量表编码(唯一标识)',
`scale_name` varchar(100) NOT NULL COMMENT '量表名称',
`scale_en_name` varchar(200) DEFAULT NULL COMMENT '量表英文名称',
`scale_type` varchar(50) DEFAULT NULL COMMENT '量表类型(如:人格量表、情绪量表、认知量表等)',
`scale_version` varchar(20) DEFAULT '1.0' COMMENT '量表版本',
`scale_intro` text COMMENT '量表简介',
`scale_description` text COMMENT '量表详细描述',
`item_count` int DEFAULT 0 COMMENT '题目数量',
`estimated_time` int DEFAULT NULL COMMENT '预计完成时间(分钟)',
`target_population` varchar(200) DEFAULT NULL COMMENT '适用人群',
`author` varchar(100) DEFAULT NULL COMMENT '量表作者',
`source` varchar(200) DEFAULT NULL COMMENT '量表来源(权威机构或文献)',
`reference` text COMMENT '参考文献',
`status` char(1) DEFAULT '0' COMMENT '状态0正常 1停用',
`sort_order` int DEFAULT 0 COMMENT '排序顺序',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`scale_id`),
UNIQUE KEY `uk_scale_code` (`scale_code`),
KEY `idx_scale_type` (`scale_type`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='心理量表基本信息表';
-- ----------------------------
-- 2、量表题目表
-- ----------------------------
DROP TABLE IF EXISTS `psy_scale_item`;
CREATE TABLE `psy_scale_item` (
`item_id` bigint NOT NULL AUTO_INCREMENT COMMENT '题目ID',
`scale_id` bigint NOT NULL COMMENT '量表ID',
`item_number` int NOT NULL COMMENT '题目序号',
`item_content` text NOT NULL COMMENT '题目内容',
`item_type` varchar(20) DEFAULT 'single' COMMENT '题目类型single单选 multiple多选 matrix矩阵',
`required` char(1) DEFAULT '1' COMMENT '是否必填0否 1是',
`reverse_score` char(1) DEFAULT '0' COMMENT '是否反向计分0否 1是',
`sort_order` int DEFAULT 0 COMMENT '排序顺序',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`item_id`),
KEY `idx_scale_id` (`scale_id`),
KEY `idx_item_number` (`scale_id`, `item_number`),
CONSTRAINT `fk_item_scale` FOREIGN KEY (`scale_id`) REFERENCES `psy_scale` (`scale_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='量表题目表';
-- ----------------------------
-- 3、题目选项表
-- ----------------------------
DROP TABLE IF EXISTS `psy_scale_option`;
CREATE TABLE `psy_scale_option` (
`option_id` bigint NOT NULL AUTO_INCREMENT COMMENT '选项ID',
`item_id` bigint NOT NULL COMMENT '题目ID',
`option_code` varchar(20) DEFAULT NULL COMMENT '选项编码如A、B、C或1、2、3',
`option_content` varchar(500) NOT NULL COMMENT '选项内容',
`option_score` decimal(10,2) DEFAULT 0.00 COMMENT '选项分值',
`sort_order` int DEFAULT 0 COMMENT '排序顺序',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`option_id`),
KEY `idx_item_id` (`item_id`),
CONSTRAINT `fk_option_item` FOREIGN KEY (`item_id`) REFERENCES `psy_scale_item` (`item_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='题目选项表';
-- ----------------------------
-- 4、量表因子维度
-- ----------------------------
DROP TABLE IF EXISTS `psy_factor`;
CREATE TABLE `psy_factor` (
`factor_id` bigint NOT NULL AUTO_INCREMENT COMMENT '因子ID',
`scale_id` bigint NOT NULL COMMENT '量表ID',
`factor_code` varchar(50) NOT NULL COMMENT '因子编码',
`factor_name` varchar(100) NOT NULL COMMENT '因子名称',
`factor_en_name` varchar(200) DEFAULT NULL COMMENT '因子英文名称',
`factor_description` text COMMENT '因子描述',
`factor_order` int DEFAULT 0 COMMENT '因子顺序',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`factor_id`),
KEY `idx_scale_id` (`scale_id`),
KEY `idx_factor_code` (`scale_id`, `factor_code`),
CONSTRAINT `fk_factor_scale` FOREIGN KEY (`scale_id`) REFERENCES `psy_scale` (`scale_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='量表因子(维度)表';
-- ----------------------------
-- 5、因子计分规则表定义哪些题目属于哪个因子以及计分方式
-- ----------------------------
DROP TABLE IF EXISTS `psy_factor_rule`;
CREATE TABLE `psy_factor_rule` (
`rule_id` bigint NOT NULL AUTO_INCREMENT COMMENT '规则ID',
`factor_id` bigint NOT NULL COMMENT '因子ID',
`item_id` bigint NOT NULL COMMENT '题目ID',
`option_ids` varchar(500) DEFAULT NULL COMMENT '参与计分的选项ID多个用逗号分隔为空表示该题的所有选项',
`weight` decimal(5,2) DEFAULT 1.00 COMMENT '权重默认1.0',
`calculation_type` varchar(50) DEFAULT 'sum' COMMENT '计算方式sum求和 average平均 max最大 min最小',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`rule_id`),
UNIQUE KEY `uk_factor_item` (`factor_id`, `item_id`),
KEY `idx_factor_id` (`factor_id`),
KEY `idx_item_id` (`item_id`),
CONSTRAINT `fk_rule_factor` FOREIGN KEY (`factor_id`) REFERENCES `psy_factor` (`factor_id`) ON DELETE CASCADE,
CONSTRAINT `fk_rule_item` FOREIGN KEY (`item_id`) REFERENCES `psy_scale_item` (`item_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='因子计分规则表';
-- ----------------------------
-- 6、测评记录表
-- ----------------------------
DROP TABLE IF EXISTS `psy_assessment`;
CREATE TABLE `psy_assessment` (
`assessment_id` bigint NOT NULL AUTO_INCREMENT COMMENT '测评ID',
`scale_id` bigint NOT NULL COMMENT '量表ID',
`user_id` bigint DEFAULT NULL COMMENT '用户ID关联sys_user可为空表示匿名测评',
`assessee_name` varchar(50) DEFAULT NULL COMMENT '被测评人姓名(匿名测评时使用)',
`assessee_gender` char(1) DEFAULT NULL COMMENT '被测评人性别0男 1女 2未知',
`assessee_age` int DEFAULT NULL COMMENT '被测评人年龄',
`assessee_id_card` varchar(18) DEFAULT NULL COMMENT '被测评人身份证号(可选)',
`assessee_phone` varchar(11) DEFAULT NULL COMMENT '被测评人手机号',
`assessee_email` varchar(100) DEFAULT NULL COMMENT '被测评人邮箱',
`start_time` datetime DEFAULT NULL COMMENT '开始时间',
`submit_time` datetime DEFAULT NULL COMMENT '提交时间',
`complete_time` int DEFAULT NULL COMMENT '完成耗时(秒)',
`total_score` decimal(10,2) DEFAULT NULL COMMENT '总分',
`status` char(1) DEFAULT '0' COMMENT '状态0进行中 1已完成 2已作废',
`ip_address` varchar(128) DEFAULT '' COMMENT 'IP地址',
`user_agent` varchar(500) DEFAULT NULL COMMENT '用户代理',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`assessment_id`),
KEY `idx_scale_id` (`scale_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_status` (`status`),
KEY `idx_submit_time` (`submit_time`),
CONSTRAINT `fk_assessment_scale` FOREIGN KEY (`scale_id`) REFERENCES `psy_scale` (`scale_id`),
CONSTRAINT `fk_assessment_user` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`user_id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='测评记录表';
-- ----------------------------
-- 7、测评答案表
-- ----------------------------
DROP TABLE IF EXISTS `psy_assessment_answer`;
CREATE TABLE `psy_assessment_answer` (
`answer_id` bigint NOT NULL AUTO_INCREMENT COMMENT '答案ID',
`assessment_id` bigint NOT NULL COMMENT '测评ID',
`item_id` bigint NOT NULL COMMENT '题目ID',
`option_id` bigint DEFAULT NULL COMMENT '选项ID单选时使用',
`option_ids` varchar(500) DEFAULT NULL COMMENT '选项ID列表多选时使用多个用逗号分隔',
`answer_score` decimal(10,2) DEFAULT 0.00 COMMENT '答案得分',
`answer_text` text COMMENT '文本答案(适用于开放题)',
`create_time` datetime DEFAULT NULL COMMENT '答题时间',
PRIMARY KEY (`answer_id`),
UNIQUE KEY `uk_assessment_item` (`assessment_id`, `item_id`),
KEY `idx_assessment_id` (`assessment_id`),
KEY `idx_item_id` (`item_id`),
KEY `idx_option_id` (`option_id`),
CONSTRAINT `fk_answer_assessment` FOREIGN KEY (`assessment_id`) REFERENCES `psy_assessment` (`assessment_id`) ON DELETE CASCADE,
CONSTRAINT `fk_answer_item` FOREIGN KEY (`item_id`) REFERENCES `psy_scale_item` (`item_id`),
CONSTRAINT `fk_answer_option` FOREIGN KEY (`option_id`) REFERENCES `psy_scale_option` (`option_id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='测评答案表';
-- ----------------------------
-- 8、因子得分表存储每个因子的得分
-- ----------------------------
DROP TABLE IF EXISTS `psy_factor_score`;
CREATE TABLE `psy_factor_score` (
`score_id` bigint NOT NULL AUTO_INCREMENT COMMENT '得分ID',
`assessment_id` bigint NOT NULL COMMENT '测评ID',
`factor_id` bigint NOT NULL COMMENT '因子ID',
`factor_score` decimal(10,2) NOT NULL COMMENT '因子得分',
`standard_score` decimal(10,2) DEFAULT NULL COMMENT '标准分T分、Z分等',
`percentile` decimal(5,2) DEFAULT NULL COMMENT '百分位',
`create_time` datetime DEFAULT NULL COMMENT '计算时间',
PRIMARY KEY (`score_id`),
UNIQUE KEY `uk_assessment_factor` (`assessment_id`, `factor_id`),
KEY `idx_assessment_id` (`assessment_id`),
KEY `idx_factor_id` (`factor_id`),
CONSTRAINT `fk_score_assessment` FOREIGN KEY (`assessment_id`) REFERENCES `psy_assessment` (`assessment_id`) ON DELETE CASCADE,
CONSTRAINT `fk_score_factor` FOREIGN KEY (`factor_id`) REFERENCES `psy_factor` (`factor_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='因子得分表';
-- ----------------------------
-- 9、结果解释标准表
-- ----------------------------
DROP TABLE IF EXISTS `psy_result_interpretation`;
CREATE TABLE `psy_result_interpretation` (
`interpretation_id` bigint NOT NULL AUTO_INCREMENT COMMENT '解释ID',
`scale_id` bigint DEFAULT NULL COMMENT '量表ID为空表示通用解释',
`factor_id` bigint DEFAULT NULL COMMENT '因子ID为空表示总体解释',
`score_range_min` decimal(10,2) DEFAULT NULL COMMENT '分数范围最小值',
`score_range_max` decimal(10,2) DEFAULT NULL COMMENT '分数范围最大值',
`level` varchar(50) DEFAULT NULL COMMENT '等级(如:低、中、高)',
`level_name` varchar(100) DEFAULT NULL COMMENT '等级名称(如:轻度、中度、重度)',
`interpretation_title` varchar(200) DEFAULT NULL COMMENT '解释标题',
`interpretation_content` text COMMENT '解释内容',
`suggestions` text COMMENT '建议或指导',
`sort_order` int DEFAULT 0 COMMENT '排序顺序',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`interpretation_id`),
KEY `idx_scale_id` (`scale_id`),
KEY `idx_factor_id` (`factor_id`),
KEY `idx_score_range` (`score_range_min`, `score_range_max`),
CONSTRAINT `fk_interpretation_scale` FOREIGN KEY (`scale_id`) REFERENCES `psy_scale` (`scale_id`) ON DELETE CASCADE,
CONSTRAINT `fk_interpretation_factor` FOREIGN KEY (`factor_id`) REFERENCES `psy_factor` (`factor_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='结果解释标准表';
-- ----------------------------
-- 10、测评报告表
-- ----------------------------
DROP TABLE IF EXISTS `psy_assessment_report`;
CREATE TABLE `psy_assessment_report` (
`report_id` bigint NOT NULL AUTO_INCREMENT COMMENT '报告ID',
`assessment_id` bigint NOT NULL COMMENT '测评ID',
`report_type` varchar(50) DEFAULT 'standard' COMMENT '报告类型standard标准 detailed详细 brief简要',
`report_title` varchar(200) DEFAULT NULL COMMENT '报告标题',
`report_content` longtext COMMENT '报告内容HTML格式',
`summary` text COMMENT '报告摘要',
`chart_data` text COMMENT '图表数据JSON格式',
`pdf_path` varchar(500) DEFAULT NULL COMMENT 'PDF文件路径',
`is_generated` char(1) DEFAULT '0' COMMENT '是否已生成0否 1是',
`generate_time` datetime DEFAULT NULL COMMENT '生成时间',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`report_id`),
UNIQUE KEY `uk_assessment_report` (`assessment_id`),
CONSTRAINT `fk_report_assessment` FOREIGN KEY (`assessment_id`) REFERENCES `psy_assessment` (`assessment_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='测评报告表';
-- ----------------------------
-- 11、测评模板表用于快速创建相似量表
-- ----------------------------
DROP TABLE IF EXISTS `psy_scale_template`;
CREATE TABLE `psy_scale_template` (
`template_id` bigint NOT NULL AUTO_INCREMENT COMMENT '模板ID',
`template_name` varchar(100) NOT NULL COMMENT '模板名称',
`template_description` text COMMENT '模板描述',
`scale_config` longtext COMMENT '量表配置JSON格式包含题目、选项、因子等完整配置',
`status` char(1) DEFAULT '0' COMMENT '状态0正常 1停用',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`template_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='测评模板表';
-- ----------------------------
-- 初始化数据字典(心理测评相关)
-- ----------------------------
-- 量表状态字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('量表状态', 'psy_scale_status', '0', 'admin', sysdate(), '心理量表状态列表');
INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`)
VALUES (1, '正常', '0', 'psy_scale_status', '', 'primary', 'Y', '0', 'admin', sysdate(), '正常状态'),
(2, '停用', '1', 'psy_scale_status', '', 'danger', 'N', '0', 'admin', sysdate(), '停用状态');
-- 测评状态字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('测评状态', 'psy_assessment_status', '0', 'admin', sysdate(), '心理测评状态列表');
INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`)
VALUES (1, '进行中', '0', 'psy_assessment_status', '', 'warning', 'Y', '0', 'admin', sysdate(), '进行中'),
(2, '已完成', '1', 'psy_assessment_status', '', 'success', 'N', '0', 'admin', sysdate(), '已完成'),
(3, '已作废', '2', 'psy_assessment_status', '', 'danger', 'N', '0', 'admin', sysdate(), '已作废');
-- 题目类型字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('题目类型', 'psy_item_type', '0', 'admin', sysdate(), '心理测评题目类型');
INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`)
VALUES (1, '单选题', 'single', 'psy_item_type', '', 'primary', 'Y', '0', 'admin', sysdate(), '单选题'),
(2, '多选题', 'multiple', 'psy_item_type', '', 'success', 'N', '0', 'admin', sysdate(), '多选题'),
(3, '矩阵题', 'matrix', 'psy_item_type', '', 'info', 'N', '0', 'admin', sysdate(), '矩阵题');
-- 量表类型字典
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
VALUES ('量表类型', 'psy_scale_type', '0', 'admin', sysdate(), '心理量表类型');
INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`)
VALUES (1, '人格量表', 'personality', 'psy_scale_type', '', 'primary', 'Y', '0', 'admin', sysdate(), '人格量表'),
(2, '情绪量表', 'emotion', 'psy_scale_type', '', 'success', 'N', '0', 'admin', sysdate(), '情绪量表'),
(3, '认知量表', 'cognitive', 'psy_scale_type', '', 'info', 'N', '0', 'admin', sysdate(), '认知量表'),
(4, '行为量表', 'behavior', 'psy_scale_type', '', 'warning', 'N', '0', 'admin', sysdate(), '行为量表'),
(5, '其他', 'other', 'psy_scale_type', '', 'default', 'N', '0', 'admin', sysdate(), '其他类型');
SET FOREIGN_KEY_CHECKS = 1;