リレーショナルの世界では、他のエンティティを参照するための外部キーがあります。しかし、MongoDb、CouchDb、RavenDbのようなドキュメント指向のデータベースは、エンティティ間の参照をどのように実装しますか?
pdate。 StackExchange関連の例。質問エンティティとそのタグがあります。各タグは個別のエンティティであるため、プロパティ(説明など)を持っています。一部の質問のタグを参照するにはどうすればよいですか?
識別子で参照することで、RMDBと同じことができます。私はMongoDBを使用しているので、その時点からこれについて話すことができます。
鬼ごっこ:
{
_id: ObjectId('tag id'),
tag_name: "nosql",
tag_description: "blahblah'
}
その後、投稿で
{
_id: ObjectId('post id'),
tags: [
ObjectId('tag1 id'),
ObjectId('tag2 id')
],
title: "title",
// etc..
}
Postオブジェクトをロードするときに、タグドキュメントをプルするか、キャッシュからプルすることができます。多くの場合、(ORMの代わりに)ODMを使用し、ODMがこれらの参照を処理できることがよくあります。たとえば、Mongoid for Railsでは、:has_many :tags
と言うだけで、残りがわかります。 post.tags
を呼び出すと、投稿に関連付けられたタグの配列が返されます。
簡単です。彼らはしません。
参加能力が必要な場合は、クライアントコードにそれらを実装する必要があります。これらのAPIの一部は、参照の格納と使用を容易にする「キー」タイプを定義することで少し簡単にできますが、参照エンティティを取得するには2回目のフェッチを行う必要があります。