0

簡単なクイズ アプリケーションのスキーマを設計しています。「質問」と「回答の選択肢」の 2 つのテーブルがあります。質問テーブルには、「質問 ID」、「質問テキスト」、および「回答 ID」列があります。「回答の選択肢」テーブルには、「質問 ID」、「回答 ID」、および「回答テキスト」列があります。この単純なスキーマを使用すると、質問に複数の回答選択肢を含めることができるため、回答選択肢テーブルが必要になることは明らかです。ただし、質問の正解は 1 つしかないため、質問表に「回答 ID」が必要です。ただし、質問表のこの「回答 ID」列は、正しくない 1 つの回答に対して複数の質問があるかのように錯覚させます。この錯覚を解消するもう 1 つの方法は、2 つのテーブル間で 1 対 1 の関係を持つ質問 ID と回答 ID の 2 つの列だけを持つ、正解専用の別のテーブルを用意することです。しかし、これは冗長だと思います。これをどのように設計するのが最善かについての推奨事項はありますか?それにより、質問には複数の回答の選択肢があり、正解は1つしかないというルールが適用されますか? どうもありがとう。

4

4 に答える 4

2

AnswerIDテーブルから列を失いQuestionます。(一種の)循環参照を作成しています。代わりにIsCorrect、テーブルにビット (ブール) 列を含めAnswerます。これにより、将来、その機能が必要になった場合に、複数の正解を柔軟に使用できるようになります。

Matti の指摘によると、Answer-record の INSERT/UPDATE のトリガーは、質問ルールごとにゼロまたは 1 つの正解を強制します。

于 2010-05-18T22:21:00.913 に答える
2

列に名前を付けるだけではどうCorrectAnswerIdですか?誰もそれを他の何かと間違えることはないと思います。

于 2010-05-18T22:21:15.327 に答える
0

3 つのテーブル (多くの「はい」「いいえ」を使用できるため、それを複製する必要があり、後で「いいえ」を「いいえ」に簡単に変更できるため)。表は、questions_answersいくつかの質問に対するいくつかの回答をマッピングします。(これは多対多の関係です)。

質問:

  • ID
  • 説明
  • correct_answer_id

答え:

  • ID
  • 説明

質問と回答:

  • question_id
  • answer_id
于 2010-05-18T22:25:09.983 に答える
0

質問
- id
- question_text

1、「左か右か」

answer_choices
- ID
- question_id
- answer_text
- 正解

1、1、「左」、1
2、1、「右」、0

回答
- id
- question_id
- user_id
- answer_choices_id

1, 1, 1234, 2 // 違います!
1, 1, 5678, 1 // やった

したがって、基本的には、最初にテーブルから質問をクエリし、次にによって質問にリンクされているテーブルquestionsから可能な回答をクエリします。答えが出たら、選択したものをテーブルと照合して、1 か 0 かを確認します。answer_choicesquestion_idanswer_choices_idanswer_choicescorrect

于 2010-05-18T22:26:34.860 に答える