-- 创建实训平台教学管理相关表 -- 作者: 王志维 -- 创建时间: 2026-04-30 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- 1. 用户角色关联表 DROP TABLE IF EXISTS `sys_user_role`; CREATE TABLE `sys_user_role` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` BIGINT(20) NOT NULL COMMENT '用户ID', `role_code` VARCHAR(50) NOT NULL COMMENT '角色编码:student-学生,teacher-老师,admin-管理员', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_role` (`user_id`, `role_code`), KEY `idx_user_id` (`user_id`), KEY `idx_role_code` (`role_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表'; -- 2. 学生扩展表 DROP TABLE IF EXISTS `edu_student`; CREATE TABLE `edu_student` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` BIGINT(20) NOT NULL COMMENT '用户ID(关联sys_user)', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID', `college_id` BIGINT(20) DEFAULT NULL COMMENT '学院ID', `major_id` BIGINT(20) DEFAULT NULL COMMENT '专业ID', `grade` VARCHAR(20) DEFAULT NULL COMMENT '年级', `class_name` VARCHAR(50) DEFAULT NULL COMMENT '班级', `student_no` VARCHAR(50) DEFAULT NULL COMMENT '学号', `real_name` VARCHAR(50) DEFAULT NULL COMMENT '真实姓名', `activation_code` VARCHAR(50) DEFAULT NULL COMMENT '激活码', `binding_status` TINYINT(1) DEFAULT '0' COMMENT '绑定状态:0-未绑定,1-已绑定', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_id` (`user_id`), KEY `idx_school_id` (`school_id`), KEY `idx_college_id` (`college_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生扩展表'; -- 3. 教师扩展表 DROP TABLE IF EXISTS `edu_teacher`; CREATE TABLE `edu_teacher` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` BIGINT(20) NOT NULL COMMENT '用户ID(关联sys_user)', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID', `college_id` BIGINT(20) DEFAULT NULL COMMENT '学院ID', `real_name` VARCHAR(50) DEFAULT NULL COMMENT '真实姓名', `teacher_no` VARCHAR(50) DEFAULT NULL COMMENT '教师编号', `title` VARCHAR(50) DEFAULT NULL COMMENT '职称', `activation_code` VARCHAR(50) DEFAULT NULL COMMENT '激活码', `binding_status` TINYINT(1) DEFAULT '0' COMMENT '绑定状态:0-未绑定,1-已绑定', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_id` (`user_id`), KEY `idx_school_id` (`school_id`), KEY `idx_college_id` (`college_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教师扩展表'; -- 4. 通知表 DROP TABLE IF EXISTS `sys_notification`; CREATE TABLE `sys_notification` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `user_id` BIGINT(20) NOT NULL COMMENT '用户ID', `title` VARCHAR(100) NOT NULL COMMENT '通知标题', `content` TEXT NOT NULL COMMENT '通知内容', `type` TINYINT(1) DEFAULT '1' COMMENT '通知类型:1-系统通知,2-作业通知,3-考试通知,4-考勤通知,5-用户通知,6-课程通知', `is_read` TINYINT(1) DEFAULT '0' COMMENT '是否已读:0-未读,1-已读', `sender_id` BIGINT(20) DEFAULT NULL COMMENT '发送者用户ID', `sender_name` VARCHAR(100) DEFAULT NULL COMMENT '发送者姓名', `target_type` TINYINT(1) DEFAULT '1' COMMENT '目标类型:1-单个用户,2-角色,3-课程', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_school_id` (`school_id`), KEY `idx_user_id` (`user_id`), KEY `idx_is_read` (`is_read`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知表'; -- 5. 课程表 DROP TABLE IF EXISTS `edu_course`; CREATE TABLE `edu_course` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `name` VARCHAR(100) NOT NULL COMMENT '课程名称', `cover` VARCHAR(255) DEFAULT NULL COMMENT '课程封面', `description` TEXT DEFAULT NULL COMMENT '课程简介', `class_time` VARCHAR(100) DEFAULT NULL COMMENT '上课时间', `teaching_method` TINYINT(1) DEFAULT '1' COMMENT '授课方式:1-线上,2-线下,3-混合', `teacher_id` BIGINT(20) NOT NULL COMMENT '创建老师ID', `status` TINYINT(1) DEFAULT '1' COMMENT '课程状态:1-进行中,2-已结课', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_school_id` (`school_id`), KEY `idx_teacher_id` (`teacher_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程表'; -- 6. 课程学生关联表 DROP TABLE IF EXISTS `edu_course_student`; CREATE TABLE `edu_course_student` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `course_id` BIGINT(20) NOT NULL COMMENT '课程ID', `student_id` BIGINT(20) NOT NULL COMMENT '学生ID', `join_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '加入时间', `is_kicked` TINYINT(1) DEFAULT '0' COMMENT '是否被踢出:0-正常,1-已踢出', PRIMARY KEY (`id`), UNIQUE KEY `uk_course_student` (`course_id`, `student_id`), KEY `idx_school_id` (`school_id`), KEY `idx_course_id` (`course_id`), KEY `idx_student_id` (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程学生关联表'; -- 7. 作业表 DROP TABLE IF EXISTS `edu_homework`; CREATE TABLE `edu_homework` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `course_id` BIGINT(20) NOT NULL COMMENT '课程ID', `name` VARCHAR(100) NOT NULL COMMENT '作业名称', `requirement` TEXT DEFAULT NULL COMMENT '作业要求', `questions` TEXT NOT NULL COMMENT '题目JSON', `allow_late` TINYINT(1) DEFAULT '0' COMMENT '是否允许迟交', `start_time` DATETIME NOT NULL COMMENT '开始时间', `end_time` DATETIME NOT NULL COMMENT '截止时间', `status` TINYINT(1) DEFAULT '1' COMMENT '状态:1-草稿,2-已发布', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_school_id` (`school_id`), KEY `idx_course_id` (`course_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='作业表'; -- 8. 作业提交表 DROP TABLE IF EXISTS `edu_homework_submit`; CREATE TABLE `edu_homework_submit` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `homework_id` BIGINT(20) NOT NULL COMMENT '作业ID', `student_id` BIGINT(20) NOT NULL COMMENT '学生ID', `answers` TEXT NOT NULL COMMENT '答案JSON', `submit_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '提交时间', `is_late` TINYINT(1) DEFAULT '0' COMMENT '是否迟交', `status` TINYINT(1) DEFAULT '1' COMMENT '状态:1-待批改,2-已批改,3-已退回', `score` DECIMAL(5,2) DEFAULT NULL COMMENT '分数', `comment` TEXT DEFAULT NULL COMMENT '评语', `is_excellent` TINYINT(1) DEFAULT '0' COMMENT '是否优秀', `redo_end_time` DATETIME DEFAULT NULL COMMENT '重做截止时间', `redo_count` INT(11) DEFAULT '0' COMMENT '重做次数', PRIMARY KEY (`id`), KEY `idx_school_id` (`school_id`), KEY `idx_homework_id` (`homework_id`), KEY `idx_student_id` (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='作业提交表'; -- 9. 考试表 DROP TABLE IF EXISTS `edu_exam`; CREATE TABLE `edu_exam` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `course_id` BIGINT(20) NOT NULL COMMENT '课程ID', `name` VARCHAR(100) NOT NULL COMMENT '考试名称', `requirement` TEXT DEFAULT NULL COMMENT '考试要求', `questions` TEXT NOT NULL COMMENT '考卷JSON', `duration` INT(11) NOT NULL COMMENT '考试时长(分钟)', `start_time` DATETIME NOT NULL COMMENT '开始时间', `end_time` DATETIME NOT NULL COMMENT '截止时间', `status` TINYINT(1) DEFAULT '1' COMMENT '状态:1-草稿,2-已发布,3-已结束', `is_makeup` TINYINT(1) DEFAULT '0' COMMENT '是否补考', `parent_exam_id` BIGINT(20) DEFAULT NULL COMMENT '关联主考ID', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_school_id` (`school_id`), KEY `idx_course_id` (`course_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试表'; -- 10. 考试答卷表 DROP TABLE IF EXISTS `edu_exam_paper`; CREATE TABLE `edu_exam_paper` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `exam_id` BIGINT(20) NOT NULL COMMENT '考试ID', `student_id` BIGINT(20) NOT NULL COMMENT '学生ID', `answers` TEXT NOT NULL COMMENT '答案JSON', `submit_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '提交时间', `status` TINYINT(1) DEFAULT '1' COMMENT '状态:1-待阅卷,2-已阅卷', `score` DECIMAL(5,2) DEFAULT NULL COMMENT '分数', `comment` TEXT DEFAULT NULL COMMENT '评语', PRIMARY KEY (`id`), UNIQUE KEY `uk_exam_student` (`exam_id`, `student_id`), KEY `idx_school_id` (`school_id`), KEY `idx_exam_id` (`exam_id`), KEY `idx_student_id` (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试答卷表'; -- 11. 考勤表 DROP TABLE IF EXISTS `edu_attendance`; CREATE TABLE `edu_attendance` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `course_id` BIGINT(20) NOT NULL COMMENT '课程ID', `name` VARCHAR(100) DEFAULT NULL COMMENT '签到名称(按时间自动生成)', `start_time` DATETIME NOT NULL COMMENT '开始时间', `duration` INT(11) DEFAULT '15' COMMENT '签到时长(分钟)', `type` TINYINT(1) DEFAULT '1' COMMENT '签到类型:1-二维码签到,2-手动点名', `status` TINYINT(1) DEFAULT '1' COMMENT '状态:1-进行中,2-已结束', `qr_code` VARCHAR(255) DEFAULT NULL COMMENT '二维码内容', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_school_id` (`school_id`), KEY `idx_course_id` (`course_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考勤表'; -- 12. 考勤记录表 DROP TABLE IF EXISTS `edu_attendance_record`; CREATE TABLE `edu_attendance_record` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `attendance_id` BIGINT(20) NOT NULL COMMENT '考勤ID', `student_id` BIGINT(20) NOT NULL COMMENT '学生ID', `status` TINYINT(1) DEFAULT '1' COMMENT '考勤状态:1-出勤,2-迟到,3-缺勤,4-请假', `sign_time` DATETIME DEFAULT NULL COMMENT '签到时间', `remark` VARCHAR(255) DEFAULT NULL COMMENT '备注(手动点名时填写)', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_attendance_student` (`attendance_id`, `student_id`), KEY `idx_school_id` (`school_id`), KEY `idx_attendance_id` (`attendance_id`), KEY `idx_student_id` (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考勤记录表'; -- 13. 优秀作品表 DROP TABLE IF EXISTS `edu_excellent_work`; CREATE TABLE `edu_excellent_work` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `work_type` TINYINT(1) NOT NULL COMMENT '作品类型:1-作业,2-考试', `work_id` BIGINT(20) NOT NULL COMMENT '关联作业/考试ID', `submit_id` BIGINT(20) NOT NULL COMMENT '关联提交ID', `student_id` BIGINT(20) NOT NULL COMMENT '学生ID', `score` DECIMAL(5,2) DEFAULT NULL COMMENT '分数', `comment` TEXT DEFAULT NULL COMMENT '评语', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '标记时间', PRIMARY KEY (`id`), KEY `idx_school_id` (`school_id`), KEY `idx_work_type_work_id` (`work_type`, `work_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优秀作品表'; -- 14. 作品点赞表 DROP TABLE IF EXISTS `edu_work_like`; CREATE TABLE `edu_work_like` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `work_id` BIGINT(20) NOT NULL COMMENT '优秀作品ID', `user_id` BIGINT(20) NOT NULL COMMENT '点赞用户ID', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '点赞时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_work_user` (`work_id`, `user_id`), KEY `idx_school_id` (`school_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='作品点赞表'; SET FOREIGN_KEY_CHECKS = 1;