我徒劳地试图学习如何使用对象数据库。在数据库教科书中,传统似乎是使用跟踪学生,课程和课程的例子,因为它是如此熟悉和适用。这个例子作为对象数据库会是什么样的?关系数据库看起来像
Student
ID
Name
Address
Course
ID
Name
PassingGrade
Class
ID
CourseID
Name
StartTime
StudentClass
ID
ClassID
StudentID
Grade
您是否将StudentClasses保留在Classes中,而Classes又在Course中,然后将Student保持为顶级实体?
Student
ID
Name
Address
Course
ID
Name
Classes[]
Name
StartTime
Students[]
StudentID
答案 0 :(得分:3)
所以你有Course
s,Student
和Class
es,它们是Course
的一部分并由Student
s访问过?如果你考虑一下,我认为这个问题会自行解决。如果你离开MongoDB的纯JSON并且看看如何在ODM中定义它(相当于RDB中的ORM)可能会更清楚,因为基于文档的DB并没有真正强制自己的模式(例如基于on 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))
这将为您提供两个集合:一个用于Student
,一个用于Course
。 Attendance
将嵌入Class
,Class
将嵌入Course
es。Student = {
name: String,
address: String
}
Course = {
name: String,
classes: {
name: String,
start_time: DateTime,
attendance_list: {
student: Student,
grade: Integer
}[]
}[]
}
。像这样的东西(伪代码):
{{1}}
你当然可以将成绩信息放在学生对象中,但最终你没有太多可以去除额外的课程。
答案 1 :(得分:0)
在纯粹的OODB中,你的模型很好。
答案 2 :(得分:0)
查看DatabaseAnswers,了解他们是否有符合您需求的现有架构。
答案 3 :(得分:0)
OODBMS的重点是允许您将数据模型设计为仅在内存中。不要把它想象成一个数据库模式问题,假设你拥有大量的虚拟机和有限的物理内存,就把它想象成一个数据建模问题,你要确保你没有煮沸页面错误的海洋(或者,事实上,数据库I / O操作)来执行重要的操作。