2016-04-13 11 views
1

私はMeteorを初めて使い、このデータベースを設計してデータを保存して公開する方法を理解しようとしています。私はそれがこれらのパッケージを使用するように理にかなって思った:Meteor + MongoDB:データベースパターン

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" 
    }, 
})); 

となり、autoformパッケージを使用して新しいコース/レッスンを作成するための管理者ページがあります。

私の質問は、コースを関連レッスンにどのようにリンクさせるのですか? Iron:routerを使用してURLのパラメータをリッスンし、両方のコレクションにクエリを行い、テンプレートレイアウトを作成しますか?

答えて

0

従来のデータベースと同様に、レッスン/コースの関係に対応するフィールドが必要です。例えば

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

か:MongoDBのために使用さ

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

推奨パターンは、データベース内の非正規化を持つことです。

単純に、relationalデータベースパターンがないということです。 SQLでは、リレーショナルデータベースのパラダイムがあり、テーブルを使用してJoinを実行する必要がある詳細データを取得します。 mongodbでは、ドキュメント(行)に参照を入れる代わりに、オブジェクト全体をここに配置します。実際にはjoinはありません。

ので、あなたのレッスンスキーマにあなたは

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

course: { 
    type: Schemas.Course 
} 

あなたが本当にSQL wayでデータベースを使用したい場合は、あなたのjoin (artificially)あなたのテーブルを助ける便利なパッケージ[publish composite][1]があります、このような何かを行うことができます/コレクション。

関連する問題