2012-10-02 65 views
5

因此,我有一個HTML表單,用戶可以通過勾選三個預設答案中的一個來回答單選題,或者編寫自己的自定義答案。雖然這顯然是一個多對多的關係,但我仍然無法找到設計數據庫表的正確方法,以便處理這兩種類型(TEXT和BOOLEAN)。我目前的快速而骯髒的解決方案是在聯結表中對特定的choice_id進行硬編碼以獲得自定義答案。我正在尋找一個更好的模式。預設/自定義選擇問題的數據庫設計

回答

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是一個布爾基於答案(從問題的回答類型表)

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)