1

私はオンライン試験モジュール用の webapp を作成していますが、現在の設計と抽象化をどのように改善できるか疑問に思っていました。試験は選択式です。

これまでのところ、データベースには 3 つのテーブルがあります。

1.試験

  • Exam_id(プライマリ、自動インク)
  • 試験名 - 例:「物理学」など
  • num_questions
  • time_per_question
  • points_per_question

2.質問

  • question_id - 主キー、auto_inc
  • Exam_id - 試験中の Exam_id を参照する FK、更新および削除時 - カスケード
  • 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 - 正しい答えかどうかを示す小さな 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;
}

したがって、試験を受けるには、exam から selectbyexamname を選択し、次に question から selectbyexamId を選択し、次に answer から selectbyquestionid を選択する必要があります。次に、これらの結果セットを取得してオブジェクトにマップします。

代わりに、JPA を使用してこれらのエンティティを永続化する場合、エンティティの ArrayList を永続化することは可能ですか? そして、私はクラスの試験でそれで正しいですか

@OneToMany(targetEntity=Question.class、mappedBy="examID")

プライベートArrayList(質問);

そしてクラスの質問で私は持っているべきです

@ManyToOne

プライベート試験ID;

望ましい関係をセットアップするには?ところで、私は Java SE を使用しているので、Java EE が持っている Bean をすべてサポートしているかどうかはわかりません。

また、学生が受けた試験のスコアを保存する方法も必要です。私は、学生IDへのfkを持つテーブルスコアを持つことを考えていました。学生IDでそのテーブルをクエリして、学生のスコアを返すことができました。

4

2 に答える 2

0

あなたの試験表の num_question 属性に関して、これは必要ですか? Question テーブルの行を数えるのは正確ではないでしょうか?

また、points_per_question は試験または質問に依存していますか? (私はその質問に基づいていると考えています)。もしそうなら、おそらく time_per_question 属性と一緒に、それは Question テーブルの属性であるべきです。(難しい質問や長い質問で時間がかかりますか?) これはすべて、元の要件に基づいています。

そうでなければ、私には問題ないように見えます。

于 2013-06-11T18:38:54.863 に答える
0

JPA とは別に、作成するすべてのクラスについて、可能であれば、具象クラスではなくインターフェイスで Bean 変数を宣言する必要があります。java.util.ArrayList の代わりに java.util.List を使用します。

于 2013-06-11T17:55:31.197 に答える