繁体   English   中英

用于存储问卷和多项选择答案的数据库模式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM