Rancang skema database dokumen

Saya sia-sia mencoba mempelajari cara menggunakan database objek. Dalam buku teks basis data, tradisinya tampaknya menggunakan contoh pencatatan siswa, mata pelajaran, dan kelas karena hal ini sangat familiar dan dapat diterapkan. Seperti apa contoh database objek ini? Basis data relasional akan terlihat seperti ini

Student
  ID
  Name
  Address

Course
  ID
  Name
  PassingGrade

Class
  ID
  CourseID
  Name
  StartTime

StudentClass
  ID
  ClassID
  StudentID
  Grade

Apakah Anda akan mempertahankan StudentClasses di dalam Classes yang, pada gilirannya, berada di dalam Course dan kemudian menjadikan Student sebagai entitas tingkat atas?

Student
  ID
  Name
  Address

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

person stimms    schedule 01.03.2010    source sumber


Jawaban (4)


Jadi Anda punya Courses, Students dan Classes, yang merupakan bagian dari Courses dan dikunjungi oleh Students? Saya pikir pertanyaan itu akan terjawab dengan sendirinya jika Anda memikirkannya. Mungkin lebih jelas jika Anda beralih dari JSON murni MongoDB dan melihat bagaimana Anda mendefinisikannya dalam ODM (setara dengan ORM di RDB) karena DB berbasis dokumen tidak benar-benar menerapkan skema mereka sendiri (contoh didasarkan pada MongoEngine untuk 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))

Ini akan memberi Anda dua koleksi: satu untuk Students dan satu lagi untuk Courses. Attendance akan tertanam di Classes dan Classes akan tertanam di Courses. Sesuatu seperti ini (kodesemu):

Student = {
    name: String,
    address: String
}

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

Anda tentu saja dapat memasukkan info nilai ke objek siswa, namun pada akhirnya tidak banyak yang dapat Anda lakukan untuk menghilangkan kelas tambahan tersebut.

person Alan Plum    schedule 11.03.2010

Lihat DatabaseAnswers untuk melihat apakah mereka sudah memiliki skema yang memenuhi kebutuhan Anda.

person Mitch Wheat    schedule 01.03.2010

Inti dari OODBMS adalah memungkinkan Anda mendesain model data seolah-olah hanya ada di memori. Jangan menganggapnya sebagai masalah skema database, anggap saja sebagai masalah pemodelan data dengan asumsi bahwa Anda memiliki banyak VM dan jumlah memori fisik yang terbatas, Anda ingin memastikan bahwa Anda tidak memilikinya. untuk merebus lautan kesalahan halaman (atau, pada kenyataannya, operasi I/O database) untuk melakukan operasi yang penting.

person bmargulies    schedule 01.03.2010

Dalam OODB murni, model Anda baik-baik saja.

person S.Lott    schedule 01.03.2010
comment
Mengapa saya memerlukan ORM? Jika saya menggunakan sesuatu seperti mongo, yang keluar sudah berupa objek, bukan? - person stimms; 01.03.2010
comment
Tidak ada tempat, tapi ini adalah database objek bukan database relasional jadi menggunakan Object Relational Mapper tidak masuk akal. Tidak ada database relasional untuk dipetakan. - person stimms; 01.03.2010