在线答题系统数据库设计文档
1. 概述
本文档描述了在线答题系统的数据库设计,包含题目管理、试卷分类、考试记录和用户答题等核心功能的数据表结构。
2. 数据库表结构
2.1 题目表 (question)
功能说明:存储所有题目的基本信息
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| question_no | VARCHAR(50) | 题目编号 | |
| content | TEXT | NOT NULL | 题目内容 |
| question_type | TINYINT | NOT NULL, DEFAULT 1 | 题目类型:1-单选,2-多选,3-案例分析,4-论文题 |
| answer_analysis | TEXT | 答案解析(HTML格式) | |
| difficulty | TINYINT | DEFAULT 3 | 难度:1-易,2-中,3-难 |
| knowledge_area | VARCHAR(100) | INDEX | 知识领域 |
| chapter | VARCHAR(100) | 所属章节 | |
| is_official | BOOLEAN | DEFAULT false | 是否官方真题 |
| status | TINYINT | NOT NULL, DEFAULT 1 | 状态:1-正常,0-禁用 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- 主键索引:
id - 普通索引:
idx_knowledge_area(knowledge_area)
2.2 选项表 (question_option)
功能说明:存储题目的选项信息
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| question_id | BIGINT | NOT NULL, INDEX | 题目ID |
| option_no | VARCHAR(10) | NOT NULL | 选项编号 |
| content | TEXT | NOT NULL | 选项内容 |
| is_correct | BOOLEAN | DEFAULT false | 是否为正确选项 |
| analysis | TEXT | 选项解析 | |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
索引:
- 主键索引:
id - 普通索引:
idx_question_id(question_id)
2.3 试卷表 (exam_paper)
功能说明:存储试卷的基本信息
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| paper_code | VARCHAR(50) | 试卷代码 | |
| paper_name | VARCHAR(255) | 试卷名称,如:2025年上半年 | |
| exam_level | TINYINT | DEFAULT 3 | 考试级别:3-高级,2-中级,1-初级 |
| subject_id | BIGINT | DEFAULT 1 | 科目ID:1-信息系统项目管理师,2-系统分析架构师 |
| total_num | INT | DEFAULT 0 | 总题数 |
| total_score | DECIMAL(8,2) | DEFAULT 75.0 | 试卷总分 |
| pass_score | DECIMAL(5,2) | DEFAULT 45.0 | 及格分数线 |
| duration | INT | 考试时长(分钟) | |
| is_simulation | BOOLEAN | DEFAULT false | 是否模拟试卷 |
| status | TINYINT | DEFAULT 1 | 状态:1-草稿,2-已发布,3-已归档 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
2.4 试卷题目关联表 (exam_paper_question)
功能说明:建立试卷与题目的关联关系
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| paper_id | BIGINT | NOT NULL, INDEX | 试卷ID |
| question_id | BIGINT | NOT NULL | 题目ID |
| question_score | DECIMAL(5,2) | NOT NULL | 题目在试卷中的分值 |
| question_order | INT | NOT NULL, INDEX | 题目顺序 |
| question_group | VARCHAR(50) | 题组(案例分析题专用) | |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
索引:
- 主键索引:
id - 唯一索引:
uk_paper_question(paper_id, question_id) - 普通索引:
idx_paper(paper_id),idx_question_order(question_order)
2.5 试卷分类表 (exam_paper_category)
功能说明:组织试卷的分类结构
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID |
| name | VARCHAR(100) | NOT NULL | 分类名称 |
| parent_id | BIGINT | INDEX | 父分类ID(根节点为NULL) |
| paper_id | BIGINT | 关联的试卷ID(仅叶子节点) | |
| level | INT | NOT NULL | 层级:1-根节点 2-子节点 3-叶子节点 |
| order_num | INT | DEFAULT 0 | 同级排序序号 |
| status | INT | DEFAULT 1 | 是否有效:1-有效;0-无效 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- 主键索引:
id - 普通索引:
idx_parent_id(parent_id)
2.6 用户考试记录表 (user_exam_record)
功能说明:记录用户每次考试的整体情况
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 考试记录ID |
| user_id | VARCHAR(32) | NOT NULL, INDEX | 用户ID |
| paper_id | BIGINT | NOT NULL, INDEX | 试卷ID |
| start_time | DATETIME | NOT NULL, INDEX | 开始时间 |
| end_time | DATETIME | NOT NULL | 结束时间 |
| duration | INT | NOT NULL | 实际考试时长(秒) |
| total_score | DECIMAL(5,2) | NOT NULL | 试卷总分 |
| user_score | DECIMAL(5,2) | NOT NULL | 用户得分 |
| pass_status | TINYINT | NOT NULL, DEFAULT 0 | 0-未通过,1-通过 |
| status | TINYINT | NOT NULL, DEFAULT 1 | 1-进行中,2-已提交,3-超时结束 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- 主键索引:
id - 普通索引:
idx_user(user_id),idx_paper(paper_id),idx_start_time(start_time)
2.7 用户答题详情表 (user_answer_detail)
功能说明:记录用户每道题的具体答题情况
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 答题详情ID |
| user_id | VARCHAR(32) | NOT NULL | 用户ID |
| record_id | BIGINT | NOT NULL, INDEX | 考试记录ID |
| paper_id | BIGINT | NOT NULL | 试卷ID |
| question_id | BIGINT | NOT NULL, INDEX | 题目ID |
| user_answer | VARCHAR(500) | 用户答案(选项:AB/文本/文件路径) | |
| is_correct | INT | 是否答对:0-错;1-对 | |
| question_score | DECIMAL(5,2) | NOT NULL | 题目分值 |
| user_score | DECIMAL(5,2) | NOT NULL | 用户本题得分 |
| spent_time | INT | NOT NULL | 本题耗时(秒) |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- 主键索引:
id - 普通索引:
idx_record(record_id),idx_question(question_id) - 唯一索引:
uk_record_id_paper_id_question_id(record_id, paper_id, question_id)
3. 核心业务关系
3.1 题目管理流程
题目表 (question) ← 选项表 (question_option)
↓
试卷题目关联表 (exam_paper_question) → 试卷表 (exam_paper)

3.2 考试流程
用户考试记录表 (user_exam_record)
↓
用户答题详情表 (user_answer_detail) → 题目表 (question)
↓
试卷表 (exam_paper)
3.3 分类组织
试卷分类表 (exam_paper_category) → 试卷表 (exam_paper)
4. 关键设计特点
- 灵活的题目类型支持:支持单选、多选、案例分析和论文题四种类型
- 完整的考试流程记录:从考试开始到结束,包括每道题的答题详情
- 多级试卷分类:支持树状结构的试卷分类管理
- 详细的统计分析:通过答题详情表可以分析用户的答题习惯和知识掌握情况
- 扩展性设计:预留了扩展字段,如ext_info等
5. 性能考虑
- 为频繁查询的字段建立了索引
- 使用适当的数据类型减少存储空间
- 通过关联表设计避免数据冗余
- 时间字段使用TIMESTAMP类型,支持自动更新
8707



被折叠的 条评论
为什么被折叠?



