それぞれ 1 つのクエリを使用して、次の 2 つのページを作成します。
- 特定の学生のすべてのコースのリスト
- 特定のコースのすべての学生のリスト
MongoDB (または別の NoSQL ソリューション) で以下を再作成してください。
class Student < ActiveRecord::Base
has_many :assignments
has_many :courses, :through=>:assignments
end
class Course < ActiveRecord::Base
has_many :assignments
has_many :students, :through=>:assignments
end
class Assignment < ActiveRecord::Base
belongs_to :course
belongs_to :student
リレーショナル データベースでは、アソシエーションを熱心に読み込むことでこれを実現できます。
ただし、Mongo では、スキーマで作成するときに、学生データをコースに埋め込むかリンクするか、コース データを学生に埋め込むかリンクするかを選択できます。
学生データをコース ドキュメントに埋め込むことを選択した場合、特定のコース (1 つのドキュメント) のすべての学生を簡単に取得できます。ただし、特定の学生が受講しているすべてのコースを見つけたい場合は、MongoDB に N 回クエリを実行する必要があります (N は学生が受講しているコースの数です)。
リレーショナル データベースを基盤とする Web アプリケーションでは、ページを読み込むためにデータベースに対して N 回の呼び出しを行うことはできません。一定数のクエリで実行する必要があります。これはMongoDBには当てはまりませんか? 上記の 2 つのページを 1 つのクエリでロードできるようにドキュメントを構成する方法はありますか?