有多个答案的“问题”和“答案”

时间:2009-12-08 14:40:23

标签: mysql sql rdbms rdbms-agnostic

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

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

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

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

我有两个建议。

  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)值。

  3. 恕我直言,除非你看到选择的数量有所改变,否则我会坚持使用选项2.这是一个更快的选择,很可能也会节省你的空间。

答案 2 :(得分:0)

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

如果用户从网页上的一组复选框中选择了他们的答案(假设它是一个网络应用程序),那么你也会从那里找回一个以逗号分隔的列表。 (虽然您不能仅将列表作为字符串进行比较,因为答案“红色,蓝色”与“蓝色,红色”相同。)

答案 3 :(得分:0)

另一种选择,(我已经看到这样的问题也是如此得分的情况)是将每个可能的答案视为单独的是/否问题,并记录受试者的回答(选择它,或者没有)作为布尔...

答案 4 :(得分:0)

这些调查问题总是有一个通用的答案:取决于你完成答案时想要做什么。

例如,如果您想要的是保留每个答案的记录(并且从不进行任何总计或找到所有用答案y回答问题x的用户),那么最简单的设计是将答案反规范化为一个序列化的领域。

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

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