Database design 数据库调查建模的再思考
我正在启动一个新项目(一个调查应用程序),我选择RejectionDB作为我的数据库;然而,我对数据建模有一些疑问。我将提出每个用户只能回答一次的问题。此外,我将有报告,将告诉用户选择每个选项的百分比。首先,我想到了以下建模:Database design 数据库调查建模的再思考,database-design,rethinkdb,database,nosql,Database Design,Rethinkdb,Database,Nosql,我正在启动一个新项目(一个调查应用程序),我选择RejectionDB作为我的数据库;然而,我对数据建模有一些疑问。我将提出每个用户只能回答一次的问题。此外,我将有报告,将告诉用户选择每个选项的百分比。首先,我想到了以下建模: { title: String, total_answers: Number, options: [{ value: Number, label: String, respondents: [User IDs] }] } 问题是R
{
title: String,
total_answers: Number,
options: [{
value: Number,
label: String,
respondents: [User IDs]
}]
}
问题是RequiredDB建议在一个数组中只嵌入几百个条目,我可能会在每次调查中有500多个受访者。
另一个选项是创建一个答案
表,并链接到问题id和选项,但报告查询可能是一个问题,因为每次调查我都会有很多问题
我应该走哪条路?
谢谢 首先,这是嵌入与连接之间的经典数据建模。因为它是经典的,让我们回顾一下我们已经拥有的,以供参考:
选项.represponder
数组时,RequiredDB将重写整个文档。您还将有许多用户回答调查,调查将被添加到选项中。同时,受访者也将回答。这意味着大量的写作
在我看来,在应用范围内,嵌入式对于不需要独立存在的数据是很好的。这意味着数据总是与其父级一起使用,很少需要单独访问拥有数据的数据,最好嵌入
对于需要频繁访问的数据,其本身应该属于其他表。并使用JOIN
运行报告,合并结果
在编写时,您确实希望运行查询报告,这表明您应该将其分开。它提供了极大的灵活性,因为您在自己的表中有东西,您不必深入数组并转换数据
RejectionDB支持JOIN,您可以将eqJoin
与索引一起使用,或者concatMap
和getAll
与索引一起使用,使查询更加高效。对于您的用例,我会说让我们一起加入
分离出来可能更容易运行聚合。如统计一季度系统参与调查的用户数
我仍然不清楚您所拥有的数据类型,如果您可以更新您想要输入哪种数据的问题,我可以帮助您围绕它创建一个数据模型