5

そのため、ユーザーが3つのプリセット応答のいずれかをチェックするか、独自のカスタム回答を作成することで、単一選択の質問に回答できるHTMLフォームがあります。

これは明らかに多対多の関係ですが、両方のタイプ(TEXTとBOOLEAN)を処理するようにデータベーステーブルを設計する適切な方法を見つけることができません。私の現在の手っ取り早い解決策は、カスタム回答のためにジャンクションテーブルに特定のchoice_idをハードコーディングすることです。私はこれのためのより良いパターンを探しています。

4

2 に答える 2

1

次の表を用意してください。

表1:Question

  QuestionID (ID)
  QuestionText (Text) 

表2:Question Response

  QuestionResponseId (ID)
  QuestionResponseTypeId (References Question Response Type)
  QuestionResponseDetailsId (References Question Response Details) - This should be used for text only values (Custom Answers)
  QuestionResponse (Boolean) 

表3:Question Response Type

  QuestionResponseTypeId (Id)
  Description (Text)  -- Dictates if the answer is a boolean or a text field

表4:Question Response Details

   QuestionResponseDetailsId (Id)
   Description (Text) - Holds the text answer to the questions

次のテーブルにデータが入力されると、質問、質問の応答(テキストまたはブール値)を保持する構造が作成されます。

次に、これをフィルタリングして、テキストベースの回答のみを表示できます。次に例を示します。

SELECT * FROM QuestionResponse
INNER JOIN QuestionResponseDetails ON QuestionResponse.QuestionResponseDetailsId = QuestionResponseDetails.QuestionResponseDetailsId
WHERE QuestionResponse.QuestionResponseTypeId = 1

ここで、1はテキストベースの回答で、2はブールベースの回答です(質問回答タイプテーブルから)

于 2012-10-02T10:17:46.677 に答える
0

もし私があなたなら、私はこのようなことをするでしょう:

Table Answers:
question_id INT(11)
answer_id INT(11)
preset_answer TINYINT(1) //1, 2, 3 for three answers
custom_answer VARCHAR(255)
于 2012-10-02T10:23:31.997 に答える