ออกแบบสคีมาฐานข้อมูลเอกสาร

ฉันพยายามเรียนรู้วิธีใช้ฐานข้อมูลวัตถุอย่างไร้ผล ในตำราเรียนฐานข้อมูล ประเพณีดูเหมือนจะใช้ตัวอย่างของการติดตามนักเรียน หลักสูตร และชั้นเรียน เพราะมันคุ้นเคยและนำไปใช้ได้ ตัวอย่างนี้จะมีลักษณะเป็นฐานข้อมูลวัตถุอย่างไร ฐานข้อมูลเชิงสัมพันธ์จะมีลักษณะดังนี้

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)


คุณมี Courses, Students และ Classes ซึ่งเป็นส่วนหนึ่งของ Courses และเข้าชมโดย Students ฉันคิดว่าคำถามจะตอบตัวเองถ้าคุณลองคิดดู อาจจะชัดเจนกว่านี้หากคุณละทิ้ง 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))

ซึ่งจะให้คอลเลกชันสองรายการแก่คุณ: ชุดหนึ่งสำหรับ Students และอีกชุดหนึ่งสำหรับ Courses Attendance จะถูกฝังอยู่ใน Classes และ Classes จะถูกฝังอยู่ใน Courses บางอย่างเช่นนี้ (รหัสเทียม):

Student = {
    name: String,
    address: String
}

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

แน่นอนว่าคุณสามารถใส่ข้อมูลเกรดลงในสิ่งที่นักเรียนต้องการได้ แต่ท้ายที่สุดแล้ว คุณไม่สามารถทำอะไรได้มากนักเพื่อกำจัดชั้นเรียนพิเศษนั้นออกไป

person Alan Plum    schedule 11.03.2010

ดูที่ DatabaseAnswers เพื่อดูว่ามีสคีมาที่มีอยู่ซึ่งตรงกับความต้องการของคุณหรือไม่

person Mitch Wheat    schedule 01.03.2010

จุดรวมของ OODBMS คือการอนุญาตให้คุณออกแบบแบบจำลองข้อมูลของคุณราวกับว่ามันอยู่ในหน่วยความจำเท่านั้น อย่าคิดว่ามันเป็นปัญหาสคีมาฐานข้อมูล ให้คิดว่ามันเป็นปัญหาการสร้างแบบจำลองข้อมูลบนสมมติฐานว่าคุณมี VM จำนวนมากและมีหน่วยความจำกายภาพจำนวนจำกัด คุณต้องการให้แน่ใจว่าคุณไม่มี เพื่อต้มข้อผิดพลาดของเพจ (หรือในความเป็นจริง การดำเนินการ I/O ฐานข้อมูล) เพื่อดำเนินการที่มีความสำคัญ

person bmargulies    schedule 01.03.2010

ใน OODB ล้วนๆ โมเดลของคุณก็ใช้ได้

person S.Lott    schedule 01.03.2010
comment
เหตุใดฉันจึงต้องมี ORM ถ้าฉันใช้บางอย่างเช่น mongo สิ่งที่ออกมาคือวัตถุอยู่แล้วใช่ไหม? - person stimms; 01.03.2010
comment
ไม่มีที่ไหนเลย แต่เป็นฐานข้อมูลวัตถุไม่ใช่ฐานข้อมูลเชิงสัมพันธ์ดังนั้นการใช้ Object Relational Mapper นั้นไม่สมเหตุสมผล ไม่มีฐานข้อมูลเชิงสัมพันธ์ที่จะทำแผนที่ - person stimms; 01.03.2010