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

6pp0gazn  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(498)

我们需要一些帮助来设计调查问卷和多项选择答案的数据库模式。
第一个选项是设计问题表和答案表,如下所示


* Question Table

   - question_id    auto integer
   - question       varchar

 * Answer Table
   - user_id        integer
   - question_id    integer
   - answer         integer

然而,这种设计的问题是,当用户提交问卷答案时,需要插入多行,因此写和检索都会比较慢。而且,table会变得很大。但是,它的优点是可以扩展,并且可以很容易地添加新问题。
另一种方法是将所有答案放在一行不同的列中,如下所示


* Answer Table

   - user_id        integer
   - answer_1       integer 
   - answer_2       integer 
   ...
   - answer_n       integer

优点是,一次只能写入或检索一行,因此比第一种方法快得多。然而,schema将是严格的,如果添加了任何新的问题,db schema将不得不更改以容纳新的列。
我们有超过300万用户,每个用户有多份调查问卷。因此速度绝对是一个标准。根据这个标准,你更喜欢哪一个?还有别的选择吗?
谢谢

dl5txlt9

dl5txlt91#

您在第二种情况中提出的预期的非规范化肯定会产生一些性能增益。最大的问题是,如果你需要能够有效地搜索数据——比如说,你可能无法收集关于答案的高级统计数据(即有多少人给出了3到6个答案)。
如果您不需要统计信息,那么第二个选项更好(性能方面)。如果你这样做了,也许你应该坚持正常形式。
一种折衷方法是使用json而不是列来存储数据。结果可能存储在类似postgresql的文件中 jsonb 列,便于查询。您的问题已标记 mysql 不过,我不知道你是否有选择。

相关问题