【问题标题】:Database design for preset/custom choice questions预设/自定义选择题的数据库设计
【发布时间】:2012-10-02 10:09:49
【问题描述】:

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

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

【问题讨论】:

    标签: mysql sql database forms database-design


    【解决方案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 是基于布尔值的答案(来自问题响应类型表)

    【讨论】:

      【解决方案2】:

      如果我是你,我会这样做:

      Table Answers:
      question_id INT(11)
      answer_id INT(11)
      preset_answer TINYINT(1) //1, 2, 3 for three answers
      custom_answer VARCHAR(255)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-23
        • 1970-01-01
        • 2012-10-05
        • 2011-06-10
        • 1970-01-01
        • 2017-04-06
        • 1970-01-01
        相关资源
        最近更新 更多