我正徒劳地试图学习如何使用对象数据库。在数据库教科书中,传统似乎是使用跟踪学生、课程和课程的示例,因为它是如此熟悉和适用。作为一个对象数据库,这个示例是什么样子的?关系数据库看起来像这样
Student
ID
Name
Address
Course
ID
Name
PassingGrade
Class
ID
CourseID
Name
StartTime
StudentClass
ID
ClassID
StudentID
Grade您是否会将StudentClasses放在课程内部的类中,然后将学生保留为顶级实体?
Student
ID
Name
Address
Course
ID
Name
Classes[]
Name
StartTime
Students[]
StudentID发布于 2010-03-12 04:34:00
所以你有Course%s、Student%s和Classes,它们是Course%s的一部分,并由Student%s访问?如果你仔细想想,我认为这个问题不言而喻。如果您离开MongoDB的纯JSON,看看如何在ODM中定义它(相当于关系数据库中的对象关系管理),因为基于文档的DB并不真正执行它们自己的模式(示例是基于MongoEngine for Python),可能会更清楚:
class Student(Document):
name = StringField(max_length=50)
address = StringField()
class Attendance(EmbeddedDocument):
student = ReferenceField(Student)
grade = IntField(min_value=0, max_value=100)
class Class(EmbeddedDocument):
name = StringField(max_length=100)
start_time = DateTimeField()
attendance_list = ListField(EmbeddedDocumentField(Attendance))
class Course(Document):
name = StringField(max_length=100)
classes = ListField(EmbeddedDocumentField(Class))这将为您提供两个集合:一个用于Students,一个用于Courses。Attendance将嵌入到Classes中,而Classes将嵌入到Courses中。如下所示(伪代码):
Student = {
name: String,
address: String
}
Course = {
name: String,
classes: {
name: String,
start_time: DateTime,
attendance_list: {
student: Student,
grade: Integer
}[]
}[]
}当然,你可以把成绩信息放在学生对象中,但最终你真的不能做太多的事情来去掉额外的课程。
发布于 2010-03-01 09:32:33
在纯OODB中,您的模型很好。
发布于 2010-03-01 10:14:02
OODBMS的全部意义在于允许您设计数据模型,就好像它只是在内存中一样。不要将其视为数据库模式问题,而应将其视为数据建模问题,前提是您有大量的VM和有限数量的物理内存,您希望确保不必为执行重要的操作而耗费大量的页面错误(或实际上,数据库I/O操作)。
https://stackoverflow.com/questions/2353325
复制相似问题