这个问题与这篇文章有关: SQL design for survey with answers of different data types
我有一个调查应用,其中大多数问题都有一组1-5的答案。现在我们必须做可能有各种不同答案类型的问题 - 数字,日期,字符串等。感谢堆栈的建议,我选择了一个字符串列来存储答案。有些问题是多项选择,因此除了表格“问题”之外,我还有一个表'答案',其中包含一组问题的可能答案。
现在:我应该如何存储“选择所有适用的”问题的答案?我应该创建一个“selected_answers”或类似的子表吗?或者答案表是否有一个“选定”列,表明受访者选择了答案?
答案 0 :(得分:3)
一个可能的解决方案是一个包含4列的UsersAnswers表:主键,用户ID,问题ID和答案ID
对于可以选择多个答案的任何问题,可以有多个条目
答案 1 :(得分:0)
我有两个建议。
规范化您的数据库,并创建一个名为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
);
在answers
表格中创建五个列,每个列都引用一个特定的答案。在MySQL中,我会将这些列设置为bit(1)
值。
恕我直言,除非你看到选择的数量有所改变,否则我会坚持使用选项2.这是一个更快的选择,很可能也会节省你的空间。
答案 2 :(得分:0)
由于您不会选择多个选项,因此我很想将答案存储为字符串答案列中以逗号分隔的值列表。
如果用户从网页上的一组复选框中选择了他们的答案(假设它是一个网络应用程序),那么你也会从那里找回一个以逗号分隔的列表。 (虽然您不能仅将列表作为字符串进行比较,因为答案“红色,蓝色”与“蓝色,红色”相同。)
答案 3 :(得分:0)
另一种选择,(我已经看到这样的问题也是如此得分的情况)是将每个可能的答案视为单独的是/否问题,并记录受试者的回答(选择它,或者没有)作为布尔...
答案 4 :(得分:0)
这些调查问题总是有一个通用的答案:取决于你完成答案时想要做什么。
例如,如果您想要的是保留每个答案的记录(并且从不进行任何总计或找到所有用答案y回答问题x的用户),那么最简单的设计是将答案反规范化为一个序列化的领域。
如果您需要总计,如果您在汇总表中计算总数并在提交测验时更新值,则可能还可以将非规范化答案放入序列化表中。
因此,对于您的具体问题,您需要确定当您的意思是“以上所有”时,对您的最终产品存储5是否更有用,或者如果每个产品更有用单独选择四个选项。