首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongoid数据库模式

Mongoid数据库模式
EN

Stack Overflow用户
提问于 2013-02-25 21:45:44
回答 1查看 585关注 0票数 0

我们正在使用Rails和Mongoid开发一个应用程序。

在使用基于文档的数据库时,我一直在阅读关于如何设计数据库模式的mongoDB和Mongoid的文档。我已经想了一段时间了,希望有比我更有经验的人提供一些意见,知道我是否完全迷失了方向。

无论如何,以下是我们正在进行的应用程序的概述(我已经尝试尽可能简单地保持问题的真实性):

应用程序由以下实体组成:

代码语言:javascript
复制
Users, Subjects, Skills, Tasks, Hints and Tutorials. 

它们的组织方式如下:

代码语言:javascript
复制
Subjects consists of a set of 1..n Skills.

Skills consists of a set of Tasks, (sub-)Skills or both (i.e. skills can be a tree
structure, where one main skill (say, Geometry) is the root and other skills are 
child nodes (for instance, the Pythagorean Rule might be a sub-skill)). However, 
all skills, regardless of whether they have sub-skills or not, should consist of 
0..n tasks.

Tasks have a set of 1..n Hints associated with them.

Hints are each associated with a particular task.

Tutorials are associated with 1..n Skills (this skill can be either a root
node or a leaf node in a skill tree). 

Users can complete 0..n Tasks in order to complete 0..n Skills. 

现在,我们设想大多数情况下会有read查询被调用到数据库,用于收集某些用户完成的技能/任务,而读取查询来显示与主题相关的各种技能树。主要的查询可能与各种用户和任务之间的关系相关,形式如下

代码语言:javascript
复制
User A completes Task B

以此类推。此外,我们设想实体的数量的大小如下:用户>提示>任务>技能>教程>主题

目前,我们想到的解决办法是:

代码语言:javascript
复制
Subject.rb
has_and_belongs_to_many :skills

Skill.rb (uses Mongoid::Tree)
has_and_belongs_to_many :subjects
embeds_many :tasks

Task.rb
embedded_in :skill, :inverse_of => :tasks
embeds_many :hints

Hint.rb
embedded_in :task, :inverse_of => :hints

我们还没有真正开始实现教程和用户与技能/任务之间的连接,但我们设想用户与技能/任务之间的关系必须是N:N (我猜这是相当低的效率)。

在这种应用程序中使用基于文档的数据库是个坏主意吗?如果不是,我们如何改进我们的模式,使其尽可能高效?

干杯,为文字墙感到抱歉:-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-25 21:57:04

在我看来,除非您的数据的某些部分是完全非结构化的,否则我认为没有必要对您的问题使用NoSQL解决方案。我是从这样一个角度出发的:您确实有数据库知识,所以您熟悉Mysql / PostgreSQL /等等。我真诚地相信,PostgreSQL(或者Mysql)对您来说将更容易设置、编写代码、维护和最终扩展。我对NoSQL的看法是,当您拥有非结构化数据集并且需要动态添加字段的灵活性时,可以使用它,使用MongoDB是有缺陷的。这不是银弹。

其中的一些缺陷是,例如,in()的速度很慢,如果您写了一些东西给mongo,然后想立即阅读它,您就必须期望您不会得到它(在mongo中切分),map还原有点麻烦(我还没有尝试过Moped的聚合框架,但是它看起来确实很有希望,有时索引可能会出现切分集合的问题)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15077102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档