0

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

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

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

4

5 回答 5

3

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

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

于 2009-12-08T14:43:51.630 回答
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)值。

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

于 2009-12-08T14:52:26.367 回答
0

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

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

于 2009-12-08T14:52:47.410 回答
0

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

于 2009-12-08T14:56:00.727 回答
0

这些调查问题总是有一个通用的答案:这取决于您在完成后要如何处理这些答案。

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

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

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

于 2009-12-08T14:58:44.903 回答