【问题标题】:Ways to improve this schema/abstraction?改进这种模式/抽象的方法?
【发布时间】:2013-06-07 16:09:21
【问题描述】:

我正在为在线考试模块制作一个 web 应用程序,并且想知道如何改进我当前的设计和抽象。考试是多项选择。

到目前为止,我的数据库中有三个表:

1.考试

  • exam_id(primary, auto-inc)
  • exam_name - 例如:“物理”等
  • 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_category
  • question_name - 唯一的,varchar,用来识别问题的东西(我打算使用这个字段,所以我有一个参考来添加答案选项,但感觉没有必要)

3.回答

  • answer_id - PK、auto_inc
  • question_id - 外键引用问题中的 question_id。更新/删除级联
  • answer_text
  • answer_correct - 指示其是否正确答案的小整数
  • 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 查询该表以返回学生的分数。

【问题讨论】:

    标签: java hibernate jpa schema persistence


    【解决方案1】:

    关于考试表中的 num_question 属性,这是必要的吗?从 Question 表中计算行数会不准确吗?

    另外,points_per_question 是否取决于考试或问题? (我认为它基于问题)。如果是这样,那么它应该是 Question 表的一个属性,也许还有 time_per_question 属性。 (困难或较长的问题需要更多时间?)这一切都基于您最初的要求。

    否则,我觉得没问题。

    【讨论】:

      【解决方案2】:

      Appart 来自 JPA,对于您编写的每个类,如果可能,您应该使用接口而不是具体类来声明您的 bean 变量。使用 java.util.List 而不是 java.util.ArrayList。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-18
        • 2016-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多