2011-11-14 49 views

回答

26

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

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

+0

谢谢你的回答。我的教练给了我这个项目来和MongoDb一起做。所以我会从某处/某些人(比如你:)搜索一些信息),我会尽力去做。再次感谢你。 –

+2

如果你是MongoDB的新手,他们的网站上有一个很酷的小教程:http://www.mongodb.org/(只需点击“试试看”,然后在shell中输入“tutorial”。) –

+1

@MikeChristensen目前,这个建议不再有效。他们可能改变了他们的网站 – Kunok

17

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

谢谢,我已经开始阅读Schema Design。 –

0

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

相关问题