0

テーブル問題があり、T/F 問題と複数選択問題の 2 種類の問題があります。質問の一般的な列と、T/F の質問と複数選択の質問の特定の列を含む動的テーブルを作成することは可能ですか?

この問題を解決するモデルを作成する方法を教えてくれる人はいますか? ありがとう 。

4

3 に答える 3

0

質問とその選択肢を別々の表に分割します。質問とそのオプションの間のマッピングを定義する 3 番目のテーブルを用意します。テーブルを正規化すると、True や False などのオプション グループの繰り返しを避けることができます。

テーブル スキーマの大まかな UML スケッチを次に示します。

データベース テーブルの図

主キー/外部キー制約もテーブルに追加する必要があります。簡潔にするためにそれらを省略しました。

CREATE TABLE QUESTIONS
    (`Question_ID` int, `Question_Text` varchar(50), `Answer_ID` int);

INSERT INTO QUESTIONS
    (`Question_ID`, `Question_Text`, `Answer_ID`)
VALUES
    (1, 'True/False question?', 1),
    (2, 'Multiple-choice question?', 5);

CREATE TABLE OPTIONS
    (`Option_ID` int, `Option_Text` varchar(25));

INSERT INTO OPTIONS
    (`Option_ID`, `Option_Text`)
VALUES
    (1, 'TRUE'),
    (2, 'FALSE'),
    (3, 'Option 1'),
    (4, 'Option 2'),
    (5, 'Option 3'),
    (6, 'Option 4');

CREATE TABLE QUESTION_OPTIONS
    (`QnA_ID` int, `Question_ID` int, `Option_ID` int);

INSERT INTO QUESTION_OPTIONS
    (`QnA_ID`, `Question_ID`, `Option_ID`)
VALUES
    (1, 1, 1),
    (2, 1, 2),
    (3, 2, 3),
    (4, 2, 4),
    (5, 2, 5),
    (6, 2, 6);

次に、テーブルを結合して、質問に関連するすべての詳細を取得します。

SELECT Option_Text,
  CASE
    WHEN q.Answer_ID = o.Option_ID THEN 1
    ELSE 0
  END Is_Answer
FROM QUESTIONS q, OPTIONS o, QUESTION_OPTIONS qo
WHERE qo.Option_ID = o.Option_ID
  AND q.Question_ID = qo.Question_ID
  AND q.Question_ID = 1

SELECT Option_Text,
  CASE
    WHEN q.Answer_ID = o.Option_ID THEN 1
    ELSE 0
  END Is_Answer
FROM QUESTIONS q, OPTIONS o, QUESTION_OPTIONS qo
WHERE qo.Option_ID = o.Option_ID
  AND q.Question_ID = qo.Question_ID
  AND q.Question_ID = 2

出力:

+--------------+-----------+
| OPTION_TEXT  | IS_ANSWER |
+--------------+-----------+
| TRUE         |         1 |
| FALSE        |         0 |
+--------------+-----------+

+--------------+-----------+
| OPTION_TEXT  | IS_ANSWER |
+--------------+-----------+
| Option 1     |         0 |
| Option 2     |         0 |
| Option 3     |         1 |
| Option 4     |         0 |
+--------------+-----------+

必要に応じて、 SQL Fiddleでテーブルを微調整できます。

于 2013-09-26T19:29:26.850 に答える