【问题标题】:'questions' and 'answers' with multiple answers带有多个答案的“问题”和“答案”
【发布时间】:2009-12-08 14:40:22
【问题描述】:

这个问题与这篇文章有关: SQL design for survey with answers of different data types

我有一个调查应用程序,其中大多数问题都有一组 1-5 的答案。现在我们要做的问题可能有各种不同的答案类型——数字、日期、字符串等。感谢堆栈的建议,我用一个字符串列来存储答案。有些问题是多项选择,所以除了“问题”表外,我还有一个“答案”表,其中包含问题的一组可能答案。

现在:我应该如何存储“选择所有适用的”问题的答案?我应该制作一个“chosen_answers”或类似的子表吗?或者答案表是否应该有一个“选择”列,表明受访者选择了该答案?

【问题讨论】:

    标签: mysql sql rdbms rdbms-agnostic


    【解决方案1】:

    一个可能的解决方案是一个包含 4 列的 UsersAnswers 表:主键、用户 ID、问题 ID 和答案 ID

    对于可以选择多个答案的任何问题都有多个条目

    【讨论】:

      【解决方案2】:

      我有两个建议。

      1. 规范化您的数据库,并创建一个名为question_answer 的表,或者更符合您的架构命名法的表。这就是我的布局。

        CREATE TABLE question_answer (
            id INT NOT NULL AUTO INCREMENT PRIMARY KEY,
            user_id INT NOT NULL,
            question_id INT NOT NULL,
            answer_id INT NOT NULL
        );
        
      2. answers 表中创建五列,每一列都指向一个特定的答案。在 MySQL 中,我会将这些列设置为 bit(1) 值。

      恕我直言,除非您看到选择的数量发生了变化,否则我会坚持使用选项 2。这是一个更快的选项,而且很可能还会为您节省空间。

      【讨论】:

        【解决方案3】:

        由于您不会选择很多选项,我很想将答案作为逗号分隔的值列表存储在字符串答案列中。

        如果用户从带有问题的网页上的一组复选框中选择他们的答案(假设它是一个网络应用程序),那么您也会从那里得到一个逗号分隔的列表。 (尽管您不能只将列表作为字符串进行比较,因为答案“red,blue”与“blue,red”相同。)

        【讨论】:

        • 是的,这很诱人,:D 虽然 Jimmy 看起来很合适。
        • 这个想法也让我印象深刻,但是当我尝试运行汇总报告时似乎有问题 - 如果我想获得一组调查的唯一值及其各自的计数,这将涉及一些重大问题字符串解析。
        • 如果您确实想生成类似“选择所有适用问题的最常见错误答案”之类的报告,这可能是个问题。
        【解决方案4】:

        另一种选择(我也见过这样的问题也是这样评分的)是将每个可能的答案视为单独的是/否问题,并记录被试者的回答(选择它,或没有)作为布尔值......

        【讨论】:

          【解决方案5】:

          这些调查问题总是有一个通用的答案:这取决于您在完成后想对这些答案做什么。

          例如,如果您只想记录每个单独的答案(并且永远不要进行任何总计或查找所有回答问题 x 和答案 y 的用户),那么最简单的设计是将答案非规范化为一个序列化的字段。

          如果您需要总计,如果您在汇总表中计算总计并在提交测验时更新值,您也可以将非规范化答案放入序列化表中。

          所以对于您的具体问题,您需要确定当您的意思是“以上所有”时,存储 5 是否对您的最终产品更有用,或者是否将每个四个选项单独选择。

          【讨论】:

          • 我们希望生成汇总给定时间段(和其他属性)的答案计数的报告。我们没有“以上所有”的问题,但我可以很容易地预见到“选择所有(阅读:任何)适用”
          猜你喜欢
          • 1970-01-01
          • 2018-04-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多