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

时间:2011-11-14 23:14:41

标签: mongodb relational-database rdbms

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

diagram of a relational database

3 个答案:

答案 0 :(得分:32)

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

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

答案 1 :(得分:18)

答案取决于您打算如何使用数据。您真的有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") }
  ]
}

答案 2 :(得分:1)

是。没有严格的规则。您必须查看嵌入或引用数据的优缺点。该视频肯定会有所帮助(https://www.youtube.com/watch?v=-o_VGpJP-Q0&t=21s)。在您的示例中,电话号码属性应位于同一个表中(在文档数据库中),因为人的电话号码很少更改。