首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计文档数据库模式

设计文档数据库模式
EN

Stack Overflow用户
提问于 2010-03-01 08:59:39
回答 3查看 2.7K关注 0票数 2

我正徒劳地试图学习如何使用对象数据库。在数据库教科书中,传统似乎是使用跟踪学生、课程和课程的示例,因为它是如此熟悉和适用。作为一个对象数据库,这个示例是什么样子的?关系数据库看起来像这样

代码语言:javascript
复制
Student
  ID
  Name
  Address

Course
  ID
  Name
  PassingGrade

Class
  ID
  CourseID
  Name
  StartTime

StudentClass
  ID
  ClassID
  StudentID
  Grade

您是否会将StudentClasses放在课程内部的类中,然后将学生保留为顶级实体?

代码语言:javascript
复制
Student
  ID
  Name
  Address

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

回答 3

Stack Overflow用户

发布于 2010-03-12 04:34:00

所以你有Course%s、Student%s和Classes,它们是Course%s的一部分,并由Student%s访问?如果你仔细想想,我认为这个问题不言而喻。如果您离开MongoDB的纯JSON,看看如何在ODM中定义它(相当于关系数据库中的对象关系管理),因为基于文档的DB并不真正执行它们自己的模式(示例是基于MongoEngine for Python),可能会更清楚:

代码语言:javascript
复制
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中。如下所示(伪代码):

代码语言:javascript
复制
Student = {
    name: String,
    address: String
}

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

当然,你可以把成绩信息放在学生对象中,但最终你真的不能做太多的事情来去掉额外的课程。

票数 4
EN

Stack Overflow用户

发布于 2010-03-01 09:32:33

在纯OODB中,您的模型很好。

票数 0
EN

Stack Overflow用户

发布于 2010-03-01 10:14:02

OODBMS的全部意义在于允许您设计数据模型,就好像它只是在内存中一样。不要将其视为数据库模式问题,而应将其视为数据建模问题,前提是您有大量的VM和有限数量的物理内存,您希望确保不必为执行重要的操作而耗费大量的页面错误(或实际上,数据库I/O操作)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2353325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档