xinli/sql/psy_assessment_system.sql
xiao@123.123 fdf83af45a xiao
2025-11-03 18:21:32 +08:00

322 lines
18 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.

-- ========================================
-- 心理测评系统数据库表结构设计
-- 基于若依(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;