0

ユーザーが複数の質問の正解を選択する必要があるコンテスト システムを実装しています。毎週、新しい問題のセットがあります。ユーザーの参加をデータベースに保存する正しい方法を見つけようとしています。現在、次のデータモデルがあります。

 Participation                     Week
+--------------+                  +--------------+
| Id           |     +----------->| Id           |<-+
| UserId       |     |            | StartDate    |  |
| WeekId       |-----+            +--------------+  |
+--------------+                                    |
                                   Question         |
                                  +--------------+  |
                                  | Id           |  |
                                  | WeekId       |--+
                                  | Text         |
                                  +--------------+

私が思いついた唯一の解決策は、次の図に示すように、参加を質問に関連付ける Answer テーブルを追加することです。

    Participation                     Week
   +--------------+                  +--------------+
+->| Id           |     +----------->| Id           |<-+
|  | UserId       |     |            | StartDate    |  |
|  | WeekId       |-----+            +--------------+  |
|  +--------------+                                    |
|                                     Question         |
|       Answer                       +--------------+  |
|      +------------------+    +---->| Id           |  |
+------| ParticipationId  |    |     | WeekId       |--+
       | QuestionId       |----+     | Text         |
       | Value            |          +--------------+
       +------------------+

参加者は別の週の質問に回答できるため、このソリューションが非常に優れているとはリンクしません。回答に WeekId を追加しても役に立ちません。

この情報を表す正しい方法は何ですか?

4

3 に答える 3

1

テーブルParticipationのIdフィールドを削除し、テーブルParticipationの合成/連結された主キーとして(UserId、WeekId)を使用できます。テーブルAnswerのフィールドParticipationIdは、テーブルParticipationへの外部キー参照としてペア(UserId、WeekId)に置き換える必要があります。データベースシステムで許可されている場合は、テーブルQuestionの参照への回答(Id、WeekId)テーブルのフィールド(QuestionId、WeekId)を定義できます。たぶんこれのためにあなたは前のテーブルQuestionのペア(Id、WeekId)にインデックスを定義しなければなりません。

于 2009-07-30T16:10:41.423 に答える
0

あなたは本当に参加をその週に関連付ける必要がありますか?あなたは質問を通してそれを得ることができます

それで:

  • Answer(Id、UserId、QuestionId、Value)
  • 質問(Id、WeekId、Text)
  • Week(Id、StartDate)
于 2009-07-30T16:07:44.923 に答える
0

個人的には、ここに適切な実装があると思います。

ParticipationIdは、ユーザーと週でキー設定された参加のIDにリンクします。質問テーブルにもWeekIdがキー設定されています。

したがって、あなたはずっと適切な参照を持っています。そうでない場合は、いくつかのデータを確認する必要があると思います

于 2009-07-30T16:08:29.853 に答える