回答:
一般的な用途
システムを作成した時点で明確に定義されていないデータ構造がある場合。たとえば、nosqlでユーザー設定を保持する傾向があります。別の例は、ユーザーが実行時にフィールドを追加できるようにする必要があるシステムでした-RDBMSで非常に苦痛であり、NoSQLで簡単です。
モデル構造の大部分が1つまたは少数のモデルオブジェクトに集中し、ほとんどの関係が実際にメインモデルオブジェクトの子オブジェクトである場合。この場合、実際の結合はほとんど必要ありません。連絡先管理システムは、たとえばnosqlで非常にうまく実装できることがわかりました。人は複数の住所、電話、電子メールを持つことができます。それぞれを別々のテーブルに置く代わりに、それらはすべて同じモデルの一部となり、1人のオブジェクトがあります。
RDBMSで一般的に必要とされる1台のモノリシックサーバーではなく、複数のサーバーにまたがってデータをクラスター化することから利益を得たい場合。
キャッシング。RDBMSをメインデータベースとして使用したい場合でも、NoSQLデータベースを使用してクエリ結果をキャッシュしたり、カウンターなどのデータを保持したりすると便利です。
ドキュメントを保存します。一貫性のあるドキュメントをデータベースに保存する場合、一部のNoSQLデータベース(MongoDBなど)は実際にはそれらの保存に特化しています。
結合はどうですか?
正直なところ、最初から参加しなかったことは私にとってもとても怖く聞こえました。しかし、コツはSQLで考えるのをやめることです。実際にアプリケーションを実行しているときは、メモリ内にあるオブジェクトについて考える必要があります。これらは、多かれ少なかれ、エリアごとにNoSQLデータベースに保存する必要があります。
完全なオブジェクトグラフを子オブジェクトとともに保存できるため、結合の必要性のほとんどがなくなります。そして、必要な場合は、弾丸を噛んで両方のオブジェクトを取得し、アプリケーションコードに参加する必要があります。
幸いなことに、スキーマを正しく設定すれば、ほとんどのドライバーがあなたのために参加できます。
さらに読むには、実際にMartin Fowlerをお勧めします。
プロジェクトの計画段階(開発前、設計前)でこのようなデータベースを間違いなく使用して、構造、関係、および特性がまだわかっておらず、分析の対象になっていないデータを記録します。その後、すべてをリレーショナルモデルに適合させようとします。
場合によっては、外部キーは必要ありません。例えば:
このユーザーが投稿したすべてのコメントを検索
comments
ユーザーに対応するドキュメントの一部を読み込むのと同じくらい簡単です。これは非正規化と呼ばれます:結合のある2つのセットの代わりに、1つのドキュメントがあり、必要なものはすべてドキュメント内にあります。1つのクエリ、結合なし、パフォーマンスの向上。
しかし、状況によっては、これによりデータが重複する可能性があるため、あるドキュメントから別のドキュメントへのリンクが適している場合があります。この場合、MongoDBの正規化、外部キーと結合、データベース参照ページ、特にDBRef機能に興味があるかもしれません。