考试系统数据库表结构设计
·
📚 一、核心实体和关系梳理
-
学生(Student)
-
考试(Exam)
-
试卷(Paper)
-
题目(Question)
-
学生答题(Answer)
-
成绩(Score)
🔥 二、数据库表设计(MySQL示例)
1️⃣ 学生表(student)
CREATE TABLE student (
student_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
student_no VARCHAR(20) UNIQUE NOT NULL, -- 学号
class_name VARCHAR(50)
);
2️⃣ 考试表(exam)
CREATE TABLE exam (
exam_id INT PRIMARY KEY AUTO_INCREMENT,
exam_name VARCHAR(100) NOT NULL,
exam_time DATETIME, -- 考试时间
duration INT, -- 考试时长(分钟)
description TEXT
);
3️⃣ 试卷表(paper)
CREATE TABLE paper (
paper_id INT PRIMARY KEY AUTO_INCREMENT,
exam_id INT NOT NULL,
paper_name VARCHAR(100),
FOREIGN KEY (exam_id) REFERENCES exam(exam_id)
);
4️⃣ 题目表(question)
CREATE TABLE question (
question_id INT PRIMARY KEY AUTO_INCREMENT,
paper_id INT NOT NULL,
question_type ENUM('single_choice', 'multiple_choice', 'true_false', 'short_answer'),
question_text TEXT NOT NULL,
options JSON, -- 选项(选择题时用 JSON 存储)
correct_answer VARCHAR(255), -- 正确答案
score INT DEFAULT 1,
FOREIGN KEY (paper_id) REFERENCES paper(paper_id)
);
5️⃣ 学生考试记录表(student_exam)
记录学生参加的考试和试卷
CREATE TABLE student_exam (
id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT NOT NULL,
exam_id INT NOT NULL,
paper_id INT NOT NULL,
start_time DATETIME,
end_time DATETIME,
total_score INT DEFAULT 0,
FOREIGN KEY (student_id) REFERENCES student(student_id),
FOREIGN KEY (exam_id) REFERENCES exam(exam_id),
FOREIGN KEY (paper_id) REFERENCES paper(paper_id)
);
6️⃣ 学生答题表(student_answer)
记录每道题的答案
CREATE TABLE student_answer (
id INT PRIMARY KEY AUTO_INCREMENT,
student_exam_id INT NOT NULL,
question_id INT NOT NULL,
answer_text VARCHAR(255), -- 学生答案
is_correct BOOLEAN, -- 判题结果
score INT DEFAULT 0, -- 得分
FOREIGN KEY (student_exam_id) REFERENCES student_exam(id),
FOREIGN KEY (question_id) REFERENCES question(question_id)
);
🎯 三、设计亮点与可扩展点
✅ 一场考试可有多套试卷(paper),方便 A/B 卷或随机抽卷
✅ 题目支持多种类型(选择题、判断题、简答题)
✅ 学生考试记录与答题分离,便于查询成绩和回溯答题详情
✅ 选项用 JSON 存储,灵活支持动态选项
✅ 后续可扩展:
-
添加教师表(teacher)关联出卷人
-
增加题库(题目复用)
-
支持在线判卷和人工阅卷字段
📝 四、简单业务查询示例
查询某学生的考试成绩:
SELECT s.name, e.exam_name, se.total_score
FROM student_exam se
JOIN student s ON se.student_id = s.student_id
JOIN exam e ON se.exam_id = e.exam_id
WHERE s.student_no = '202401001';
查询学生的答题详情:
SELECT q.question_text, sa.answer_text, sa.is_correct, sa.score
FROM student_answer sa
JOIN question q ON sa.question_id = q.question_id
WHERE sa.student_exam_id = 123;
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)