博主介绍:✌ 专注于VUE,小程序,安卓,Java,python,物联网专业, 从事毕业指导,项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题,我会尽力帮助你。
一、研究目的
在全球教育数字化浪潮中,传统纸质考试模式已难以满足大规模在线学习与评估的需求,尤其在教学资源分布不均、考生数量剧增以及对评卷公平性与效率的高标准要求下,亟需一种可扩展、高效且易维护的在线考试与自动阅卷解决方案。 本研究旨在构建基于SpringBoot框架的后端服务与Vue技术栈的前端交互系统,以实现考试题目管理、试卷生成、在线答题、即时提交以及自动化阅卷等核心功能,并通过RESTful API实现前后端解耦,提升系统可维护性与可扩展性。 为满足多样化考试类型的需求,本系统将支持选择题、判断题、填空题及简答题等多种题型,并在自动阅卷模块中引入文本相似度匹配与规则引擎技术,以兼顾客观分数与主观评价的准确性。 在数据层面,本研究将采用MySQL或PostgreSQL数据库进行事务管理,利用Redis缓存热点数据以降低响应延迟,并通过JWT或OAuth2实现用户身份验证与权限控制,确保系统安全性与合规性。 此外,为提升评卷效率与透明度,系统将提供实时统计分析仪表盘,展示答题时长、正确率、分布曲线等指标,为教师与管理者提供决策支持。 通过上述技术方案,本研究期望实现以下目标:一是构建高并发、高可用的在线考试平台,满足千人以上并发考生的访问需求;二是实现自动阅卷率超过90%的客观题与80%以上的主观题评分准确率;三是提供可复用的模块化代码架构,为后续功能扩展与第三方集成奠定基础。 本研究不仅为高校与在线教育机构提供一套成熟的技术实现路径,也为学术界在在线评测算法、系统架构设计及安全保障方面提供可参考的案例与经验,具有重要的理论价值与应用前景。
二、研究意义
随着信息技术的迅猛发展,传统面向纸质考试的评测模式已难以满足现代教育体系对大规模、跨地域、即时反馈的需求,在线考试与自动阅卷系统因而成为提升教育公平性与效率的重要手段。 本研究通过构建基于SpringBoot框架的后端服务与Vue技术栈的前端交互界面,提供了一个可扩展、高并发、易维护的完整解决方案,从而显著降低了教学资源分布不均所带来的制约,提升了教师与学生在不同时间、地点进行考试和评阅的灵活性。 在技术层面,该系统采用RESTful API实现前后端解耦,利用JWT或OAuth2进行身份验证与权限控制,并通过Redis缓存热点数据,以降低响应延迟并提升整体性能;这些设计思路为后续在大规模在线教育平台中实现模块化、微服务化架构提供了可借鉴的范例。 通过引入文本相似度匹配算法与规则引擎,系统能够在保持客观题自动阅卷准确率超过90%的基础上,对主观题进行高效、可追溯的评分,为教师提供客观数据支持,减少人工评阅工作量并降低主观偏差。 此外,系统集成的实时统计分析仪表盘能够展示答题时长、正确率、分布曲线等关键指标,为教学管理者提供决策依据,进一步推动教学质量的持续提升。 在教育政策层面,本研究为国家与地方教育部门制定在线考试标准与评估机制提供了技术参考,助力实现教育资源的均衡配置与公平评测。 综上所述,该系统不仅在技术实现上突破了传统单体应用的局限,更在教学实践、评测公平性与数据驱动决策等方面具有深远意义,为我国乃至全球在线教育与评测体系的发展提供了可复制、可推广的实践路径。
三、国内外研究现状
在全球范围内,在线考试与自动阅卷技术已成为教育信息化的重要研究热点,相关学术工作主要集中在系统架构设计、评测算法优化以及安全与隐私保护等方面。 传统的单体应用已难以满足大规模并发访问与模块化维护的需求,因而出现了基于微服务、容器化部署以及云原生技术的多层次架构方案;在前端交互层面,响应式框架与组件化设计被广泛采用,以提升用户体验与开发效率。 在评测算法领域,研究者已将自然语言处理技术与深度学习模型相结合,用于对简答题、论述题等主观性较强的答案进行自动评分;同时,通过知识图谱与语义匹配技术,实现了对答案的多维度评估,显著提升了评分准确率与可解释性。 安全与隐私方面,学术界提出了基于区块链的考试数据不可篡改方案、以及多因素身份认证机制,以防止作弊与数据泄露。 综上所述,国外研究已形成以云原生架构、AI驱动评测与安全保障为核心的技术生态。
在国内,众多高校与科研机构围绕在线考试平台开展了系统性研究,重点关注于本土化需求与技术适配。 许多项目采用Java后端框架与Vue前端技术栈,结合MySQL或PostgreSQL数据库,实现了题库管理、试卷生成、在线答题与即时提交等功能;在自动阅卷模块中,研究者利用文本相似度算法、规则引擎以及机器学习模型,对客观题与主观题进行分数分配。 通过引入Redis缓存热点数据与JWT身份验证,系统在大并发场景下表现出较高的响应速度与安全性。 在评测算法方面,国内学者已开发出基于卷积神经网络的答案匹配模型,并结合知识图谱进行语义补全,以提升简答题评分的准确度。 此外,针对多学科课程特点,一些项目实现了自适应测试与个性化学习路径推荐,为教师提供了数据驱动的教学决策支持。
国内外研究成果在技术细节与应用场景上存在一定差异。 国外平台如大型MOOC系统已将自动阅卷与即时反馈机制深度集成,形成了成熟的商业化生态;而国内研究更侧重于本土化需求与开放源代码的推广,强调系统的可扩展性与可维护性。 在评测算法层面,国外研究多采用大规模预训练模型进行语义理解,而国内研究则倾向于结合本土语言特点与教育大纲,构建针对性的知识图谱与规则库。 通过对比分析,可发现国内系统在实现细节、技术选型与安全机制方面已取得显著进展,但在算法深度与模型泛化能力上仍有提升空间。
总体而言,国内外研究已形成以云原生架构、AI驱动评测与安全保障为核心的技术框架,为构建高效、可靠的在线考试与自动阅卷系统提供了丰富的理论与实践基础。 在此基础上,进一步探索跨域知识融合、模型可解释性以及隐私保护机制,将是未来研究的重要方向。
四、预期达到目标及解决的关键问题
预期目标一是构建一套基于SpringBoot与Vue技术栈的完整在线考试与自动阅卷系统,该系统能够支持多种题型的题库管理、试卷生成、在线答题、即时提交以及自动评分等核心功能,并通过RESTful API实现前后端解耦,提升代码可维护性与可扩展性。 预期目标二是实现高并发、高可用的系统架构,能够在千人以上并发访问场景下保持响应时间低于两秒,并通过Redis缓存热点数据与MySQL或PostgreSQL数据库事务管理,实现数据一致性与高可靠性。 预期目标三是提升自动阅卷模块的准确率,客观题评分准确率达到90%以上,主观题评分准确率达到80%以上,并通过文本相似度匹配、规则引擎与机器学习模型相结合的方式,实现对简答题、论述题等主观性较强答案的高效评估。 预期目标四是构建完善的安全与权限管理机制,采用JWT或OAuth2实现用户身份认证与细粒度权限控制,并通过HTTPS、数据加密以及日志审计等手段,保障系统安全与合规性。 预期目标五是提供可视化的数据分析仪表盘,展示答题时长、正确率、分布曲线等关键指标,为教师与管理者提供决策支持,并支持导出报表与数据接口,方便后续数据挖掘与教学改进。
关键问题一是如何在保证系统高并发性能的同时,保持数据库事务的一致性与完整性;为此需要设计合理的分布式事务管理方案,并通过读写分离、分库分表等技术降低单点压力。 关键问题二是自动阅卷算法在处理主观题时的准确率与可解释性问题;需探索深度学习模型与知识图谱相结合的混合评测框架,并引入人工审核机制,提升评分结果的可信度。 关键问题三是前后端交互中的数据安全与隐私保护问题,尤其在考试过程中需要防止作弊与答案泄露;因此需实现实时监控、行为分析以及区块链技术的不可篡改特性,以保障考试数据的完整性。 关键问题四是系统的可扩展性与维护成本控制,如何通过微服务架构、容器化部署以及持续集成/持续交付(CI/CD)流程,实现模块化升级与快速迭代。 关键问题五是多终端适配与用户体验优化,尤其在移动设备上的响应式设计与离线答题功能,需要兼顾网络波动与设备差异,确保考生能够顺畅完成考试。 通过对上述目标与关键问题的系统研究与技术实现,本项目将为在线教育领域提供一套高效、可靠、可持续发展的考试与阅卷解决方案。
五、研究内容
本研究以构建一套基于SpringBoot与Vue技术栈的在线考试与自动阅卷系统为核心目标,围绕系统需求分析、架构设计、模块实现、性能优化与安全保障等方面展开系统性研究。首先,在需求分析阶段,通过访谈教师与学生以及对现有纸质考试流程的实地调研,梳理出题库管理、试卷生成、在线答题、即时提交、自动阅卷以及数据统计分析等功能模块,并明确非功能需求如高并发处理、数据安全与隐私保护、可维护性与可扩展性。其次,在系统架构设计阶段,采用微服务化设计理念,将前后端分离,后端采用SpringBoot框架实现业务逻辑与RESTful API,前端使用Vue.js实现响应式用户界面;通过Docker容器化部署与Kubernetes编排,实现弹性伸缩与高可用;数据库选用MySQL或PostgreSQL进行事务管理,并通过Redis缓存热点数据以降低响应延迟。随后,在模块实现阶段,首先完成题库管理模块,支持多种题型的增删改查与批量导入;接着实现试卷生成模块,支持随机抽题、分层抽样与自适应测试;在线答题与即时提交模块采用WebSocket技术实现实时交互,并对答案进行加密存储;自动阅卷模块则融合规则引擎与自然语言处理技术,对客观题采用精确匹配,对主观题利用文本相似度算法与知识图谱进行分数评估;数据统计分析模块通过可视化仪表盘展示答题时长、正确率、分布曲线等关键指标,并提供报表导出接口。随后,在性能优化与安全保障阶段,采用读写分离、分库分表以及多级缓存策略提升系统吞吐量;通过JWT或OAuth2实现身份认证与细粒度权限控制,并结合HTTPS、数据加密与日志审计机制保障系统安全;在作弊防范方面,设计实时行为监测与异常检测模块,并利用区块链技术实现考试数据不可篡改。接下来,在测试与评估阶段,进行单元测试、集成测试与压力测试,利用JMeter或Locust模拟千人并发访问场景,并通过A/B实验验证自动阅卷模型的准确率;同时开展用户体验评测,收集教师与学生反馈,对系统界面与交互流程进行迭代优化。最后,在部署与运维阶段,构建CI/CD流水线,实现代码自动化构建、测试与发布;通过Prometheus与Grafana监控系统指标,并制定灾备方案以保障业务连续性。综上所述,本研究通过多层次技术手段与严谨工程实践,致力于实现一套高效、可靠、可持续发展的在线考试与自动阅卷系统,为教育信息化提供可复制、可推广的技术范式。
六、需求分析
用户需求方面,系统的主要使用者包括教师、学生以及教育管理人员。教师需要一种便捷、高效的方式来创建与维护题库,支持多种题型的录入、批量导入与版本管理,并能够根据教学目标与课程进度快速生成试卷;同时教师还期望能够实时查看学生答题情况、获取统计报表,以便及时调整教学策略。学生则需要一个友好、稳定的在线答题环境,支持多终端访问,包括桌面电脑与移动设备,且界面应简洁明了,操作流程直观;在考试过程中,学生期望系统能够提供清晰的时间提示、答案提交确认以及错误提示,并在考试结束后获得即时反馈与成绩报告。教育管理人员则关注系统的整体运行情况与数据安全性,他们需要对考务流程进行统一管理,包括考生注册、身份验证、试卷分发与阅卷结果统计;此外,管理人员还需要通过可视化仪表盘监控系统性能指标,如并发访问量、响应时间与错误率,并能够快速定位并解决潜在的技术或业务问题。综上所述,用户需求聚焦于易用性、实时性与可靠性,并强调数据安全与权限控制,以满足教学活动的高效开展与管理监管。
功能需求方面,系统必须实现完整的在线考试生命周期管理。首先是题库管理模块,支持题目增删改查、批量导入与导出,并能够为每道题设置知识点标签、难度等级与参考答案;其次是试卷生成模块,能够根据教师设定的抽题规则(如随机抽取、分层抽样或自适应测试)自动生成试卷,并支持多份试卷的批量生成与版本控制。在线答题模块需提供多终端兼容的答题界面,支持文本输入、选择框、多选框、填空与上传附件等交互方式,并通过WebSocket实现实时答案提交与状态同步;同时系统应在答题过程中记录时间戳与操作日志,以便后续审计。自动阅卷模块是核心功能之一,需对客观题采用精确匹配算法,对主观题利用文本相似度计算、规则引擎与知识图谱进行分数评估,并支持人工复核与分数修正;此外,系统应提供阅卷结果的可追溯性与可解释性。数据统计分析模块需生成答题时长、正确率、题目难度曲线等多维度报表,并支持导出为Excel或PDF格式,以便教师与管理人员进行教学评估。安全与权限管理模块必须实现基于JWT或OAuth2的身份认证与细粒度权限控制,保障考生信息与考试数据的机密性;同时采用HTTPS、数据加密与日志审计等措施,防止作弊与数据泄露。最后,系统还需具备高可用性与弹性伸缩能力,通过Docker容器化部署、Kubernetes编排以及多节点负载均衡实现并发访问的稳定运行,并通过Redis缓存热点数据、读写分离与分库分表技术提升数据库性能。上述功能需求共同构成了一个完整、可靠且易于维护的在线考试与自动阅卷系统。
七、可行性分析
经济可行性方面,本系统的开发与部署成本相对较低,主要投入集中在软件开发、服务器租赁与维护、以及后期培训与技术支持。采用开源技术栈SpringBoot与Vue,可避免昂贵的许可费用;数据库使用MySQL或PostgreSQL,同样为免费开源方案;容器化部署与Kubernetes编排可利用云服务提供商的按需计费模式,进一步降低基础设施成本。系统上线后,能够为教育机构节约大量纸质考试与人工阅卷的费用,预计在一年内即可实现成本回收并产生正向收益。社会可行性方面,该系统满足了当前教育数字化转型的迫切需求,能够提升教学公平性与效率,为偏远地区学生提供优质评测资源;同时通过自动阅卷减少教师工作负担,提升教学质量与满意度。系统的安全与隐私设计符合国家数据安全法与教育信息化相关政策,能够获得监管部门与家长的信任,从而在社会层面具备良好的接受度。技术可行性方面,所选技术栈已在众多大型项目中得到验证,具有成熟的社区支持与丰富的文档资源;微服务架构与容器化部署能够实现高并发处理与弹性伸缩;自动阅卷模块结合自然语言处理与规则引擎,可在保持较高准确率的同时兼顾可解释性。整体而言,经济、社会与技术三方面均具备可行性,为项目的顺利实施奠定坚实基础。
八、功能分析
系统功能模块的设计遵循需求分析结果,形成一套完整、层次分明的功能体系。首先是用户管理与权限控制模块,该模块负责教师、学生及管理员的注册、登录与角色分配,并通过JWT或OAuth2实现身份认证与细粒度权限校验;同时提供密码重置、账号安全审计以及多因素身份验证等安全功能。其次是课程与考试管理模块,教师可在此模块创建课程信息、设置考试时间窗口、指定试卷模板并发布至对应班级;系统支持批量导入学生名单与分组,并为每个考试生成唯一的报名码,以便学生通过该码进行在线答题。第三是题库管理模块,该模块提供多种题型(单选、多选、判断、填空、简答)的增删改查接口,并支持批量导入与版本控制;每道题可关联知识点标签、难度等级与参考答案,便于后续试卷生成与统计分析。第四是试卷生成与自适应测试模块,系统根据教师设定的抽题规则(如随机抽取、分层抽样或基于学生历史成绩的自适应)自动生成试卷;同时支持多份试卷的批量生成、版本管理与时间限制设置,以满足大规模并发考试需求。第五是在线答题与即时提交模块,该模块提供响应式答题界面,支持文本输入、选择框、多选框、填空以及文件上传等交互方式;通过WebSocket实现答案实时提交与状态同步,并在答题过程中记录时间戳与操作日志,确保考试数据完整性。第六是自动阅卷模块,客观题采用精确匹配算法,主观题则结合文本相似度计算、规则引擎与知识图谱进行分数评估;系统将评分结果存储并生成可追溯的评阅报告,同时提供人工复核入口,教师可对自动评分结果进行修正并记录修订理由。第七是统计与报表模块,系统实时聚合答题时长、正确率、知识点覆盖度等指标,并通过可视化仪表盘展示;支持按课程、班级或学生维度导出Excel/PDF报表,为教学评估与改进提供数据依据。第八是安全与审计模块,系统记录所有关键操作日志,采用HTTPS、数据加密与日志审计机制保障考试数据的机密性与完整性;同时通过异常检测与行为分析防止作弊行为,并对考试过程进行实时监控。最后是通知与消息模块,支持短信、邮件或即时推送方式向教师和学生发送考试安排、成绩公布及系统维护等重要信息。上述功能模块构成了系统的核心业务流程,逻辑清晰、层次分明,能够满足在线考试与自动阅卷的全部需求。
九、数据库设计
字段名(英文) 说明(中文) 大小 类型 主外键 备注
User.id 用户编号 BIGINT AUTO_INCREMENT,PRIMARY KEY
User.username 用户名 VARCHAR(50) NONE
User.password_hash 密码哈希值 CHAR(64) NONE
User.email 邮箱地址 VARCHAR(100) NONE
User.role_id 角色编号 FK UserRole.role_id
User.created_at 创建时间 DATETIME NONE
User.updated_at 更新时间 DATETIME NONE
Role.id 角色编号 BIGINT AUTO_INCREMENT,PRIMARY KEY
Role.name 角色名称 VARCHAR(30) NONE
UserRole.user_id 用户编号 FK User.id
UserRole.role_id 角色编号 FK Role.id
UserRole.created_at 关联时间 DATETIME NONE
Course.id 课程编号 BIGINT AUTO_INCREMENT,PRIMARY KEY
Course.name 课程名称 VARCHAR(100) NONE
Course.description 课程描述 VARCHAR(500) NONE
Course.created_at 创建时间 DATETIME NONE
Exam.id 考试编号 BIGINT AUTO_INCREMENT,PRIMARY KEY
Exam.course_id 所属课程 FK Course.id
Exam.title 考试标题 VARCHAR(200) NONE
Exam.start_time 开始时间 DATETIME NONE
Exam.end_time 结束时间 DATETIME NONE
Exam.status 状态 INT(1) NONE(0=未开始,1=进行中,2=已结束)
ExamParticipant.id 报名记录编号 BIGINT AUTO_INCREMENT,PRIMARY KEY
ExamParticipant.exam_id 考试编号 FK Exam.id
ExamParticipant.user_id 考生编号 FK User.id
ExamParticipant.status 答题状态 INT(1) NONE(0=未开始,1=进行中,2=已提交)
ExamParticipant.submitted_at 提交时间 DATETIME NONE
QuestionType.id 题型编号 BIGINT AUTO_INCREMENT,PRIMARY KEY
QuestionType.name 题型名称 VARCHAR(30) NONE
KnowledgePoint.id 知识点编号 BIGINT AUTO_INCREMENT,PRIMARY KEY
KnowledgePoint.name 知识点名称 VARCHAR(100) NONE
Question.id 题目编号 BIGINT AUTO_INCREMENT,PRIMARY KEY
Question.type_id 题型编号 FK QuestionType.id
Question.difficulty 难度等级 INT(1) NONE(1-5)
Question.text 题目文本 VARCHAR(1000) NONE
Question.created_at 创建时间 DATETIME NONE
QuestionOption.id 选项编号 BIGINT AUTO_INCREMENT,PRIMARY KEY
QuestionOption.question_id 所属题目 FK Question.id
QuestionOption.text 选项文本 VARCHAR(500) NONE
QuestionOption.is_correct BINARY(1) NONE(0=错误,1=正确)
QuestionKnowledge.question_id 题目编号 FK Question.id
QuestionKnowledge.knowledge_point_id 知识点编号 FK KnowledgePoint.id
ExamQuestion.exam_id 考试编号 FK Exam.id
ExamQuestion.question_id 题目编号 FK Question.id
Answer.id 答卷记录编号 BIGINT AUTO_INCREMENT,PRIMARY KEY
Answer.user_id 考生编号 FK User.id
Answer.exam_id 考试编号 FK Exam.id
Answer.question_id 题目编号 FK Question.id
Answer.answer_text VARCHAR(2000) NONE(多选用逗号分隔)
Answer.score 得分 DECIMAL(5,2) NONE(0-100)
Answer.submitted_at DATETIME NONE
说明:上述表结构遵循第一范式至第三范式,所有非主键字段均为原子值;通过外键实现实体间的完整性约束;多对多关系通过关联表实现;答案表中包含得分字段以便后续统计与报表。
十、建表语句
CREATE DATABASE IF NOT EXISTS online_exam CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE online_exam;
-- 角色表
CREATE TABLE role (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(30) NOT NULL COMMENT '角色名称',
PRIMARY KEY (id),
UNIQUE KEY uk_role_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色表';
-- 用户表
CREATE TABLE user (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL COMMENT '用户名',
password_hash CHAR(64) NOT NULL COMMENT '密码哈希值',
email VARCHAR(100) NOT NULL COMMENT '邮箱地址',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
UNIQUE KEY uk_user_username (username),
UNIQUE KEY uk_user_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';
-- 用户角色关联表
CREATE TABLE user_role (
user_id BIGINT UNSIGNED NOT NULL,
role_id BIGINT UNSIGNED NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '关联时间',
PRIMARY KEY (user_id, role_id),
CONSTRAINT fk_user_role_user FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_user_role_role FOREIGN KEY (role_id) REFERENCES role(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';
-- 课程表
CREATE TABLE course (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL COMMENT '课程名称',
description VARCHAR(500) DEFAULT NULL COMMENT '课程描述',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (id),
UNIQUE KEY uk_course_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程表';
-- 考试表
CREATE TABLE exam (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
course_id BIGINT UNSIGNED NOT NULL COMMENT '所属课程',
title VARCHAR(200) NOT NULL COMMENT '考试标题',
start_time DATETIME NOT NULL COMMENT '开始时间',
end_time DATETIME NOT NULL COMMENT '结束时间',
status TINYINT(1) NOT NULL DEFAULT 0 COMMENT '状态(0=未开始,1=进行中,2=已结束)',
PRIMARY KEY (id),
KEY idx_exam_course_id (course_id),
CONSTRAINT fk_exam_course FOREIGN KEY (course_id) REFERENCES course(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试表';
-- 考试报名表
CREATE TABLE exam_participant (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
exam_id BIGINT UNSIGNED NOT NULL COMMENT '考试编号',
user_id BIGINT UNSIGNED NOT NULL COMMENT '考生编号',
status TINYINT(1) NOT NULL DEFAULT 0 COMMENT '答题状态(0=未开始,1=进行中,2=已提交)',
submitted_at DATETIME DEFAULT NULL COMMENT '提交时间',
PRIMARY KEY (id),
UNIQUE KEY uk_exam_participant_exam_user (exam_id,user_id),
KEY idx_exam_participant_user_id (user_id),
CONSTRAINT fk_exam_participant_exam FOREIGN KEY (exam_id) REFERENCES exam(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_exam_participant_user FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试报名表';
-- 题型表
CREATE TABLE question_type (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(30) NOT NULL COMMENT '题型名称',
PRIMARY KEY (id),
UNIQUE KEY uk_question_type_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='题型表';
-- 知识点表
CREATE TABLE knowledge_point (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL COMMENT '知识点名称',
PRIMARY KEY (id),
UNIQUE KEY uk_knowledge_point_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识点表';
-- 题目表
CREATE TABLE question (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
type_id BIGINT UNSIGNED NOT NULL COMMENT '题型编号',
difficulty TINYINT(1) NOT NULL DEFAULT 3 COMMENT '难度等级(1-5)',
text VARCHAR(1000) NOT NULL COMMENT '题目文本',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (id),
KEY idx_question_type_id (type_id),
CONSTRAINT fk_question_type FOREIGN KEY (type_id) REFERENCES question_type(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='题目表';
-- 题目选项表
CREATE TABLE question_option (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
question_id BIGINT UNSIGNED NOT NULL COMMENT '所属题目',
text VARCHAR(500) NOT NULL COMMENT '选项文本',
is_correct TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否正确(0=错误,1=正确)',
PRIMARY KEY (id),
KEY idx_question_option_question_id (question_id),
CONSTRAINT fk_question_option_question FOREIGN KEY (question_id) REFERENCES question(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='题目选项表';
-- 题目-知识点关联表
CREATE TABLE question_knowledge (
question_id BIGINT UNSIGNED NOT NULL,
knowledge_point_id BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (question_id, knowledge_point_id),
KEY idx_question_knowledge_knowledge_point_id (knowledge_point_id),
CONSTRAINT fk_question_knowledge_question FOREIGN KEY (question_id) REFERENCES question(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_question_knowledge_knowledge_point FOREIGN KEY (knowledge_point_id) REFERENCES knowledge_point(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='题目-知识点关联表';
-- 考试-题目关联表
CREATE TABLE exam_question (
exam_id BIGINT UNSIGNED NOT NULL,
question_id BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (exam_id, question_id),
KEY idx_exam_question_question_id (question_id),
CONSTRAINT fk_exam_question_exam FOREIGN KEY (exam_id) REFERENCES exam(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_exam_question_question FOREIGN KEY (question_id) REFERENCES question(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试-题目关联表';
-- 答卷表
CREATE TABLE answer (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id BIGINT UNSIGNED NOT NULL COMMENT '考生编号',
exam_id BIGINT UNSIGNED NOT NULL COMMENT '考试编号',
question_id BIGINT UNSIGNED NOT NULL COMMENT '题目编号',
answer_text VARCHAR(2000) DEFAULT NULL COMMENT '答案文本(多选用逗号分隔)',
score DECIMAL(5,2) DEFAULT NULL COMMENT '得分(0-100)',
submitted_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '提交时间',
PRIMARY KEY (id),
UNIQUE KEY uk_answer_user_exam_question (user_id,exam_id,question_id),
KEY idx_answer_user_id (user_id),
KEY idx_answer_exam_id (exam_id),
CONSTRAINT fk_answer_user FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_answer_exam FOREIGN KEY (exam_id) REFERENCES exam(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_answer_question FOREIGN KEY (question_id) REFERENCES question(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='答卷表';
-- 索引优化
CREATE INDEX idx_user_role_user_id ON user_role(user_id);
CREATE INDEX idx_user_role_role_id ON user_role(role_id);
CREATE INDEX idx_exam_participant_exam_id ON exam_participant(exam_id);
CREATE INDEX idx_exam_participant_status ON exam_participant(status);
CREATE INDEX idx_question_type_id_difficulty ON question(type_id,difficulty);
CREATE INDEX idx_answer_score ON answer(score);
-- 结束语
-- 以上DDL已满足第一范式至第三范式,所有外键均已定义完整,索引覆盖常用查询路径。
文章下方名片联系我即可~大家点赞、收藏、关注、评论啦 、查看下方👇🏻获取联系方式👇🏻