DDD设计思路

先和相关人员充分沟通,把用户需求详细记录下来。然后呢,从这些需求里提炼出关键的概念和规则,构建领域模型。设计数据库表结构时,要考虑数据的存储和查询效率,还要能支持领域模型。在代码实现阶段,按照领域模型进行分层架构设计,让每个模块职责清晰,这样就能较好地兼顾数据库和代码实现。

首先从需求分析,在线考试系统里,老师得能出题、安排考试,学生要能参加考试、查看成绩,管理员负责系统管理和审核。接着设计领域模型,老师有出题、安排考试的操作,学生有参加考试、查看成绩的操作,管理员有审核、系统管理的操作。然后是数据库表结构,老师表有教师
ID、姓名等字段,学生表有学号、姓名等字段,再设计考试表关联老师和学生,记录考试信息。最后在代码实现时,按照领域模型设计各个功能模块,比如老师模块、学生模块和管理员模块,分别实现相应功能。

数据库基本信息

  • 数据库类型:MySQL
  • 数据库名称:exam_system_ai

核心表结构

1. 用户表(user)

字段名 字段类型 描述 约束
id BIGINT 用户唯一标识 主键,自增
account VARCHAR 登录账号(手机号/工号) 非空
password VARCHAR 加密密码(MD5+盐值) 非空
name VARCHAR 用户姓名 非空
role VARCHAR 角色(ADMIN/TEACHER/STUDENT) 非空
phone VARCHAR 联系电话
email VARCHAR 邮箱
avatar VARCHAR 头像URL
status INTEGER 状态(1正常/0禁用) 非空
create_time DATETIME 创建时间 非空
update_time DATETIME 更新时间 非空
class_id BIGINT 班级ID 外键,关联classroom表
grade_id BIGINT 年级ID 外键,关联grade表

2. 年级表(grade)

字段名 字段类型 描述 约束
id BIGINT 年级唯一标识 主键,自增
grade_name VARCHAR 年级名称 非空
status INTEGER 状态(1正常/0禁用) 非空
create_time DATETIME 创建时间 非空
update_time DATETIME 更新时间 非空

3. 班级表(classroom)

字段名 字段类型 描述 约束
id BIGINT 班级唯一标识 主键,自增
class_name VARCHAR 班级名称 非空
grade_id BIGINT 年级ID 外键,关联grade表
status INTEGER 状态(1正常/0禁用) 非空
create_time DATETIME 创建时间 非空
update_time DATETIME 更新时间 非空

4. 科目表(subject)

字段名 字段类型 描述 约束
id BIGINT 科目ID 主键,自增
name VARCHAR 科目名称 非空
status INTEGER 状态:1-启用,0-禁用 非空
create_time DATETIME 创建时间 非空
update_time DATETIME 更新时间 非空

5. 知识点表(knowledge)

字段名 字段类型 描述 约束
id BIGINT 知识点ID 主键,自增
name VARCHAR 知识点名称 非空
parent_id BIGINT 父知识点ID(0为一级) 外键,自关联
subject_id BIGINT 所属科目ID 外键,关联subject表
content VARCHAR 知识点内容
source VARCHAR 来源
status INTEGER 状态:0-待审核,1-通过,2-驳回 非空
sort INTEGER 排序序号
creator_id BIGINT 创建人ID 外键,关联user表
create_time DATETIME 创建时间 非空
update_time DATETIME 更新时间 非空
recorder VARCHAR 记录者或IPR相关信息

6. 试题表(question)

字段名 字段类型 描述 约束
id BIGINT 试题ID 主键,自增
stem VARCHAR 题干内容 非空
options VARCHAR 选项(JSON格式,客观题必填)
answer VARCHAR 答案(客观题如"A",主观题为文本) 非空
analysis VARCHAR 试题解析
knowledge_id BIGINT 关联知识点ID 外键,关联knowledge表
subject_id BIGINT 所属科目ID 外键,关联subject表
difficulty VARCHAR 难度(EASY/MEDIUM/HARD) 非空
type VARCHAR 题型(SINGLE_CHOICE/多选/JUDGMENT/简答) 非空
score DECIMAL 试题分值 非空
creator_id BIGINT 创建人ID 外键,关联user表
audit_status INTEGER 审核状态(0待审核/1通过/2拒绝) 非空
create_time DATETIME 创建时间 非空

7. 试卷表(paper)

字段名 字段类型 描述 约束
id BIGINT 试卷ID 主键,自增
paper_name VARCHAR 试卷名称 非空
subject VARCHAR 所属科目 非空
compose_method VARCHAR 组卷方式(MANUAL手动/AUTO自动) 非空
total_score DECIMAL 试卷总分 非空
duration INTEGER 考试时长(分钟) 非空
creator_id BIGINT 创建人ID 外键,关联user表
publish_status INTEGER 发布状态(0草稿/1已发布/2已停用) 非空
create_time DATETIME 创建时间 非空
update_time DATETIME 更新时间 非空

8. 试卷题目关联表(paper_question)

字段名 字段类型 描述 约束
id BIGINT 主键ID 主键,自增
paper_id BIGINT 试卷ID 外键,关联paper表
question_id BIGINT 题目ID 外键,关联question表
score DECIMAL 题目分数 非空

9. 考试表(mock_exam)

字段名 字段类型 描述 约束
id BIGINT 考试ID 主键,自增
title VARCHAR 考试标题 非空
description VARCHAR 考试描述
total_score DECIMAL 总分 非空
total_time INTEGER 总时间(分钟) 非空
status INTEGER 状态:1-未开始,2-进行中,3-已结束 非空
create_by BIGINT 创建人ID 外键,关联user表
create_time DATETIME 创建时间 非空
update_by BIGINT 更新人ID 外键,关联user表
update_time DATETIME 更新时间 非空
paper_id BIGINT 关联试卷ID 外键,关联paper表
start_time DATETIME 开始时间 非空
end_time DATETIME 结束时间 非空
publish_status INTEGER 发布状态(0未发布/1已发布/2已结束) 非空
question_ids JSON 题目ID列表(JSON格式存储) 非空
student_ids JSON 学生ID列表(JSON格式存储) 非空
allow_pause BOOLEAN 允许暂停 非空
allow_retake BOOLEAN 允许重考 非空
real_time_judge BOOLEAN 实时判断 非空
show_analysis BOOLEAN 显示分析 非空
show_suggestions BOOLEAN 显示建议 非空
auto_save_interval INTEGER 自动保存间隔(秒)
max_attempts INTEGER 最大尝试次数

10. 模拟考试记录表(mock_exam_record)

字段名 字段类型 描述 约束
id BIGINT 考试记录ID 主键,自增
exam_id BIGINT 考试ID 外键,关联mock_exam表
user_id BIGINT 用户ID 外键,关联user表
class_id BIGINT 班级ID 外键,关联classroom表
grade_id BIGINT 年级ID 外键,关联grade表
title VARCHAR 考试标题 非空
subject VARCHAR 考试科目 非空
exam_config VARCHAR 考试配置(JSON格式)
question_ids JSON 题目ID列表(JSON格式存储) 非空
start_time DATETIME 开始时间 非空
end_time DATETIME 结束时间
total_score DOUBLE 总分 非空
actual_score DOUBLE 实际得分
status INTEGER 状态:1-未开始 2-进行中 3-已完成 非空
spent_time INTEGER 耗时(秒)
result_data VARCHAR 考试结果数据(JSON格式)
create_time DATETIME 创建时间 非空
create_by BIGINT 创建人(用户ID) 外键,关联user表
update_time DATETIME 更新时间 非空
class_rank INTEGER 班级排名
class_total INTEGER 班级总人数
grade_rank INTEGER 年级排名
grade_total INTEGER 年级总人数
is_auto_generated INTEGER 自动化标识:1-自动化生成,0-人工创建 非空
is_valid INTEGER 是否有效:1-有效,0-无效(逻辑删除) 非空
attempt_number INTEGER 尝试次数

11. 阅卷任务表(marking_task)

字段名 字段类型 描述 约束
id BIGINT 任务ID 主键,自增
exam_id BIGINT 考试ID 外键,关联mock_exam表
mock_exam_record_id BIGINT 模拟考试记录ID 外键,关联mock_exam_record表
name VARCHAR 任务名称 非空
status INTEGER 状态:1-待分配,2-分配中,3-进行中,4-已完成,5-已取消 非空
trigger_type INTEGER 触发类型:1-手动,2-系统自动 非空
priority INTEGER 优先级:1-紧急,2-普通,3-低 非空
assign_rule INTEGER 分配规则:1-按试题,2-按考生,3-混合 非空
marking_type INTEGER 评分类型:1-自动,2-人工,3-混合 非空
total_students INTEGER 总学生数
total_questions INTEGER 总题目数
create_by BIGINT 创建人ID 外键,关联user表
create_time DATETIME 创建时间 非空
update_by BIGINT 修改人ID 外键,关联user表
update_time DATETIME 更新时间 非空
version INTEGER 版本号(乐观锁) 非空

12. 错题集表(wrong_question_collection)

字段名 字段类型 描述 约束
id BIGINT 错题集ID 主键,自增
user_id BIGINT 用户ID 外键,关联user表
name VARCHAR 错题集名称 非空
description VARCHAR 错题集描述
question_count INTEGER 错题数量 非空
create_time DATETIME 创建时间 非空
update_time DATETIME 更新时间 非空

13. 错题集条目表(wrong_question_item)

字段名 字段类型 描述 约束
id BIGINT 错题条目ID 主键,自增
collection_id BIGINT 错题集ID 外键,关联wrong_question_collection表
question_id BIGINT 题目ID 外键,关联question表
user_id BIGINT 用户ID 外键,关联user表
exam_id BIGINT 考试ID 外键,关联mock_exam表
user_answer VARCHAR 用户答案 非空
correct_answer VARCHAR 正确答案 非空
answer_time DATETIME 答题时间 非空
add_time DATETIME 加入错题集时间 非空
is_mastered BOOLEAN 是否已掌握 非空
master_time DATETIME 掌握时间
error_count INTEGER 错误次数 非空

表关系图

user (用户)
├── grade (年级)    ──┐
└── classroom (班级) ─┘
        │
        └── mock_exam_record (模拟考试记录)
                ├── mock_exam (考试)
                │       └── paper (试卷)
                │               └── paper_question (试卷题目关联)
                │                       └── question (试题)
                │                               ├── knowledge (知识点)
                │                               └── subject (科目)
                └── marking_task (阅卷任务)

user (用户)
└── wrong_question_collection (错题集)
        └── wrong_question_item (错题集条目)
                ├── question (试题)
                └── mock_exam (考试)

主要业务流程

  1. 用户管理:管理员创建用户,分配角色(学生/教师/管理员),关联年级和班级
  2. 题库管理:教师创建知识点、添加试题,关联知识点和科目
  3. 试卷管理:教师手动或自动组卷,设置试卷属性和题目分数
  4. 考试管理:教师创建考试,关联试卷,设置考试时间和规则,指定参考学生
  5. 考试过程:学生参加考试,系统自动保存答案,考试结束后自动提交
  6. 阅卷管理:系统自动处理客观题,教师进行主观题阅卷,系统计算总分
  7. 错题管理:系统自动收集学生错题,学生可查看、管理自己的错题集

技术特点

  1. 使用MyBatis-Plus:简化数据库操作,提供CRUD、分页、乐观锁等功能
  2. JSON字段存储:使用JSON格式存储复杂数据,如题目选项、考试题目列表等
  3. 外键关联:表之间通过外键建立关联,保证数据完整性
  4. 逻辑删除:部分表使用逻辑删除(如模拟考试记录),而非物理删除
  5. 乐观锁:关键表(如阅卷任务)使用乐观锁机制,防止并发冲突

该考试系统采用了分层架构设计,包括API层、应用层、领域层和基础设施层,通过清晰的表结构设计和关系定义,实现了完整的考试管理功能。

根据已有的表结构和业务流程,我将详细分析考试系统的模块划分、交互关系和业务流程:

一、模块划分

1. 基础数据模块

  • 核心表:grade(年级)、classroom(班级)、subject(科目)
  • 功能:提供系统的基础数据支撑,是其他模块的基础

2. 用户管理模块

  • 核心表:user(用户)
  • 功能:管理系统用户,包括管理员、教师、学生的创建和管理

3. 题库管理模块

  • 核心表:knowledge(知识点)、question(试题)
  • 功能:管理知识点体系和试题库,为组卷提供素材

4. 试卷管理模块

  • 核心表:paper(试卷)、paper_question(试卷题目关联)
  • 功能:基于试题库进行组卷,生成标准化试卷

5. 考试管理模块

  • 核心表:mock_exam(考试)、mock_exam_record(考试记录)、mock_exam_answer(答题记录)
  • 功能:创建和管理考试,记录学生考试过程

6. 考试监控模块

  • 核心表:exam_screen_record(考试屏幕记录)
  • 功能:监控学生考试过程,防止作弊

7. 阅卷管理模块

  • 核心表:marking_task(阅卷任务)、marking_task_assignment(任务分配)、marking_score(评分)
  • 功能:管理阅卷流程,分配评卷任务,记录评分结果

8. 质量控制模块

  • 核心表:marking_quality_control(质量控制)
  • 功能:实现双评模式,处理分差,记录仲裁状态

9. 异常检测模块

  • 核心表:marking_anomaly(异常检测)
  • 功能:检测阅卷过程中的异常情况

10. 错题管理模块

  • 核心表:wrong_question_collection(错题集)、wrong_question_item(错题条目)
  • 功能:自动收集学生错题,提供错题管理功能

11. 学情分析模块

  • 核心表:多表联合分析
  • 功能:基于考试数据进行学情分析,生成分析报告

二、模块交互关系

1. 基础数据初始化流程

基础数据模块 系统 管理员 基础数据模块 系统 管理员 初始化基础数据 创建年级(grade) 创建班级(classroom) 创建科目(subject) 基础数据初始化完成 基础数据初始化成功

2. 用户管理流程

基础数据模块 用户管理模块 系统 管理员 基础数据模块 用户管理模块 系统 管理员 创建用户 创建管理员用户 创建教师用户 创建学生用户 关联年级和班级 用户创建完成 用户创建成功

3. 题库管理流程

基础数据模块 题库管理模块 系统 教师 基础数据模块 题库管理模块 系统 教师 创建知识点 创建知识点(knowledge) 关联科目(subject) 创建试题 创建试题(question) 关联知识点(knowledge) 关联科目(subject) 试题创建完成 试题创建成功

4. 试卷管理流程

题库管理模块 试卷管理模块 系统 教师 题库管理模块 试卷管理模块 系统 教师 组卷 创建试卷(paper) 选择试题(question) 创建试卷题目关联(paper_question) 组卷完成 组卷成功

5. 考试管理流程

用户管理模块 试卷管理模块 考试管理模块 系统 教师 用户管理模块 试卷管理模块 考试管理模块 系统 教师 创建考试 创建考试(mock_exam) 关联试卷(paper) 指定参考学生(user) 考试创建完成 考试创建成功 发布考试 更新考试状态为已发布 考试发布完成 考试发布成功

6. 考试过程流程

考试监控模块 考试管理模块 系统 学生 考试监控模块 考试管理模块 系统 学生 参加考试 创建考试记录(mock_exam_record) 答题 记录答题(mock_exam_answer) 监控考试(exam_screen_record) 提交试卷 更新考试记录状态为已完成 考试完成 考试提交成功

7. 阅卷管理流程

考试管理模块 阅卷管理模块 系统 教师 考试管理模块 阅卷管理模块 系统 教师 创建阅卷任务 创建阅卷任务(marking_task) 关联考试记录(mock_exam_record) 分配评卷任务(marking_task_assignment) 评卷 记录评分(marking_score) 评卷完成 评卷成功

8. 质量控制流程

仲裁教师 教师B 教师A 质量控制模块 系统 仲裁教师 教师B 教师A 质量控制模块 系统 alt [分差大] 第一评 第二评 比较分差(marking_quality_control) 记录仲裁状态 仲裁评分 提交仲裁结果 质量控制完成

9. 错题管理流程

考试管理模块 错题管理模块 系统 考试管理模块 错题管理模块 系统 分析考试结果 自动收集错题(wrong_question_item) 更新错题集(wrong_question_collection) 错题收集完成

10. 学情分析流程

错题管理模块 考试管理模块 学情分析模块 系统 错题管理模块 考试管理模块 学情分析模块 系统 获取考试数据 获取错题数据 进行多表联合分析 学情分析完成

三、模块内部流程

1. 基础数据模块

  • 年级管理:创建年级 → 设置状态 → 更新年级信息
  • 班级管理:创建班级 → 关联年级 → 设置状态 → 更新班级信息
  • 科目管理:创建科目 → 设置状态 → 更新科目信息

2. 用户管理模块

  • 用户创建:填写用户信息 → 选择角色 → 关联年级/班级 → 保存用户
  • 用户管理:查询用户列表 → 编辑用户信息 → 禁用/启用用户 → 删除用户

3. 题库管理模块

  • 知识点管理:创建知识点 → 关联父知识点 → 关联科目 → 设置状态 → 审核知识点
  • 试题管理:填写题干和选项 → 设置答案和解析 → 关联知识点和科目 → 设置难度和题型 → 提交审核 → 审核试题

4. 试卷管理模块

  • 手动组卷:选择试题 → 设置题目分数 → 生成试卷 → 设置试卷属性 → 发布试卷
  • 自动组卷:设置组卷规则 → 系统自动选择试题 → 生成试卷 → 人工审核 → 发布试卷

5. 考试管理模块

  • 考试创建:填写考试信息 → 选择试卷 → 设置考试时间 → 指定参考学生 → 保存考试
  • 考试发布:更新考试状态为已发布 → 通知学生考试信息
  • 考试监控:记录学生考试行为 → 检测异常操作 → 生成监控记录
  • 考试统计:收集考试数据 → 计算考试结果 → 生成考试报表

6. 阅卷管理模块

  • 任务创建:选择考试 → 设置阅卷规则 → 创建阅卷任务 → 设置优先级
  • 任务分配:根据分配规则 → 自动分配评卷任务 → 通知评卷教师
  • 主观题阅卷:查看学生答题 → 参考标准答案 → 给出评分和评语 → 提交评分
  • 客观题阅卷:系统自动判分 → 生成评分结果 → 人工复核

7. 质量控制模块

  • 双评管理:为同一题目分配两位教师 → 收集两位教师的评分 → 比较分差
  • 仲裁管理:识别分差过大的题目 → 分配给仲裁教师 → 记录仲裁结果 → 更新最终评分
  • 质量统计:统计评卷质量指标 → 生成质量报告 → 反馈给评卷教师

8. 错题管理模块

  • 错题收集:分析考试结果 → 自动识别错题 → 收集到错题集 → 标记错误原因
  • 错题管理:查看错题集 → 标记已掌握的错题 → 导出错题 → 分享错题集
  • 错题练习:基于错题集生成练习 → 学生进行练习 → 系统记录练习结果

9. 学情分析模块

  • 成绩分析:统计学生成绩 → 分析成绩分布 → 生成成绩报表
  • 知识点分析:分析知识点掌握情况 → 识别薄弱环节 → 生成知识点分析报告
  • 班级分析:比较班级成绩 → 分析班级差异 → 生成班级分析报告
  • 趋势分析:跟踪学生成绩变化 → 分析学习趋势 → 生成趋势分析报告

四、业务流程依赖关系

依赖链:基础数据 → 用户 → 题库 → 试卷 → 考试 → 阅卷 → 错题 → 分析

  1. 基础数据层:年级、班级、科目是所有后续业务的基础
  2. 用户层:基于基础数据创建和管理用户
  3. 题库层:基于知识点和科目创建试题
  4. 试卷层:基于试题创建试卷
  5. 考试层:基于试卷创建考试,学生参加考试
  6. 阅卷层:基于考试结果进行阅卷和质量控制
  7. 错题层:基于考试和阅卷结果自动收集错题
  8. 分析层:基于所有数据进行学情分析

数据流向

  • 向下流:基础数据 → 用户 → 知识点 → 试题 → 试卷 → 考试
  • 向上流:考试结果 → 阅卷数据 → 错题数据 → 分析数据
  • 横向流:各模块内部的数据交互和处理

五、核心业务流程总结

1. 准备阶段

  • 管理员初始化基础数据
  • 管理员创建用户
  • 教师创建知识点和试题
  • 教师组卷和创建考试

2. 执行阶段

  • 教师发布考试
  • 学生参加考试和答题
  • 学生提交试卷
  • 系统监控考试过程

3. 评估阶段

  • 教师创建阅卷任务
  • 系统分配评卷任务
  • 教师进行评卷
  • 系统进行质量控制和仲裁

4. 分析阶段

  • 系统检测异常
  • 系统自动收集错题
  • 系统进行学情分析
  • 学生查看错题和分析结果

5. 改进阶段

  • 教师根据分析结果调整教学策略
  • 学生根据错题集进行针对性学习
  • 系统持续优化考试和评卷流程

通过这种模块化的设计和清晰的业务流程,考试系统能够实现从基础数据管理到最终学情分析的完整闭环,为教育教学提供全面的支持。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐