web-dev-qa-db-ja.com

ドキュメント指向データベースはどのように参照を実装しますか?

リレーショナルの世界では、他のエンティティを参照するための外部キーがあります。しかし、MongoDb、CouchDb、RavenDbのようなドキュメント指向のデータベースは、エンティティ間の参照をどのように実装しますか?

pdate。 StackExchange関連の例。質問エンティティとそのタグがあります。各タグは個別のエンティティであるため、プロパティ(説明など)を持っています。一部の質問のタグを参照するにはどうすればよいですか?

6
SiberianGuy

識別子で参照することで、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を呼び出すと、投稿に関連付けられたタグの配列が返されます。

6
Travis

簡単です。彼らはしません。

参加能力が必要な場合は、クライアントコードにそれらを実装する必要があります。これらのAPIの一部は、参照の格納と使用を容易にする「キー」タイプを定義することで少し簡単にできますが、参照エンティティを取得するには2回目のフェッチを行う必要があります。

4
Javier