我正在为在线考试模块制作一个 webapp,并且想知道如何改进我当前的设计和抽象。考试是选择题。
到目前为止,我的数据库中有三个表:
1.考试
- 考试ID(主要,自动公司)
- 考试名称 - 例如:“物理”等
- num_questions
- time_per_question
- points_per_question
2.问题
- question_id - 主键,auto_inc
- Exam_id - 在更新和删除时,FK 在考试中引用exam_id - 级联
- question_text - 实际问题本身
- question_figure - 如果问题附有图像,则文件的名称(例如:graph.jpg)。可以为空
- 问题类别
- question_name - 唯一的,varchar,用来识别问题的东西(我打算使用这个字段,所以我有一个参考来添加答案选项,但感觉没有必要)
3.回答
- answer_id - PK,auto_inc
- question_id - 外键引用问题中的 question_id。更新/删除级联
- answer_text
- answer_correct - 微小的 int 表示它是否是正确的答案
- answer_name - 唯一,varchar,对答案的引用,与 question_name 是对问题的相同
这就是我对课程的想法:
public class Exam
{
private int Id;
private String name;
private int timePerQuestionInSeconds;
private int pointsPerQuestion;
private int numberOfQuestions;
private ArrayList<Question> questionList;
}
public class Question
{
private int Id;
private int examID;
private String text;
private String figure;
private String category;
private String name;
private ArrayList<Answer> answers;
}
public class Answer
{
private int id;
private int questionId;
private String text;
private boolean correct;
private String name;
}
所以要参加考试,我必须从考试中选择byexamname,然后从问题中选择byexamId,然后从答案中选择byquestionid。然后获取这些结果集并将它们映射到对象。
相反,如果我要使用 JPA 来持久化这些实体,是否可以持久化实体的 ArrayList?我在课堂考试中是否正确
@OneToMany(targetEntity=Question.class, mappedBy="examID")
私有数组列表(问题);
在课堂上我应该有
@ManyToOne
私人考试ID;
设置所需的关系?顺便说一句,我正在使用 Java SE,所以我不确定我是否拥有 Java EE 对 beans 的所有支持。
我还需要某种方式来存储学生的考试成绩。我正在考虑有一个表分数,它对学生 ID 有 fk,我可以通过学生 ID 查询该表以返回学生的分数。