ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

云帆培训考试系统数据库深度解析:题库、试卷、考试三大核心表结构设计

云帆培训考试系统数据库深度解析:题库、试卷、考试三大核心表结构设计 云帆培训考试系统数据库深度解析题库、试卷、考试三大核心表结构设计【免费下载链接】yftrain学习系统-在线考试系统 企业培训内训系统-企教培系统平台软件项目地址: https://gitcode.com/gh_mirrors/yf/yftrain云帆培训考试系统yftrain是一款基于 SpringBoot Shiro Vue MySQL 的开源在线考试系统 / 企业培训内训平台。这篇文章带你深入它的数据库脚本拆解支撑「建题库 → 组卷考试 → 答题记录 → 错题训练」全流程的三大核心模块——题库表、考试表、试卷表的结构设计帮你看懂一套完整在线考试系统的建表思路 一、全局速览12 张 el_ 业务表如何分工打开初始化脚本 docs/安装资源/数据库脚本.sql你会发现除系统表sys_user、sys_role、sys_depart和 Quartz 定时任务表QRTZ_*外核心业务全部由 12 张el_前缀的表承担模块核心表职责 题库el_repo/el_qu/el_qu_answer/el_qu_repo题库、试题、选项、题目-题库关联 考试el_exam/el_exam_repo/el_exam_depart考试主表、组卷规则、部门限制 试卷el_paper/el_paper_qu/el_paper_qu_answer个人试卷快照、题目作答、选项作答 学员el_user_book/el_user_exam错题本、重考与最高分记录整体是一条清晰的链路题库出题 → 考试定规则 → 每人一张试卷 → 结果回流错题本。下面逐个模块拆解。二、题库表结构设计一道题被拆成三份存储2.1 为什么题目、选项、题库要分开看el_qu试题主表见 数据库脚本.sql L188-L200的字段设计qu_type题目类型对应枚举 QuType.java ——1 单选题、2 多选题、3 判断题level难度1 普通、2 较难为按难度抽题组卷留好口子content/image/analysis题干、题目图片、整题解析而每个选项单独一行存入el_qu_answer试题答案选项表用is_right标记是否正确。这种设计非常巧妙多选题天然支持多个is_right1的选项判断题固定生成正确/错误两个选项逻辑与选择题完全统一选项还可带image图片选项和analysis选项解析扩展性极强。2.2 一题多库的关联表el_qu_repoel_qu_repo试题题库关联让同一道题可以归属多个题库多对多并冗余了qu_type与sort字段——抽题组卷时按sort排序、按题型筛选无需回查主表。配套实体见 QuRepoDTO.java 与 QuRepo.java。批量导入后题库在数据库中的形态就像下面这样一列一行、按序号排列三、考试表结构设计el_exam 主表 组卷规则表3.1 考试主表el_exam考试主表定义考什么、考多久、多少分及格见 数据库脚本.sql L24-L40字段说明open_type开放范围1 公开 / 2 部门 / 3 定员state状态机0 考试中 / 1 待阅卷 / 2 已完成 / 3 已结束见 ExamState.javatotal_score/total_time/qualify_score总分、总时长分钟、及格分数start_time/end_time考试开放时间段3.2 组卷规则表el_exam_repo随机组卷的核心 这是题库组卷指定题库、分数、数量功能的灵魂所在。一行记录 一个题库在某场考试中的抽题配额radio_count/radio_score抽 2 道单选题、每题 10 分multi_count/multi_score、judge_count/judge_score多选题、判断题同理saq_count/saq_score简答题配额人工阅卷题脚本中的演示数据正是2 单选 6 多选 2 判断 100 分的一套真实配置且(exam_id, repo_id)建了唯一索引防止重复配置。配合el_exam_depart考试-部门关联表指定部门才能看到考试的定员逻辑也就齐活了。四、试卷表结构设计一人一卷的快照思想这是整个数据库最精彩的部分。学员一旦开始考试系统不会直接读题库而是把随机抽到的题复印成一份专属试卷涉及三张表表粒度关键设计el_paper一场考试一份试卷冗余总分/及格分、user_score用户得分、obj_score/subj_score客观主观分、limit_time截止时间el_paper_qu试卷中每道题answered是否已答、answer主观题答案文本、score单题分值、actual_score实际得分、is_right是否答对el_paper_qu_answer每个选项一行checked是否被勾选、abc选项标签A/B/C…完整还原多选作答为什么用快照题目日后被修改历史试卷不受影响每人题目顺序随机打乱直接杜绝抄同桌阅卷时只需对比快照即可无需关心题库现状。组卷入口在 PaperServiceImpl.java 的createPaper方法L113-L156先校验没有正在进行中的试卷再按el_exam_repo规则从题库随机抽题生成el_paper三表数据。4.1 到点强制交卷Quartz 定时任务加持更细节的是创建试卷时会注册一个一次性定时任务BreakExamJob在limit_time到期时自动强制交卷对应 BreakExamJob.java脚本中成组的QRTZ_*表就是 Quartz 的调度基础设施。试卷状态机0 考试中 → 1 待阅卷 → 2 已完成 / 3 弃考定义在 PaperState.java含简答题的试卷自动进入待阅卷客观题部分即时得分。五、考试闭环错题本与重考机制考试结束后的数据回流由两张轻量表完成el_user_book错题本记录wrong_count错误次数、update_time最近错误时间、sort错题序号并冗余title题目标题快照——支撑错题训练功能反复巩固el_user_exam考试记录按(user_id, exam_id)唯一索引聚合记录try_count考试次数、max_score最高分、passed是否通过多次重考只保留最优成绩。六、三个值得抄作业的表设计亮点 ✅模板与实例分离el_qu_repo题-库、el_paper_qu题-卷都是复制型中间表题库改题不影响已生成的试卷是快照式设计的标准示范字符串雪花 ID主键统一varchar(64) 19 位雪花算法 ID如1587622642263625729避免自增主键暴露业务量也为分库分表留了余地状态字段 枚举类配套el_exam.state、el_paper.state等所有状态列都在 Java 侧有对应的ExamState/PaperState接口常量约束杜绝魔法数字。七、如何上手研究这套数据库设计将 数据库脚本.sql 导入本地 MySQL5.7即可获得含演示题目的完整库按模块对照实体类阅读题库 Qu.java、考试 Exam.java、试卷 Paper.java重点通读 PaperServiceImpl.java它把「组卷 → 答题 → 判分 → 错题入库」整条链路的表写入时机串得清清楚楚。吃透这 12 张表的分工与关系你也就掌握了在线考试系统数据库设计的通用范式题库是资产考试是规则试卷是快照错题本是成长。【免费下载链接】yftrain学习系统-在线考试系统 企业培训内训系统-企教培系统平台软件项目地址: https://gitcode.com/gh_mirrors/yf/yftrain创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表