我将使用MongoDB创建一个学生管理系统.我将为学生提供一张桌子,为出勤记录提供另一张桌子.我可以在考勤表中找到一张钥匙到达学生桌,如下图所示吗?怎么样?
MongoDB背后的想法是消除(或至少最小化)关系数据.您是否考虑过直接将考勤数据嵌入到每个学生记录中?这实际上是MongoDB的首选设计模式,可以带来更好的性能和可伸缩性.
如果您确实需要高度关系和规范化的数据,您可能需要重新考虑使用MongoDB.
答案取决于您打算如何使用数据.您真的有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") } ] }