[英]database schema for storing questionnaires and multiple choice answers
在设计用于问卷和多项选择答案的数据库架构时,我们需要一些帮助。
第一种选择是设计一个问题表和一个答案表,如下所示
* Question Table
- question_id auto integer
- question varchar
* Answer Table
- user_id integer
- question_id integer
- answer integer
但是,这种设计的问题在于,当用户提交对问卷的答案时,需要插入多行,因此写入和检索都将变慢。 而且,桌子会很大。 但是,这样做的好处是它可以扩展并且可以轻松添加新问题。
另一种方法是将所有答案放在同一行但在另一列中,如下所示
* Answer Table
- user_id integer
- answer_1 integer
- answer_2 integer
...
- answer_n integer
优点是,一次只写入或检索一行,因此比第一种方法快得多。 但是,模式将是严格的,并且如果添加任何新问题,则必须更改数据库模式以适应新列。
我们有超过300万用户,每个用户有多个调查表。 因此,速度绝对是一个标准。 根据这一标准,您更喜欢哪一个? 还有其他选择吗?
谢谢
您在第二种情况下建议的预期非规范化肯定会带来一些性能提升。 最大的问题是,您是否需要能够高效地搜索数据-可能无法收集关于答案的高级统计信息(即,有多少人给出3至6个答案)。
如果您不需要统计信息,则第二种选择更好(在性能方面)。 如果这样做,也许您应该坚持常规形式。
一种折衷方法是使用JSON而不是列来存储数据。 结果可能存储在PostgreSQL的jsonb
列之类的jsonb
,可以轻松查询。 但是,您的问题被标记为mysql
,所以我不知道它是否适合您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.