それで、あなたはCourse
s、Student
s、Class
esを持っています。これらはsの一部であり、Course
sが訪れStudent
ますか?考えてみれば、その質問はそれ自体で答えると思います。おそらく、MongoDBの純粋なJSONから離れて、ODM(RDBのORMに相当)でそれをどのように定義するかを検討すると、ドキュメントベースのDBは実際には独自のスキーマを強制しないため、より明確になります(例はMongoEngine
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))
これにより、2つのコレクションが得られます。1つはStudent
s用、もう1つはCourse
s用です。Attendance
esに埋め込まれ、Class
esClass
はsに埋め込まれCourse
ます。このようなもの(擬似コード):
Student = {
name: String,
address: String
}
Course = {
name: String,
classes: {
name: String,
start_time: DateTime,
attendance_list: {
student: Student,
grade: Integer
}[]
}[]
}
もちろん、成績情報を生徒オブジェクトに入れることもできますが、最終的には、その余分なクラスを取り除くためにできることはあまりありません。