所以我有一个HTML表单,用户可以通过复选三个预设响应中的一个来回答单选问题,或者编写自己的自定义答案。
虽然这显然是多对多的关系,但我仍然找不到合适的方法来设计数据库表以便处理这两种类型(TEXT和BOOLEAN)。我目前的快速和肮脏的解决方案是在联结表中对特定的choice_id进行硬编码以获得自定义答案。我正在寻找一个更好的模式。
答案 0 :(得分: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是基于布尔的答案(来自问题响应类型表)
答案 1 :(得分: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)