Итак, у вас есть Course
s, Student
s и Class
es, которые являются частями Course
s и посещены Student
s? Я думаю, что вопрос отвечает сам, если вы думаете об этом. Возможно, будет понятнее, если вы отойдете от чистого JSON MongoDB и посмотрите, как бы вы определили его в ODM (эквивалент ORM в RDB), поскольку БД на основе документов на самом деле не применяют свои собственные схемы (пример основан на на 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))
Это даст вам две коллекции: одну для Student
с и одну для Course
с. Attendance
будет встроен в Class
es, а Class
будет встроен в Course
s. Примерно так (псевдокод):
Student = {
name: String,
address: String
}
Course = {
name: String,
classes: {
name: String,
start_time: DateTime,
attendance_list: {
student: Student,
grade: Integer
}[]
}[]
}
Конечно, вы можете поместить информацию об оценке в объекте учащегося, но в конечном счете вы действительно мало что можете сделать, чтобы избавиться от этого дополнительного класса.