テーブル問題があり、T/F 問題と複数選択問題の 2 種類の問題があります。質問の一般的な列と、T/F の質問と複数選択の質問の特定の列を含む動的テーブルを作成することは可能ですか?
この問題を解決するモデルを作成する方法を教えてくれる人はいますか? ありがとう 。
質問とその選択肢を別々の表に分割します。質問とそのオプションの間のマッピングを定義する 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でテーブルを微調整できます。