📚 一、核心实体和关系梳理

  • 学生(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;
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐