-- ------------------------------------------------------------ -- 学生选课管理系统 - 业务数据结构初始化脚本 -- 依赖基础库:RuoYi-Vue 3.9.0(ry_20250522.sql) -- ------------------------------------------------------------ -- 1. 学期信息表 DROP TABLE IF EXISTS edu_semester; CREATE TABLE edu_semester ( semester_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '学期ID', semester_code VARCHAR(20) NOT NULL COMMENT '学期编码,例如 2024-2025-1', semester_name VARCHAR(50) NOT NULL COMMENT '学期名称', start_date DATE NOT NULL COMMENT '教学开始日期', end_date DATE NOT NULL COMMENT '教学结束日期', enroll_start_time DATETIME NOT NULL COMMENT '统一选课开始时间', enroll_end_time DATETIME NOT NULL COMMENT '统一选课结束时间', status CHAR(1) DEFAULT '0' COMMENT '状态(0草稿 1进行中 2已归档)', remark VARCHAR(255) DEFAULT NULL COMMENT '备注', create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', create_time DATETIME COMMENT '创建时间', update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', update_time DATETIME COMMENT '更新时间', PRIMARY KEY (semester_id), UNIQUE KEY uk_semester_code (semester_code) ) ENGINE=InnoDB COMMENT='学期信息表'; -- 2. 学生档案表 DROP TABLE IF EXISTS edu_student; CREATE TABLE edu_student ( student_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '学生ID', user_id BIGINT(20) NOT NULL COMMENT '关联系统用户ID', student_no VARCHAR(30) NOT NULL COMMENT '学号', real_name VARCHAR(50) NOT NULL COMMENT '姓名', gender CHAR(1) DEFAULT '0' COMMENT '性别(0男 1女 2未知)', dept_id BIGINT(20) DEFAULT NULL COMMENT '院系部门ID(关联sys_dept)', major VARCHAR(100) DEFAULT NULL COMMENT '专业名称', grade VARCHAR(20) DEFAULT NULL COMMENT '年级,例如2022', class_name VARCHAR(50) DEFAULT NULL COMMENT '行政班', enroll_year VARCHAR(10) DEFAULT NULL COMMENT '入学年份', contact_phone VARCHAR(20) DEFAULT NULL COMMENT '联系方式', contact_email VARCHAR(50) DEFAULT NULL COMMENT '联系邮箱', status CHAR(1) DEFAULT '0' COMMENT '学籍状态(0在籍 1休学 2退学)', remark VARCHAR(255) DEFAULT NULL COMMENT '备注', create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', create_time DATETIME COMMENT '创建时间', update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', update_time DATETIME COMMENT '更新时间', PRIMARY KEY (student_id), UNIQUE KEY uk_student_no (student_no), UNIQUE KEY uk_student_user (user_id) ) ENGINE=InnoDB COMMENT='学生档案表'; -- 3. 教师档案表 DROP TABLE IF EXISTS edu_teacher; CREATE TABLE edu_teacher ( teacher_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '教师ID', user_id BIGINT(20) NOT NULL COMMENT '关联系统用户ID', teacher_no VARCHAR(30) NOT NULL COMMENT '工号', real_name VARCHAR(50) NOT NULL COMMENT '姓名', gender CHAR(1) DEFAULT '0' COMMENT '性别(0男 1女 2未知)', dept_id BIGINT(20) DEFAULT NULL COMMENT '所属院系(关联sys_dept)', title VARCHAR(50) DEFAULT NULL COMMENT '职称', contact_phone VARCHAR(20) DEFAULT NULL COMMENT '联系方式', contact_email VARCHAR(50) DEFAULT NULL COMMENT '联系邮箱', entry_date DATE DEFAULT NULL COMMENT '入职日期', status CHAR(1) DEFAULT '0' COMMENT '任职状态(0在职 1离职 2停职)', remark VARCHAR(255) DEFAULT NULL COMMENT '备注', create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', create_time DATETIME COMMENT '创建时间', update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', update_time DATETIME COMMENT '更新时间', PRIMARY KEY (teacher_id), UNIQUE KEY uk_teacher_no (teacher_no), UNIQUE KEY uk_teacher_user (user_id) ) ENGINE=InnoDB COMMENT='教师档案表'; -- 4. 教室信息表 DROP TABLE IF EXISTS edu_classroom; CREATE TABLE edu_classroom ( classroom_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '教室ID', building VARCHAR(100) DEFAULT '' COMMENT '楼宇', room_no VARCHAR(30) NOT NULL COMMENT '教室编号', capacity INT(6) DEFAULT 0 COMMENT '容量', room_type VARCHAR(20) DEFAULT 'theory' COMMENT '教室类型(theory理论 lab实验 multi多媒体)', status CHAR(1) DEFAULT '0' COMMENT '状态(0可用 1停用)', remark VARCHAR(255) DEFAULT NULL COMMENT '备注', create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', create_time DATETIME COMMENT '创建时间', update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', update_time DATETIME COMMENT '更新时间', PRIMARY KEY (classroom_id), UNIQUE KEY uk_room (building, room_no) ) ENGINE=InnoDB COMMENT='教室信息表'; -- 5. 课程信息表 DROP TABLE IF EXISTS edu_course; CREATE TABLE edu_course ( course_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '课程ID', course_code VARCHAR(30) NOT NULL COMMENT '课程编码', course_name VARCHAR(100) NOT NULL COMMENT '课程名称', course_type VARCHAR(20) DEFAULT 'elective' COMMENT '课程类型(字典:edu_course_type)', credit DECIMAL(4,1) DEFAULT 0 COMMENT '学分', total_hours INT(4) DEFAULT 0 COMMENT '总学时', theory_hours INT(4) DEFAULT 0 COMMENT '理论学时', practice_hours INT(4) DEFAULT 0 COMMENT '实验学时', dept_id BIGINT(20) DEFAULT NULL COMMENT '开课院系(关联sys_dept)', status CHAR(1) DEFAULT '0' COMMENT '状态(0启用 1停用)', description VARCHAR(500) DEFAULT NULL COMMENT '课程简介', create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', create_time DATETIME COMMENT '创建时间', update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', update_time DATETIME COMMENT '更新时间', PRIMARY KEY (course_id), UNIQUE KEY uk_course_code (course_code) ) ENGINE=InnoDB COMMENT='课程信息表'; -- 6. 开课计划表 DROP TABLE IF EXISTS edu_course_class; CREATE TABLE edu_course_class ( class_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '开课ID', course_id BIGINT(20) NOT NULL COMMENT '课程ID', semester_id BIGINT(20) NOT NULL COMMENT '学期ID', teacher_id BIGINT(20) NOT NULL COMMENT '授课教师ID', class_code VARCHAR(30) NOT NULL COMMENT '班级编号', capacity INT(4) NOT NULL DEFAULT 50 COMMENT '容量上限', enroll_limit INT(4) DEFAULT 0 COMMENT '选课人数上限,0表示同容量', enrolled_count INT(4) DEFAULT 0 COMMENT '已选人数', classroom_id BIGINT(20) DEFAULT NULL COMMENT '授课教室', enroll_start_time DATETIME DEFAULT NULL COMMENT '选课开始时间', enroll_end_time DATETIME DEFAULT NULL COMMENT '选课结束时间', teach_start_date DATE DEFAULT NULL COMMENT '开课日期', teach_end_date DATE DEFAULT NULL COMMENT '结课日期', weekday VARCHAR(20) DEFAULT NULL COMMENT '上课星期描述,例如 周一', time_slot VARCHAR(50) DEFAULT NULL COMMENT '上课节次描述,例如 第1-2节', status CHAR(1) DEFAULT '0' COMMENT '状态(0待发布 1可选课 2已满额 3已结课)', remark VARCHAR(255) DEFAULT NULL COMMENT '备注', create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', create_time DATETIME COMMENT '创建时间', update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', update_time DATETIME COMMENT '更新时间', PRIMARY KEY (class_id), UNIQUE KEY uk_class_code (class_code), KEY idx_class_course (course_id), KEY idx_class_semester (semester_id), KEY idx_class_teacher (teacher_id) ) ENGINE=InnoDB COMMENT='开课计划表'; -- 7. 节次安排表 DROP TABLE IF EXISTS edu_course_schedule; CREATE TABLE edu_course_schedule ( schedule_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '节次ID', class_id BIGINT(20) NOT NULL COMMENT '开课ID', weekday TINYINT(2) NOT NULL COMMENT '周几(1-7)', period_start TINYINT(2) NOT NULL COMMENT '开始节次', period_end TINYINT(2) NOT NULL COMMENT '结束节次', weeks VARCHAR(100) DEFAULT NULL COMMENT '上课周次,例如 1-16', classroom_id BIGINT(20) DEFAULT NULL COMMENT '教室ID', remark VARCHAR(255) DEFAULT NULL COMMENT '备注', create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', create_time DATETIME COMMENT '创建时间', update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', update_time DATETIME COMMENT '更新时间', PRIMARY KEY (schedule_id), KEY idx_schedule_class (class_id) ) ENGINE=InnoDB COMMENT='开课节次安排表'; -- 8. 选课记录表 DROP TABLE IF EXISTS edu_enrollment; CREATE TABLE edu_enrollment ( enrollment_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '选课记录ID', class_id BIGINT(20) NOT NULL COMMENT '开课ID', student_id BIGINT(20) NOT NULL COMMENT '学生ID', select_time DATETIME NOT NULL COMMENT '选课时间', status CHAR(1) DEFAULT '0' COMMENT '记录状态(0已选 1已退)', drop_time DATETIME DEFAULT NULL COMMENT '退课时间', score DECIMAL(5,2) DEFAULT NULL COMMENT '课程成绩', eval_status CHAR(1) DEFAULT '0' COMMENT '评价状态(0未评 1已评)', remark VARCHAR(255) DEFAULT NULL COMMENT '备注', create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', create_time DATETIME COMMENT '创建时间', update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', update_time DATETIME COMMENT '更新时间', PRIMARY KEY (enrollment_id), UNIQUE KEY uk_enrollment (class_id, student_id), KEY idx_enroll_student (student_id), KEY idx_enroll_status (status) ) ENGINE=InnoDB COMMENT='选课记录表'; -- 9. 字典类型扩展 INSERT INTO sys_dict_type (dict_id, dict_name, dict_type, status, create_by, create_time, remark) VALUES (11, '学期状态', 'edu_semester_status', '0', 'admin', SYSDATE(), '学期状态字典'), (12, '课程类型', 'edu_course_type', '0', 'admin', SYSDATE(), '课程类型字典'), (13, '开课状态', 'edu_course_class_status', '0', 'admin', SYSDATE(), '开课计划状态字典'), (14, '学籍状态', 'edu_student_status', '0', 'admin', SYSDATE(), '学生状态字典'), (15, '教师状态', 'edu_teacher_status', '0', 'admin', SYSDATE(), '教师状态字典'), (16, '选课记录状态', 'edu_enrollment_status', '0', 'admin', SYSDATE(), '选课记录状态字典'), (17, '教室类型', 'edu_classroom_type', '0', 'admin', SYSDATE(), '教室类型字典'); -- 10. 字典数据扩展 INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, is_default, status, create_by, create_time, remark) VALUES (30, 1, '草稿', '0', 'edu_semester_status', 'Y', '0', 'admin', SYSDATE(), '未发布'), (31, 2, '进行中', '1', 'edu_semester_status', 'N', '0', 'admin', SYSDATE(), '当前学期'), (32, 3, '已归档', '2', 'edu_semester_status', 'N', '0', 'admin', SYSDATE(), '历史学期'), (33, 1, '必修课', 'required', 'edu_course_type', 'Y', '0', 'admin', SYSDATE(), ''), (34, 2, '选修课', 'elective', 'edu_course_type', 'N', '0', 'admin', SYSDATE(), ''), (35, 3, '公选课', 'public', 'edu_course_type', 'N', '0', 'admin', SYSDATE(), ''), (36, 1, '待发布', '0', 'edu_course_class_status', 'Y', '0', 'admin', SYSDATE(), ''), (37, 2, '可选课', '1', 'edu_course_class_status', 'N', '0', 'admin', SYSDATE(), ''), (38, 3, '已满额', '2', 'edu_course_class_status', 'N', '0', 'admin', SYSDATE(), ''), (39, 4, '已结课', '3', 'edu_course_class_status', 'N', '0', 'admin', SYSDATE(), ''), (40, 1, '在籍', '0', 'edu_student_status', 'Y', '0', 'admin', SYSDATE(), ''), (41, 2, '休学', '1', 'edu_student_status', 'N', '0', 'admin', SYSDATE(), ''), (42, 3, '退学', '2', 'edu_student_status', 'N', '0', 'admin', SYSDATE(), ''), (43, 1, '在职', '0', 'edu_teacher_status', 'Y', '0', 'admin', SYSDATE(), ''), (44, 2, '离职', '1', 'edu_teacher_status', 'N', '0', 'admin', SYSDATE(), ''), (45, 3, '停职', '2', 'edu_teacher_status', 'N', '0', 'admin', SYSDATE(), ''), (46, 1, '已选', '0', 'edu_enrollment_status', 'Y', '0', 'admin', SYSDATE(), ''), (47, 2, '已退', '1', 'edu_enrollment_status', 'N', '0', 'admin', SYSDATE(), ''), (48, 1, '理论课', 'theory', 'edu_classroom_type', 'Y', '0', 'admin', SYSDATE(), ''), (49, 2, '实验室', 'lab', 'edu_classroom_type', 'N', '0', 'admin', SYSDATE(), ''), (50, 3, '多媒体', 'multi', 'edu_classroom_type', 'N', '0', 'admin', SYSDATE(), '');