sxwz2.0/db/create_edu_tables.sql

266 lines
13 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.

-- 创建实训平台教学管理相关表
-- 作者: 王志维
-- 创建时间: 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 NOT NULL COMMENT '主键ID',
`school_id` BIGINT DEFAULT NULL COMMENT '学校ID',
`user_id` BIGINT DEFAULT NULL COMMENT '接收用户ID',
`title` VARCHAR(255) DEFAULT NULL COMMENT '通知标题',
`content` TEXT COMMENT '通知内容',
`type` TINYINT DEFAULT NULL COMMENT '通知类型',
`is_read` TINYINT DEFAULT '0' COMMENT '是否已读 0未读 1已读',
`sender_id` BIGINT DEFAULT NULL COMMENT '发送人ID',
`sender_name` VARCHAR(64) DEFAULT NULL COMMENT '发送人姓名',
`target_type` TINYINT DEFAULT NULL COMMENT '目标类型',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_user_id` (`user_id`),
KEY `idx_school_id` (`school_id`)
) 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;