我正在编写一个基本的事件注册Web应用程序,我想知道MongoDB是否是数据存储区的一个好选择,如果是,那么如何建模我的域。该应用程序将非常小,因此性能和可伸缩性不是一个问题,但是当我开始用RDBMS第三范围的术语来思考模型时,它听起来很复杂,而且从我正在拾取的零碎部分开始关于Mongo,听起来像一个典型的用例。是吗?
应用
该应用程序允许创建事件,并为与会者注册这些事件,提供他们的姓名,出生日期等。轻松,两个表与n :n加入。棘手的部分是组织者希望能够向与会者询问特定事件的某些事件,例如,在一个事件中可能存在关于他们的住宿偏好的问题。我将其缩小为两类问题:需要从某些选项中选择的那些(将是HTML选择列表)和允许自由文本答案的问题。顺便说一句,它是一个Rails应用程序,以防万一。
传统RDBMS
在RDBMS中我可能需要一个用于约束问题的表格(其中答案来自列表),答案选项的表格,的表格自由文字问题和免费文字答案;并通过注册将这一切适当地链接到活动和参与者。如果你考虑一下,表格之间的联系就相当复杂了!
蒙戈
在Mongo中建模会更简单吗?我认为,除了参加者和事件集合之外,如果没有答案,可能会有一个问题集合,其中包含了允许的答案。然后它是自由文本。一个注册集合,它将参加者与活动相关联并引用相关问题的ID,并嵌入答案的文本?如果答案选项的文本发生了变化,它可能会变得复杂......但我猜这是Mongo的权衡。
如果我坚持使用Postgres,这对Mongo来说是一个很好的用例吗?你能建议一个(或改进我的)架构吗?
答案 0 :(得分:0)
Mongodb是这项工作的绝佳工具。您可以在此处使用嵌入式集合来最大化性能。
您当前的架构非常好。通过对嵌入式集合稍微调整一下,这将是一个爆炸。
例如,您可以在参加者中找到问题集合,而不是单独保留问题集合。这样您就可以在一个地方存储有关与会者的所有相关信息。
- Attendee
- Info
- Event_id
- Questions {
-Question id
- Answers [ {
- answer id 1
- or answer text
},{
- answer id 2
- or answer text
}],
}
您还可以在Event集合中缓存有关与会者的常用数据。 这对于快速显示主页数据非常有用。
例如,您可能需要在活动主页中显示参加活动的用户及其计数。为此,您需要先查询事件并查询参加者。
但是我建议你把eventdee_id / name作为一个数组存储在Event中,看起来
Event :
- Info
- attendees {
attendee_id : 'xx'
name : 'Fletch'
}
因此,您可以使用对事件集合的单个数据库调用来填充事件主页。因为您可以获得有关用户的最小信息,并且将在此处检索事件的总用户数。当您需要显示有关用户的更多信息(例如他的问题/答案)时,您可以查询与会者。
希望这有帮助