0

5つのdbテーブルがありますが、テーブルに問題があります。各質問が外部キーを介してどのセッションに属するかがわかるため、そのテーブルにフィールドStudent_Answerを含める必要があるかどうかはわかりません。SessionId私は確認するように頼んだほうがいいと思いました:

以下は表です。

セッションテーブル

SessionId (auto PK) SessionName
1                   DOEEO
2                   EFOEO
3                   EOEOW

質問表:

QuestionId (Auto PK) QuestionNo  QuestionContent  SessionId (Fk)
1                    1           Question 1       1
2                    2           Question 2       1
3                    3           Question 3       2
4                    4           Question 4       2           
5                    5           Question 5       3

回答表:

AnswerId (Auto PK)  Answer  QuestionId(Fk) 
1                   A       1
2                   C       1
3                   B       2
4                   C       3
5                   A       4
6                   D       5
7                   E       5

学生用テーブル:

StudentId (Auto PK)  StudentForename   StudentSurname
1                    Joe               Price
2                    Kyle              May
3                    Mark              Knowles

Student_Answerテーブル:

StudentAnswerId (auto PK) SessionId(FK) QuestionId (FK) StudentAnswer  StudentId (FK)
1                         1             1               C              1
2                         1             1               B              1
3                         1             1               A              2
4                         1             1               C              2
5                         1             2               C              1
6                         1             2               B              2
7                         2             3               A              1
8                         2             3               C              2
4

2 に答える 2

0

StudentAnswerテーブルのSessionIDフィールドが不要なだけでなく、StudentAnswerIdフィールドも必要ありません。必要なのは、QuestionID、StudentId、およびStudentAnswerだけです。主キーはQuestionIdとStudentIdになります。

これは多対多の関係と呼ばれます。

于 2013-01-31T02:23:02.187 に答える
0

そうした場合、正規化ルールに反するため、厳密に言えば、答えはノーになります。ただし、それは非正規化が常に悪いということではありません。これを行う際の主な問題は、両方の数値を更新するのを忘れた場合に、アプリケーションの問題を検出することがより困難になることです。

一度設定した質問のセッション番号を変更できない場合、これはそれほど大きな問題ではありませんが、変更できる場合は、他のテーブルで変更しないと問題になります。 。これが、1か所にまとめた方がよい理由です。

そうは言っても、そもそもセッションを最高の場所に置いているのではないかと思います。セッションを回答や生徒ではなく質問に結び付ける必要がある理由を説明できますか?システムを知らなくても、セッションは質問テーブルではなく学生テーブルに保存する必要があると思います。

編集:SessionIdを生徒の回答テーブルに追加する代わりに、通常は、必要なすべての情報を含むビューを作成するだけです。ビューが人間が読めるようにするためだけのものである場合は、idフィールドを含める必要はなく、実際のセッション名をビューに表示するだけです。ただし、コーディングを容易にするものを作成しようとしているだけの場合は、ビューにIDも含めることができます。

于 2013-01-31T02:28:33.140 に答える