在线考试系统全流程开发实践
引言
构建一个功能完善的在线考试系统并非易事,涉及复杂的业务逻辑、事务一致性及实时交互。本文通过实战案例,展示从需求分析到代码落地的完整技术路径,重点解析核心模块的实现细节。
数据库设计
合理的表结构是系统的基石。本系统设计了用户、题库、试卷、考试记录等核心表,包含完整的字段约束和索引优化。
-- 用户表设计
CREATE TABLE `t_user` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户 ID',
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(100) NOT NULL COMMENT '密码 (MD5 加密)',
`real_name` varchar(50) NOT NULL COMMENT '真实姓名',
`id_card` varchar(20) DEFAULT NULL COMMENT '身份证号',
`phone` varchar(20) DEFAULT NULL COMMENT '手机号',
`role_id` bigint NOT NULL COMMENT '角色 ID(1:管理员,2:教师,3:学生)',
`status` tinyint NOT NULL DEFAULT '1' COMMENT '状态 (0:禁用,1:正常)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
(`id`),
KEY `idx_username` (`username`),
KEY `idx_role_id` (`role_id`),
KEY `idx_status` (`status`)
) ENGINEInnoDB CHARSETutf8mb4 COMMENT;
`t_question` (
`id` AUTO_INCREMENT COMMENT ,
`question_type_id` COMMENT ,
`subject_id` COMMENT ,
`content` text COMMENT ,
`option_a` () COMMENT ,
`option_b` () COMMENT ,
`option_c` () COMMENT ,
`option_d` () COMMENT ,
`answer` () COMMENT ,
`score` COMMENT ,
`difficulty` tinyint COMMENT ,
`analysis` text COMMENT ,
`create_by` COMMENT ,
`create_time` datetime ,
`update_time` datetime ,
(`id`),
KEY `idx_question_type` (`question_type_id`),
KEY `idx_subject` (`subject_id`),
KEY `idx_difficulty` (`difficulty`)
) ENGINEInnoDB CHARSETutf8mb4 COMMENT;
`t_exam_record` (
`id` AUTO_INCREMENT COMMENT ,
`paper_id` COMMENT ,
`user_id` COMMENT ,
`start_time` datetime COMMENT ,
`end_time` datetime COMMENT ,
`status` tinyint COMMENT ,
`score` (,) COMMENT ,
`cheat_count` COMMENT ,
`ip_address` () COMMENT ,
(`id`),
KEY `idx_user_paper` (`user_id`,`paper_id`,`status`) COMMENT ,
KEY `idx_status` (`status`),
KEY `idx_end_time` (`end_time`)
) ENGINEInnoDB CHARSETutf8mb4 COMMENT;


