可以使用MongoDB创建关系数据库吗?

İlk*_*ğlı 27 rdbms relational-database mongodb

我将使用MongoDB创建一个学生管理系统.我将为学生提供一张桌子,为出勤记录提供另一张桌子.我可以在考勤表中找到一张钥匙到达学生桌,如下图所示吗?怎么样?

关系数据库的图表

Mik*_*sen 38

MongoDB背后的想法是消除(或至少最小化)关系数据.您是否考虑过直接将考勤数据嵌入到每个学生记录中?这实际上是MongoDB的首选设计模式,可以带来更好的性能和可伸缩性.

如果您确实需要高度关系和规范化的数据,您可能需要重新考虑使用MongoDB.

  • 如果您使用嵌入式考勤启动数据库,但是您需要显示每个班级的出勤率,看起来遍历所有用户并提取特定日期和班级的考勤数据会非常低效? (3认同)
  • 如果你是MongoDB的新手,他们的网站上有一个非常酷的小教程:http://www.mongodb.org/(只需点击"试一试",然后在shell中输入`tutorial`.) (2认同)
  • 我很困惑为什么这个答案排名很高。如果您需要在回答之前证明问题,这是一项微不足道的任务;在很多情况下,一个开发人员从公司继承代码,他们无权更改整个代码的架构,他们需要让代码做一些新的事情来满足另一个不使用您特定代码的团队的要求建筑学。既然已经解决了,我们就不用尝试回答这个问题了。 (2认同)

sea*_*ges 20

答案取决于您打算如何使用数据.您真的有2个选项,嵌入考勤表或链接它.有关这些方法的更多信息,请参见:http://www.mongodb.org/display/DOCS/Schema+Design

对于常见用例,您可能会嵌入此特定集合,因此每个学生记录都会有一个嵌入式"出勤"表.这样做是因为出勤记录不太可能在学生之间共享,并且检索出勤数据也可能需要学生信息.检索出勤数据非常简单:

db.student.find( { login : "sean" } )
{
  login : "sean",
  first : "Sean", 
  last : "Hodges",
  attendance : [
    { class : "Maths", when : Date("2011-09-19T04:00:10.112Z") },
    { class : "Science", when : Date("2011-09-20T14:36:06.958Z") }
  ]
}
Run Code Online (Sandbox Code Playgroud)