【发布时间】:2011-12-29 02:19:09
【问题描述】:
我打算用 MongoDB 做一个学生管理系统。我将为学生准备一张桌子,另一张用于出勤记录。如下图所示,我可以在出勤表中使用钥匙进入学生表吗?怎么样?
【问题讨论】:
标签: mongodb relational-database rdbms
我打算用 MongoDB 做一个学生管理系统。我将为学生准备一张桌子,另一张用于出勤记录。如下图所示,我可以在出勤表中使用钥匙进入学生表吗?怎么样?
【问题讨论】:
标签: mongodb relational-database rdbms
MongoDB 背后的理念是消除(或至少最小化)关系数据。您是否考虑过将出勤数据直接嵌入到每个学生记录中?这实际上是 MongoDB 的首选设计模式,可以带来更好的性能和可扩展性。
如果您确实需要高度相关和规范化的数据,您可能需要重新考虑使用 MongoDB。
【讨论】:
tutorial。)
答案取决于您打算如何使用这些数据。你真的有两个选择,嵌入考勤表,或者链接它。此处详细介绍了这些方法: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") }
]
}
【讨论】:
是的。没有硬性规定。您必须查看嵌入或引用数据的优缺点。该视频肯定会有所帮助(https://www.youtube.com/watch?v=-o_VGpJP-Q0&t=21s)。在您的示例中,电话号码属性应该在同一个表中(在文档数据库中),因为一个人的电话号码很少更改。
【讨论】: