基于SpringAI的在线考试系统-数据库 表结构 & 完整外键依赖关系梳理

exam_system_ai 数据库 表结构 & 完整外键依赖关系梳理

整体说明

该库是考试系统AI(在线考试+智能阅卷评分) 专用MySQL库,共包含26张业务表 + 3个统计视图 ,所有表的编码均为utf8mb4,主键均为自增ID;

表之间的关联完全基于外键约束 + 业务逻辑关联 ,依赖关系具备清晰的层级结构 (底层基础表 → 中层业务表 → 上层核心业务表 → 附属拓展表),无循环依赖,外键约束规则分为 ON DELETE CASCADE(级联删除)ON DELETE RESTRICT(限制删除) 两类。

核心表业务数据流转

一、核心原则:依赖关系定义

  • 强依赖(外键约束) :表A的字段通过FOREIGN KEY关联表B的主键,表A为子表 ,表B为父表,子表必须依赖父表存在,父表删除数据受外键规则限制;
  • 弱依赖(业务关联):无显式外键约束,但业务逻辑上字段值对应其他表主键,是系统业务流转的核心关联关系;
  • 无依赖 :根级基础表,无任何外键字段,是整个库的底层基石表

二、根级基础表【无任何外键依赖 ✅ 最底层】

所有表的依赖最终追溯到这几张表,无外键指向其他表,删除无任何关联限制,是系统的核心基础数据载体,共4张:

1. subject (科目表)

  • 作用:存储学科信息(语文/数学/英语等)
  • 无外键,独立存在,是题库、知识点的核心归类维度

2. grade (年级表)

  • 作用:存储年级信息(一年级/初二/高三等)
  • 无外键,独立存在

3. classroom (班级表)

  • 作用:存储班级信息,关联年级
  • 弱依赖:grade_idgrade.id (业务关联,无外键约束)
  • 无其他外键,独立存在

4. user (用户表) ✅ 核心核心核心

  • 作用:存储所有系统用户,角色分为ADMIN(管理员)、TEACHER(教师)、STUDENT(学生)
  • 无外键,独立存在,90%的业务表都关联该表的主键id
  • 弱依赖:class_id→classroom.idgrade_id→grade.id (业务关联,无外键)

三、基础业务表【仅依赖「根级基础表」】

基于底层基础表构建,无其他业务表依赖,是中层业务表的基础,共4张:

1. knowledge (知识点表)

  • 核心依赖(外键+约束):
    • subject_idsubject.id 【ON DELETE CASCADE 级联删除】
    • creator_iduser.id 【ON DELETE CASCADE 级联删除】
  • 作用:按科目归类知识点,绑定创建人,为试题打标签

2. question (试题表) ✅ 题库核心

  • 核心依赖(外键+约束):
    • knowledge_idknowledge.id 【ON DELETE SET NULL 父表删除则置空】
    • subject_idsubject.id 【ON DELETE SET NULL 父表删除则置空】
    • create_byuser.id 【ON DELETE CASCADE 级联删除】
  • 作用:存储所有题型(单选/多选/判断/填空/简答)的核心数据,是试卷、答题的基础

3. paper (试卷表)

  • 核心依赖(外键+约束):
    • creator_iduser.id 【ON DELETE CASCADE 级联删除】
  • 作用:存储试卷基础信息,绑定创建教师,关联试题组成完整试卷

4. paper_question (试卷试题关联表)

  • 核心依赖(外键+约束):
    • paper_idpaper.id 【ON DELETE CASCADE 级联删除】
    • question_idquestion.id 【ON DELETE CASCADE 级联删除】
  • 作用:多对多关联表,解决「一张试卷对应多道题、一道题出现在多张试卷」的关系,存储每题在试卷中的分值

四、考试核心业务模块【依赖「根级基础表+基础业务表」】

考试全流程的核心表,完整覆盖「创建考试→学生答题→考试记录→防作弊」,考试业务主链路,共4张:

1. mock_exam (考试表) ✅ 考试核心

  • 弱依赖(业务关联,无外键):paper_idpaper.id
  • 作用:存储考试的基础配置(标题/总分/时长/起止时间),关联试卷生成考试场次

2. mock_exam_answer (模拟考试答题记录表)

  • 核心依赖(外键+约束):
    • user_iduser.id 【ON DELETE CASCADE 级联删除】
    • paper_idpaper.id 【无显式约束,业务强关联】
    • question_idquestion.id 【ON DELETE CASCADE 级联删除】
  • 作用:存储学生每一道题的答题详情(作答内容/正确答案/得分/对错),考试核心明细数据

3. mock_exam_record (考试记录表) ✅ 考试结果核心

  • 核心依赖(外键+约束):
    • exam_id → mock_exam.id 【ON DELETE CASCADE 级联删除】
    • user_iduser.id 【ON DELETE CASCADE 级联删除】
  • 作用:存储学生单场考试的整体结果(开始/结束时间/总得分/用时/排名),是考试结果的汇总表

4. exam_screen_record (考试屏幕切换记录表)

  • 弱依赖(业务关联,无外键):exam_id→mock_exam.id、user_id→user.id
  • 作用:考试防作弊,记录学生考试期间的页面切换行为,无外键约束

五、阅卷评分核心业务模块【依赖「所有前置表」,最复杂,表量最多】

系统最核心的业务模块 ,完整覆盖「创建阅卷任务→分配评分教师→双盲评分→评分质量监控→异常检测→仲裁复核→进度统计」全流程,阅卷评分主链路 ,共9张,严格的父子依赖关系,排序按「核心→附属」:

✔ 阅卷核心主表(基石)

  1. marking_task (阅卷任务主表) :阅卷业务的根表
    • 弱依赖:exam_id→mock_exam.id、create_by→user.idmock_exam_record_id→mock_exam_record.id
    • 作用:创建阅卷任务,关联考试,配置任务优先级/状态/完成时间

✔ 阅卷任务关联表(依赖主表)

  1. marking_task_assignment (阅卷任务分配表)
    • 强依赖:task_id → marking_task.id 【无显式外键,业务强关联】
    • 弱依赖:teacher_id→user.idstudent_id→user.idquestion_id→question.id
    • 作用:将阅卷任务分配给教师,按「试题/学生/混合」规则分配,记录分配状态/进度

✔ 阅卷评分核心表(依赖分配表+任务表)

  1. marking_score (阅卷评分表) :评分结果核心
    • 弱依赖:task_id→marking_task.id、assignment_id→marking_task_assignment.id、teacher_id→user.idstudent_id→user.idquestion_id→question.id
    • 作用:存储最终的评分结果,记录每题的得分/评分教师/评分意见/审核状态,是阅卷的最终数据

✔ 阅卷质量&机制表(依赖核心表,保障评分公平性)

  1. marking_blind_score (盲评临时表-双盲评分机制) :核心公平机制
    • 强依赖外键:关联 marking_task / question / user(学生/教师) 【ON DELETE RESTRICT 限制删除】
    • 作用:双盲评分,两位教师匿名评分同一道题,无相互干扰,是评分质量的核心保障
  2. marking_quality_control (阅卷评分质量控制表)
    • 弱依赖:关联 exam_id/marking_task.id/question.id/user.id(学生/两位评分教师)
    • 作用:对比两位教师的评分,计算分差/差异率,判断是否超阈值,触发仲裁流程
  3. marking_arbitration_history (仲裁历史表)
    • 强依赖外键:quality_control_id → marking_quality_control.id 【ON DELETE CASCADE】、arbitration_teacher_id→user.id 【ON DELETE RESTRICT】
    • 作用:评分分差超阈值后,仲裁教师复核打分,记录仲裁结果/理由

✔ 阅卷辅助监控表(依赖核心表,统计/异常)

  1. marking_progress (阅卷进度统计表)
    • 强依赖外键:task_id→marking_task.id、teacher_id→user.id 【ON DELETE CASCADE/RESTRICT】
    • 作用:统计每位教师的阅卷进度(完成数/完成率/平均评分时长/质量分)
  2. marking_anomaly (评分异常检测记录表)
    • 强依赖外键:task_id→marking_task.id、teacher_id→user.id 【ON DELETE CASCADE/RESTRICT】
    • 作用:检测评分异常(评分过快/过慢/分数重复/权限异常),记录异常类型/严重程度/处理状态
  3. marking_config (评分配置表) :独立配置表,无外键
    • 作用:存储评分系统的全局配置(阈值/规则/参数),无任何依赖

六、辅助功能表【无强核心依赖,业务拓展功能】

共3张,为系统提供辅助能力,依赖根级基础表,无复杂关联:

  1. operation_log (操作日志表) :弱依赖 user_id→user.id,记录所有用户的操作行为(增删改查),审计追溯用
  2. wrong_question_collection (错题集表) :强依赖 user_id→user.id,存储学生的错题集名称/描述
  3. wrong_question_item (错题项表) :强依赖外键
    • collection_id → wrong_question_collection.id 【ON DELETE CASCADE】
    • user_iduser.id 【ON DELETE CASCADE】
    • 作用:错题集的明细,存储学生的错题详情(试题/作答/正确答案/错误次数)

七、统计视图【无物理表,基于业务表生成,共3个】

无存储,实时计算,用于快速查询统计数据,均基于上述业务表关联生成:

  1. user_exam_stats :学生考试统计(完成场次/平均分/最高分/总用时)
  2. view_marking_task_stats :阅卷任务统计(任务进度/完成率/异常数/教师数)
  3. view_marking_teacher_stats :教师阅卷统计(完成数/效率/异常数/重评次数)

✅ 关键补充:2个核心重要规则

1. 外键约束的删除规则(重要!影响数据删除逻辑)

该库的外键仅用2种删除规则,区分严格度,无其他规则:

  • ON DELETE CASCADE 【级联删除】:父表删除数据,子表关联数据自动删除

    例:删除user表的某个学生,其答题记录、考试记录、错题集都会被自动删除;删除试卷,试卷中的试题关联也会删除。

    适用:强绑定的业务数据,主数据删除,子数据无独立存在意义。

  • ON DELETE RESTRICT 【限制删除】:父表存在子表关联数据时,禁止删除父表数据

    例:删除评分教师时,如果该教师有未处理的阅卷任务/异常记录,会直接报错,禁止删除。

    适用:核心业务主数据,防止误删导致业务数据断层。

2. 整体依赖层级总结(从上到下,无环依赖,清晰易懂)

复制代码
【层级0 - 根表】:subject 科目 → grade 年级 → classroom 班级 → user 用户 (无任何依赖,所有表的基石)
【层级1 - 基础业务】:knowledge 知识点 → question 试题 → paper 试卷 → paper_question 试卷试题关联 (仅依赖层级0)
【层级2 - 考试业务】:mock_exam 考试 → mock_exam_answer 答题记录 → mock_exam_record 考试记录 (依赖层级0+1)
【层级3 - 阅卷核心】:marking_task 阅卷任务 → marking_task_assignment 任务分配 → marking_score 评分结果 (依赖层级0+1+2)
【层级4 - 阅卷附属】:质量控制/仲裁/进度/异常表 (仅依赖层级3的阅卷核心表)
【辅助层】:日志/错题集/切屏记录 (零散依赖各层级)

✅ 核心业务完整链路(表结构的业务逻辑闭环)

复制代码
1. 基础配置:管理员维护 科目(subject)、年级(grade)、班级(classroom)、用户(user)
2. 题库建设:教师创建 知识点(knowledge) → 录入试题(question) → 组建试卷(paper)
3. 考试组织:创建考试(mock_exam)关联试卷 → 学生参与考试 → 生成答题记录(mock_exam_answer)、考试记录(mock_exam_record)
4. 智能阅卷:创建阅卷任务(marking_task) → 分配教师(marking_task_assignment) → 双盲评分(marking_blind_score) → 质量监控(marking_quality_control)
5. 异常处理:检测评分异常(marking_anomaly) → 仲裁复核(marking_arbitration_history) → 统计进度(marking_progress)
6. 学情分析:学生错题自动归集(wrong_question_item) → 考试成绩统计(user_exam_stats)

所有表的设计均围绕该链路展开,无冗余表,关联关系严谨,业务闭环完整。

相关推荐
古一木6 小时前
opencv 形态学操作
人工智能·opencv·计算机视觉
KK不Battle6 小时前
AI 配图缺的不是模型,是工程:开源 skill social-illustrator 上手教程
人工智能
2601_963749106 小时前
越华环保集团污水监测云边协同架构:数字化污水治理Modbus-MQTT链路实现方案
人工智能·架构
u0103055277 小时前
Java实用类应用精讲
人工智能·1024程序员节
城事漫游Molly7 小时前
用AI评估文献可靠性——相关性、可靠性、时效性三维框架
人工智能·ai for science·文献综述·文献阅读·科研方法·博士生必读·文献评估
聚铭网络7 小时前
狂飙的AI,失控的安全……
人工智能·安全
wgego7 小时前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
BullSmall7 小时前
Another Redis Desktop Manager(ARDM)下载指南
数据库·redis·缓存
imbackneverdie7 小时前
写文献综述,时间脉络和主题分类到底怎么选?
人工智能·ai·aigc·论文·科研·ai写作·医学
SelectDB7 小时前
Apache Doris 倒排索引工作原理:全文检索提速 59 倍,点查提速 14 倍
数据库