NoSQL Schema中的SQL关系

时间:2017-09-30 14:35:25

标签: mysql node.js mongodb mongoose mongoose-schema

所以我需要从下一个SQL数据库设计NoSQL Schemas(Mongoose)。 Image of SQL database

所以我有一些关于如何制作这些模式的问题:

  1. course_student 中有一个名为 entryDate 的字段。我在Schema中存储了这个字段,如何将其连接到其他字段? (指一名学生进入特定课程的入学日期)( course_teacher 表中 startDate 的情况)
  2. 在管理员,教师和学生模式中,我如何从PersonSchema继承所有属性(这是Discrimantors的情况?),还是我将所有字段存储在PersonSchema中(我不喜欢的情况,因为在“admin”的情况下,教师和学生字段都是NULL)
  3. (可选)另外,如何处理多对多关系的非规范化情况? (假设没有 course_teacher 表,教师& 课程与许多关系相关联)

2 个答案:

答案 0 :(得分:1)

在Mongo中,就像在SQL中一样,有很多方法可以构建数据。 Mongo需要考虑的关键是如何访问数据。尝试以与预期执行的查询匹配的方式对数据进行分组。使用该上下文,我将尝试回答您的一些具体问题:

1)您询问将学生的entryDate存储在课堂中的位置。你经常独立拉学生吗?或者你总是用他们的课程抓住他们?你需要独立上课吗?

一种选择是在您的学生中嵌套课程: 学生=>

{
   firstName: "John",
   lastName: "Smith",
   classes: [{
      classCode: "EN101",
      entryDate: "10/10/2017"
   }]
}

如果您通常只访问一次,那么您还可以拥有一个包含学生列表的班级对象: Class =>

{
   classCode: "En101"
   students: [{
      studentId: 12345,
      firstName: "John",
      lastName: "Smith,
      entryDate: "10/10/2017"
   }]
}

如果您经常单独引用某些内容,那么您可以拥有一个像SQL一样的平面表,只有classCode,studentId,studentEntryDate

  1. 这些对象是否一起存储在一个表中?如果这样听起来像是一个很好的歧视者。就像你只有一个People系列一样。但是,我猜它们是分开存放的?教师和学生存放在不同的馆藏中?在这种情况下,您可以让它们在代码中继承相同的类,并且它们将在没有任何鉴别器的情况下精细地序列化为mongo。

  2. 有多种方法可以解决这个问题。您可以为每个表创建集合并维护链接表,但通常不是最好的方法。我认为教师和课程将是一个多少不多?所以每个课程都会有一位老师。如果课程中有很多老师,你可以只列出一个教师名单,而不是一个叫老师的名单。

  3. 希望我的回答很清楚,请随时评论以获取更多信息。

    如果您是Mongo的新手,我建议您注册一些免费的courses。非常有用,为你奠定了良好的基础。

    转到mongo后祝你好运。这是值得的!

答案 1 :(得分:0)

下面是两个很好的资源,可以比较RDBMS和NoSQL数据库。

https://www.mongodb.com/compare/mongodb-mysql

https://docs.mongodb.com/manual/reference/sql-comparison/