2010-03-01 3 views
2

개체 데이터베이스를 사용하는 방법을 배우려하고 있습니다. 데이터베이스 교과서에서는 그 전통이 학생과 코스 및 수업을 추적하는 예를 사용하는 것으로 보입니다. 왜냐하면 매우 친숙하고 적용 가능하기 때문입니다. 이 예제는 객체 데이터베이스처럼 보입니까? 관계형 데이터베이스는문서 데이터베이스 스키마 디자인

Student 
    ID 
    Name 
    Address 

Course 
    ID 
    Name 
    PassingGrade 

Class 
    ID 
    CourseID 
    Name 
    StartTime 

StudentClass 
    ID 
    ClassID 
    StudentID 
    Grade 

당신이 어떤 차례로, 코스 내에서 클래스의 내부 StudentClasses을 유지하고 최고 수준의 엔티티로 학생을 유지하는 것처럼 보일 것?

Student 
    ID 
    Name 
    Address 

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

답변

0

순수 OODB에서는 모델이 정상입니다.

+0

왜 ORM이 필요한가요? 내가 몽고와 같은 것을 사용한다면, 나오는 대상이 이미 맞습니까? – stimms

+0

아무리,하지만 그것은 관계형 데이터베이스가 아닌 객체 데이터베이스이므로 Object Relational Mapper를 사용하는 것은 의미가 없습니다. 매핑 할 관계형 데이터베이스가 없습니다. – stimms

0

DatabaseAnswers에서 사용자의 필요에 맞는 기존 스키마가 있는지 확인하십시오.

0

OODBMS의 전체적인 요점은 마치 메모리에있는 것처럼 데이터 모델을 디자인 할 수있게하는 것입니다. 데이터베이스 스키마 문제로 생각하지 마십시오. 전체 VM과 실제 메모리의 양이 매우 많다는 가정하에 데이터 모델링 문제로 생각하십시오. 중요한 작업을 수행하기 위해 페이지 오류 (또는 사실 데이터베이스 I/O 작업)의 바다를 끓일 수 있습니다.

3

그래서 당신은 Course의 일부이며, Student의 방문 Course의, Student들과 Class 말이지,이? 나는 당신이 그것에 대해 생각할 때 질문 자체가 대답한다고 생각한다. 어쩌면 MongoDB의 순수한 JSON에서 벗어나 문서 기반 DB가 실제로 자체적으로 스키마를 시행하지 않기 때문에 (예 : RDB의 ORM에 해당하는) ODM에서 정의하는 방법을 살펴볼 수 있습니다. 파이썬 MongoEngine)에 : Student의 하나와 Course의 하나 :

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)) 

이렇게하면 두 개의 컬렉션을 줄 것입니다. AttendanceClass에 임베드되고 ClassCourse에 임베드됩니다. 이 (의사)와 같은 뭔가 :

Student = { 
    name: String, 
    address: String 
} 

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

당신은 물론 학생 객체의 등급 정보를 넣을 수 있지만, 궁극적으로이 정말 많이 할 수는 별도의 클래스를 제거 할 수 없습니다.