簡単なクイズ アプリケーションのスキーマを設計しています。「質問」と「回答の選択肢」の 2 つのテーブルがあります。質問テーブルには、「質問 ID」、「質問テキスト」、および「回答 ID」列があります。「回答の選択肢」テーブルには、「質問 ID」、「回答 ID」、および「回答テキスト」列があります。この単純なスキーマを使用すると、質問に複数の回答選択肢を含めることができるため、回答選択肢テーブルが必要になることは明らかです。ただし、質問の正解は 1 つしかないため、質問表に「回答 ID」が必要です。ただし、質問表のこの「回答 ID」列は、正しくない 1 つの回答に対して複数の質問があるかのように錯覚させます。この錯覚を解消するもう 1 つの方法は、2 つのテーブル間で 1 対 1 の関係を持つ質問 ID と回答 ID の 2 つの列だけを持つ、正解専用の別のテーブルを用意することです。しかし、これは冗長だと思います。これをどのように設計するのが最善かについての推奨事項はありますか?それにより、質問には複数の回答の選択肢があり、正解は1つしかないというルールが適用されますか? どうもありがとう。
4 に答える
AnswerID
テーブルから列を失いQuestion
ます。(一種の)循環参照を作成しています。代わりにIsCorrect
、テーブルにビット (ブール) 列を含めAnswer
ます。これにより、将来、その機能が必要になった場合に、複数の正解を柔軟に使用できるようになります。
Matti の指摘によると、Answer-record の INSERT/UPDATE のトリガーは、質問ルールごとにゼロまたは 1 つの正解を強制します。
列に名前を付けるだけではどうCorrectAnswerId
ですか?誰もそれを他の何かと間違えることはないと思います。
3 つのテーブル (多くの「はい」「いいえ」を使用できるため、それを複製する必要があり、後で「いいえ」を「いいえ」に簡単に変更できるため)。表は、questions_answers
いくつかの質問に対するいくつかの回答をマッピングします。(これは多対多の関係です)。
質問:
- ID
- 説明
- correct_answer_id
答え:
- ID
- 説明
質問と回答:
- question_id
- answer_id
質問
- 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_choices
question_id
answer_choices_id
answer_choices
correct