Meteor + MongoDB: 数据库模式

Meteor + MongoDB: Database pattern

我是 Meteor 的新手,正在尝试弄清楚如何最好地设计这个数据库来存储和发布数据。我认为使用这些包是有意义的:

https://github.com/aldeed/meteor-autoform

https://github.com/aldeed/meteor-simple-schema

https://github.com/iron-meteor/iron-router

我有一个要在页面上列出的课程列表的集合:

Courses = new Mongo.Collection("courses");

Courses.attachSchema(new SimpleSchema({
  title: {
    type: String,
    label: "Title",
    max: 200
  },
  comingSoon: {
    type: boolean,
    label: "Coming Soon?"
  },
  description: {
    type: String,
    label: "Course Description",
    max: 200
  }
}));

以及每门课程中的课程集合:

Lessons = new Mongo.Collection("lessons");
Lessons.attachSchema(new SimpleSchema({
  title: {
    type: String,
    label: "Title",
    max: 200
  },
  video: {
    type: String,
    label: "Link to video"
  },
}));

并有一个管理页面来创建新的 courses/lessons 使用 autoform 包。

我的问题是如何将我的link课程关联到课程中呢?我会使用 iron:router 来监听 url 中的参数并查询两个集合并创建模板布局吗?

您应该有一个与课程/课程关系对应的字段,类似于传统数据库。

例如:

Lessons.attachSchema(new SimpleSchema({
  ...
  courseId: {type: String}, // ID of the corresponding course
}));

或:

Courses.attachSchema(new SimpleSchema({
  ...
  lessonIds: {type: [String]}, // Array of IDs of lessons
}));

用于 mongodb 的推荐模式是在您的数据库中进行反规范化。

这意味着您没有任何 relational 数据库模式。在 SQL 中,您拥有关系数据库范式,要获取详细数据,您需要对表进行 Join 操作。在 mongodb 中,不是将引用放在文档(行)中,而是将整个对象放在此处。所以实际上没有join

所以在你的课程架构中你可以这样做,

Schemas.Course = new SimpleSchema(...);

course: {
    type: Schemas.Course
}

如果您真的想在 SQL way 中使用您的数据库,可以使用方便的软件包 [publish composite][1] 来帮助您 join (artificially) 您的 tables/collections.