5

所以我有一个 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 回答