基于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)

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

相关推荐
小旋风012342 小时前
前端对接豆包AI(vue2版本)
前端·人工智能
数字游民95272 小时前
推荐一个自带流量加成的小程序接口
人工智能·ai·小程序
z20348315202 小时前
AI模型部署草稿
人工智能·单片机·嵌入式硬件
全栈开发圈2 小时前
干货分享|AI Agent全链路开发
人工智能
阿湯哥2 小时前
Agent、Skill、Tool、LLM 的四层关系与协同逻辑
人工智能
Wpa.wk2 小时前
性能测试 - 性能监控命令top,ps
java·经验分享·测试工具
清风拂山岗 明月照大江2 小时前
MySQL进阶
数据库·sql·mysql
南_山无梅落2 小时前
create_deep_agent vs create_agent 的区别
人工智能·langchain·deepagent
Aliex_git2 小时前
提示词工程学习笔记
人工智能·笔记·学习