107 lines
4.8 KiB
SQL
107 lines
4.8 KiB
SQL
-- ===========================================
|
||
-- 班级操行分管理系统 - v1.0 初始数据库结构
|
||
-- 字符集: utf8mb4
|
||
--
|
||
-- 说明: 系统初始版本,创建核心表结构。
|
||
-- 包含: semesters, subjects, students, users,
|
||
-- admin_roles, conduct_records, attendance_records
|
||
--
|
||
-- 兼容性: 使用 IF NOT EXISTS 实现幂等,phpMyAdmin 可直接执行
|
||
-- ===========================================
|
||
|
||
-- 学期表
|
||
CREATE TABLE IF NOT EXISTS `semesters` (
|
||
`semester_id` INT PRIMARY KEY AUTO_INCREMENT,
|
||
`semester_name` VARCHAR(100) NOT NULL COMMENT '学期名称',
|
||
`start_date` DATE DEFAULT NULL COMMENT '学期开始日期',
|
||
`end_date` DATE DEFAULT NULL COMMENT '学期结束日期',
|
||
`is_active` TINYINT DEFAULT 0 COMMENT '是否为当前活跃学期',
|
||
`is_archived` TINYINT DEFAULT 0 COMMENT '是否已归档',
|
||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- 科目表
|
||
CREATE TABLE IF NOT EXISTS `subjects` (
|
||
`subject_id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '科目ID',
|
||
`subject_name` VARCHAR(50) NOT NULL COMMENT '科目名称',
|
||
`is_active` TINYINT DEFAULT 1 COMMENT '是否启用',
|
||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
UNIQUE KEY `uk_subject_name` (`subject_name`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- 学生表
|
||
CREATE TABLE IF NOT EXISTS `students` (
|
||
`student_id` INT PRIMARY KEY AUTO_INCREMENT,
|
||
`student_no` VARCHAR(20) NOT NULL UNIQUE,
|
||
`name` VARCHAR(50) NOT NULL,
|
||
`total_points` INT DEFAULT 60,
|
||
`parent_phone` VARCHAR(20) DEFAULT NULL,
|
||
`status` TINYINT DEFAULT 1,
|
||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- 用户表
|
||
CREATE TABLE IF NOT EXISTS `users` (
|
||
`user_id` INT PRIMARY KEY AUTO_INCREMENT,
|
||
`username` VARCHAR(50) NOT NULL UNIQUE,
|
||
`password_hash` VARCHAR(64) NOT NULL,
|
||
`real_name` VARCHAR(50) NOT NULL,
|
||
`user_type` ENUM('student', 'parent', 'admin') NOT NULL,
|
||
`student_id` INT DEFAULT NULL,
|
||
`status` TINYINT DEFAULT 1,
|
||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (`student_id`) REFERENCES `students`(`student_id`) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- 管理员角色表
|
||
CREATE TABLE IF NOT EXISTS `admin_roles` (
|
||
`admin_role_id` INT PRIMARY KEY AUTO_INCREMENT,
|
||
`user_id` INT NOT NULL,
|
||
`role_type` ENUM('班主任', '班长', '学习委员', '考勤委员', '劳动委员', '志愿委员') NOT NULL,
|
||
`subject_id` INT DEFAULT NULL,
|
||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`) ON DELETE CASCADE,
|
||
FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`subject_id`) ON DELETE CASCADE,
|
||
UNIQUE KEY `uk_user_subject` (`user_id`, `subject_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- 操行分记录表
|
||
CREATE TABLE IF NOT EXISTS `conduct_records` (
|
||
`record_id` BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
`student_id` INT NOT NULL,
|
||
`points_change` INT NOT NULL,
|
||
`reason` VARCHAR(255) NOT NULL,
|
||
`recorder_id` INT NOT NULL,
|
||
`recorder_name` VARCHAR(50) DEFAULT NULL,
|
||
`related_id` INT DEFAULT NULL,
|
||
`is_revoked` TINYINT DEFAULT 0,
|
||
`revoked_by` INT DEFAULT NULL,
|
||
`revoked_at` DATETIME DEFAULT NULL,
|
||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (`student_id`) REFERENCES `students`(`student_id`) ON DELETE CASCADE,
|
||
FOREIGN KEY (`recorder_id`) REFERENCES `users`(`user_id`),
|
||
FOREIGN KEY (`revoked_by`) REFERENCES `users`(`user_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- 考勤记录表
|
||
CREATE TABLE IF NOT EXISTS `attendance_records` (
|
||
`attendance_id` INT PRIMARY KEY AUTO_INCREMENT,
|
||
`student_id` INT NOT NULL,
|
||
`date` DATE NOT NULL,
|
||
`slot` ENUM('morning', 'afternoon', 'evening') DEFAULT 'morning' COMMENT '考勤时段',
|
||
`status` ENUM('present', 'absent', 'late', 'leave') DEFAULT 'present',
|
||
`reason` VARCHAR(255) DEFAULT NULL,
|
||
`recorder_id` INT NOT NULL,
|
||
`deduction_applied` TINYINT DEFAULT 0,
|
||
`deduction_record_id` BIGINT DEFAULT NULL,
|
||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (`student_id`) REFERENCES `students`(`student_id`) ON DELETE CASCADE,
|
||
FOREIGN KEY (`recorder_id`) REFERENCES `users`(`user_id`),
|
||
FOREIGN KEY (`deduction_record_id`) REFERENCES `conduct_records`(`record_id`) ON DELETE SET NULL,
|
||
UNIQUE KEY `uk_student_date_slot` (`student_id`, `date`, `slot`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- 插入初始科目
|
||
INSERT IGNORE INTO `subjects` (`subject_name`) VALUES ('语文'), ('数学'), ('英语');
|