预设/自定义选择问题的数据库设计

Meh*_*uni 5 mysql sql database forms database-design

所以我有一个HTML表单,用户可以通过复选三个预设响应中的一个来回答单选问题,或者编写自己的自定义答案.

虽然这显然是一个多对多的关系,但我仍然找不到合适的方法来设计数据库表,以便处理这两种类型(TEXT和BOOLEAN).我目前的快速和肮脏的解决方案是在联结表中对特定的choice_id进行硬编码以获得自定义答案.我正在寻找一个更好的模式.

Dar*_*ren 1

有下表:

表格1:Question

  QuestionID (ID)
  QuestionText (Text) 
Run Code Online (Sandbox Code Playgroud)

表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) 
Run Code Online (Sandbox Code Playgroud)

表3:Question Response Type

  QuestionResponseTypeId (Id)
  Description (Text)  -- Dictates if the answer is a boolean or a text field
Run Code Online (Sandbox Code Playgroud)

表 4:Question Response Details

   QuestionResponseDetailsId (Id)
   Description (Text) - Holds the text answer to the questions
Run Code Online (Sandbox Code Playgroud)

填充下表后,您将拥有一个包含问题、问题的响应(文本或布尔值)的结构。

然后,您可以对此进行过滤以仅查看基于文本的答案,例如:

SELECT * FROM QuestionResponse
INNER JOIN QuestionResponseDetails ON QuestionResponse.QuestionResponseDetailsId = QuestionResponseDetails.QuestionResponseDetailsId
WHERE QuestionResponse.QuestionResponseTypeId = 1
Run Code Online (Sandbox Code Playgroud)

其中 1 是基于文本的答案,2 是基于布尔值的答案(来自问题响应类型表)