2

私は無駄にオブジェクトデータベースの使い方を学ぼうとしています。データベースの教科書では、学生、コース、クラスを追跡する例を使用するのが伝統のようです。これは、非常に馴染みがあり、適用できるからです。この例は、オブジェクトデータベースとしてどのように見えますか?リレーショナルデータベースは次のようになります

Student
  ID
  Name
  Address

Course
  ID
  Name
  PassingGrade

Class
  ID
  CourseID
  Name
  StartTime

StudentClass
  ID
  ClassID
  StudentID
  Grade

StudentClassesをClasses内、つまりCourse内に保持し、Studentをトップレベルのエンティティとして保持しますか?

Student
  ID
  Name
  Address

Course
  ID
  Name
  Classes[]
    Name
    StartTime
    Students[]
      StudentID
4

3 に答える 3

4

それで、あなたはCourses、Students、Classesを持っています。これらはsの一部であり、Coursesが訪れStudentますか?考えてみれば、その質問はそれ自体で答えると思います。おそらく、MongoDBの純粋なJSONから離れて、ODM(RDBのORMに相当)でそれをどのように定義するかを検討すると、ドキュメントベースのDBは実際には独自のスキーマを強制しないため、より明確になります(例はMongoEnginePythonの場合):

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つはStudents用、もう1つはCourses用です。Attendanceesに埋め込まれ、ClassesClassはsに埋め込まれCourseます。このようなもの(擬似コード):

Student = {
    name: String,
    address: String
}

Course = {
    name: String,
    classes: {
        name: String,
        start_time: DateTime,
        attendance_list: {
            student: Student,
            grade: Integer
        }[]
    }[]
 }

もちろん、成績情報を生徒オブジェクトに入れることもできますが、最終的には、その余分なクラスを取り除くためにできることはあまりありません。

于 2010-03-11T20:34:00.117 に答える
0

純粋な OODB では、モデルは問題ありません。

于 2010-03-01T01:32:32.747 に答える
0

OODBMS の要点は、あたかもメモリ内にあるかのようにデータ モデルを設計できるようにすることです。これをデータベース スキーマの問題と考えないでください。大量の VM と有限量の物理メモリがあることを前提としたデータ モデリングの問題と考えてください。大量のページ フォールト (または、実際にはデータベース I/O 操作) を沸騰させて、重要な操作を実行します。

于 2010-03-01T02:14:02.240 に答える