-- 心理咨询系统数据库初始化脚本
CREATE DATABASE IF NOT EXISTS psychology_system DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE psychology_system;
-- 用户表
CREATE TABLE users (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
password VARCHAR(100) NOT NULL COMMENT '密码',
email VARCHAR(100) UNIQUE COMMENT '邮箱',
phone VARCHAR(20) UNIQUE COMMENT '手机号',
real_name VARCHAR(50) COMMENT '真实姓名',
avatar_url VARCHAR(255) COMMENT '头像URL',
gender TINYINT COMMENT '性别 0-未知 1-男 2-女',
birth_date DATE COMMENT '出生日期',
role ENUM('USER', 'COUNSELOR', 'ADMIN') DEFAULT 'USER' COMMENT '用户角色',
status TINYINT DEFAULT 1 COMMENT '状态 0-禁用 1-正常',
last_login_time DATETIME COMMENT '最后登录时间',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);
-- 咨询师信息表
CREATE TABLE counselors (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '咨询师ID',
user_id BIGINT NOT NULL COMMENT '关联用户ID',
title VARCHAR(100) COMMENT '职称',
experience_years INT DEFAULT 0 COMMENT '从业年限',
education TEXT COMMENT '教育背景',
specializations TEXT COMMENT '擅长领域(JSON格式存储)',
consultation_types ENUM('TEXT', 'VOICE', 'VIDEO') DEFAULT 'TEXT' COMMENT '咨询方式',
price_per_hour DECIMAL(8,2) DEFAULT 0 COMMENT '价格(元/小时)',
rating DECIMAL(3,2) DEFAULT 5.0 COMMENT '评分',
total_consultations INT DEFAULT 0 COMMENT '总咨询次数',
bio TEXT COMMENT '个人简介',
certificates TEXT COMMENT '资质证书(JSON格式)',
status ENUM('PENDING', 'APPROVED', 'REJECTED', 'SUSPENDED') DEFAULT 'PENDING' COMMENT '审核状态',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- 快速咨询申请表
CREATE TABLE consultation_applications (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '申请ID',
user_id BIGINT NOT NULL COMMENT '申请用户ID',
problem_description TEXT NOT NULL COMMENT '核心心理问题描述',
problem_duration VARCHAR(100) COMMENT '问题持续时间',
preferred_method ENUM('TEXT', 'VOICE', 'VIDEO') COMMENT '偏好咨询方式',
image_urls TEXT COMMENT '上传图片URLs(逗号分隔)',
status ENUM('PENDING', 'MATCHED', 'COMPLETED') DEFAULT 'PENDING' COMMENT '申请状态',
matched_counselor_id BIGINT COMMENT '匹配咨询师ID',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (matched_counselor_id) REFERENCES counselors(id)
);
-- 咨询预约表
CREATE TABLE consultation_bookings (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '预约ID',
user_id BIGINT NOT NULL COMMENT '用户ID',
counselor_id BIGINT NOT NULL COMMENT '咨询师ID',
consultation_type ENUM('TEXT', 'VOICE', 'VIDEO') NOT NULL COMMENT '咨询方式',
duration INT NOT NULL COMMENT '咨询时长(分钟)',
scheduled_time DATETIME NOT NULL COMMENT '预约时间',
status ENUM('PENDING', 'CONFIRMED', 'IN_PROGRESS', 'COMPLETED', 'CANCELLED') DEFAULT 'PENDING' COMMENT '预约状态',
price DECIMAL(8,2) NOT NULL COMMENT '咨询费用',
payment_status ENUM('UNPAID', 'PAID', 'REFUNDED') DEFAULT 'UNPAID' COMMENT '支付状态',
payment_id VARCHAR(100) COMMENT '支付订单ID',
notes TEXT COMMENT '备注',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (counselor_id) REFERENCES counselors(id)
);
-- 咨询记录表
CREATE TABLE consultation_records (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '记录ID',
booking_id BIGINT NOT NULL COMMENT '预约ID',
user_id BIGINT NOT NULL COMMENT '用户ID',
counselor_id BIGINT NOT NULL COMMENT '咨询师ID',
start_time DATETIME COMMENT '实际开始时间',
end_time DATETIME COMMENT '实际结束时间',
consultation_summary TEXT COMMENT '咨询摘要',
counselor_feedback TEXT COMMENT '咨询师反馈',
user_rating TINYINT COMMENT '用户评分 1-5',
counselor_rating TINYINT COMMENT '咨询师评分 1-5',
core_issues JSON COMMENT '核心困扰标签(JSON格式)',
follow_up_required BOOLEAN DEFAULT FALSE COMMENT '是否需要后续跟进',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (booking_id) REFERENCES consultation_bookings(id),
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (counselor_id) REFERENCES counselors(id)
);
-- 学习包表
CREATE TABLE learning_packages (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '学习包ID',
name VARCHAR(200) NOT NULL COMMENT '学习包名称',
description TEXT COMMENT '学习包描述',
category VARCHAR(100) COMMENT '分类',
target_issues JSON COMMENT '目标困扰类型(JSON格式)',
difficulty_level ENUM('BEGINNER', 'INTERMEDIATE', 'ADVANCED') DEFAULT 'BEGINNER' COMMENT '难度等级',
video_count INT DEFAULT 0 COMMENT '视频数量',
estimated_duration INT COMMENT '预计学习时长(分钟)',
cover_image_url VARCHAR(255) COMMENT '封面图片URL',
status ENUM('DRAFT', 'PUBLISHED', 'ARCHIVED') DEFAULT 'DRAFT' COMMENT '状态',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);
-- 视频表
CREATE TABLE videos (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '视频ID',
learning_package_id BIGINT NOT NULL COMMENT '学习包ID',
title VARCHAR(200) NOT NULL COMMENT '视频标题',
description TEXT COMMENT '视频描述',
video_url VARCHAR(500) NOT NULL COMMENT '视频URL',
duration INT COMMENT '视频时长(秒)',
order_index INT DEFAULT 0 COMMENT '排序索引',
verification_question TEXT COMMENT '验证题目',
verification_answer VARCHAR(100) COMMENT '验证答案',
view_count INT DEFAULT 0 COMMENT '观看次数',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (learning_package_id) REFERENCES learning_packages(id)
);
-- 测试题表
CREATE TABLE test_questions (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '题目ID',
learning_package_id BIGINT NOT NULL COMMENT '学习包ID',
question_text TEXT NOT NULL COMMENT '题目内容',
question_type ENUM('SINGLE_CHOICE', 'MULTIPLE_CHOICE', 'TRUE_FALSE') NOT NULL COMMENT '题目类型',
options JSON COMMENT '选项(JSON格式)',
correct_answer TEXT NOT NULL COMMENT '正确答案',
explanation TEXT COMMENT '答案解析',
score INT DEFAULT 1 COMMENT '分值',
order_index INT DEFAULT 0 COMMENT '排序索引',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (learning_package_id) REFERENCES learning_packages(id)
);
-- 用户学习记录表
CREATE TABLE user_learning_records (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '记录ID',
user_id BIGINT NOT NULL COMMENT '用户ID',
video_id BIGINT NOT NULL COMMENT '视频ID',
learning_package_id BIGINT NOT NULL COMMENT '学习包ID',
watch_progress DECIMAL(5,2) DEFAULT 0 COMMENT '观看进度(百分比)',
last_watch_position INT DEFAULT 0 COMMENT '最后观看位置(秒)',
completed BOOLEAN DEFAULT FALSE COMMENT '是否完成',
verification_passed BOOLEAN DEFAULT FALSE COMMENT '验证是否通过',
watch_count INT DEFAULT 0 COMMENT '观看次数',
total_watch_time INT DEFAULT 0 COMMENT '总观看时长(秒)',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (video_id) REFERENCES videos(id),
FOREIGN KEY (learning_package_id) REFERENCES learning_packages(id),
UNIQUE KEY uk_user_video (user_id, video_id)
);
-- 测试记录表
CREATE TABLE test_records (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '测试记录ID',
user_id BIGINT NOT NULL COMMENT '用户ID',
learning_package_id BIGINT NOT NULL COMMENT '学习包ID',
total_questions INT NOT NULL COMMENT '总题数',
correct_answers INT DEFAULT 0 COMMENT '正确题数',
total_score INT DEFAULT 0 COMMENT '总分',
obtained_score INT DEFAULT 0 COMMENT '获得分数',
duration INT COMMENT '答题时长(秒)',
answers JSON COMMENT '用户答案(JSON格式)',
status ENUM('IN_PROGRESS', 'COMPLETED') DEFAULT 'IN_PROGRESS' COMMENT '状态',
started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '开始时间',
completed_at TIMESTAMP COMMENT '完成时间',
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (learning_package_id) REFERENCES learning_packages(id)
);
-- 评估报告表
CREATE TABLE evaluation_reports (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '报告ID',
user_id BIGINT NOT NULL COMMENT '用户ID',
test_record_id BIGINT NOT NULL COMMENT '测试记录ID',
learning_package_id BIGINT NOT NULL COMMENT '学习包ID',
learning_effectiveness JSON COMMENT '学习效果(JSON格式)',
psychological_state JSON COMMENT '心理状态评估(JSON格式)',
recommendations TEXT COMMENT '建议内容',
report_data JSON COMMENT '完整报告数据(JSON格式)',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (test_record_id) REFERENCES test_records(id),
FOREIGN KEY (learning_package_id) REFERENCES learning_packages(id)
);
-- 消息表
CREATE TABLE messages (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '消息ID',
booking_id BIGINT COMMENT '关联预约ID',
sender_id BIGINT NOT NULL COMMENT '发送者ID',
receiver_id BIGINT NOT NULL COMMENT '接收者ID',
content TEXT NOT NULL COMMENT '消息内容',
message_type ENUM('TEXT', 'IMAGE', 'VOICE', 'VIDEO') DEFAULT 'TEXT' COMMENT '消息类型',
file_url VARCHAR(500) COMMENT '文件URL',
is_read BOOLEAN DEFAULT FALSE COMMENT '是否已读',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
FOREIGN KEY (booking_id) REFERENCES consultation_bookings(id),
FOREIGN KEY (sender_id) REFERENCES users(id),
FOREIGN KEY (receiver_id) REFERENCES users(id)
);
-- 系统配置表
CREATE TABLE system_configs (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '配置ID',
config_key VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键',
config_value TEXT COMMENT '配置值',
description VARCHAR(200) COMMENT '描述',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);
-- 插入初始配置数据
INSERT INTO system_configs (config_key, config_value, description) VALUES
('consultation_price_text', '100', '图文咨询价格(元/小时)'),
('consultation_price_voice', '200', '语音咨询价格(元/小时)'),
('consultation_price_video', '300', '视频咨询价格(元/小时)'),
('test_time_limit', '900', '测试题时间限制(秒)'),
('video_verification_required', 'true', '视频验证是否必填'),
('default_rating', '5', '默认评分');
-- 创建索引
CREATE INDEX idx_users_username ON users(username);
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_counselors_user_id ON counselors(user_id);
CREATE INDEX idx_counselors_status ON counselors(status);
CREATE INDEX idx_consultation_applications_user_id ON consultation_applications(user_id);
CREATE INDEX idx_consultation_bookings_user_id ON consultation_bookings(user_id);
CREATE INDEX idx_consultation_bookings_counselor_id ON consultation_bookings(counselor_id);
CREATE INDEX idx_consultation_records_user_id ON consultation_records(user_id);
CREATE INDEX idx_learning_packages_category ON learning_packages(category);
CREATE INDEX idx_videos_package_id ON videos(learning_package_id);
CREATE INDEX idx_user_learning_records_user_id ON user_learning_records(user_id);
CREATE INDEX idx_test_records_user_id ON test_records(user_id);