用AI帮忙,开发刷题小程序,在线答题系统数据库设计文档
本文档描述了在线答题系统的核心数据库设计,包含7个主要数据表: 题目表(question)存储题目基本信息 选项表(question_option)记录题目选项 试卷表(exam_paper)管理试卷信息 试卷题目关联表(exam_paper_question)建立试卷与题目关系 试卷分类表(exam_paper_category)组织试卷分类结构 用户考试记录表(user_exam_record
·
在线答题系统数据库设计文档
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类型,支持自动更新
更多推荐
所有评论(0)