NoSQL データ ストアでリレーションシップをモデル化することは間違いなく有効ですが、高度なリレーショナル データがある場合は、選択したデータ ストアとスキーマの設計がユース ケースの目標に合っているかどうかを再検討することをお勧めします。
MongoDB では、(ユース ケースに基づく) 一般的な決定は、関連するデータを同じコレクションに埋め込むか、別のコレクションのドキュメントへの参照リンクを使用して関係をモデル化する方が適切かどうかです (参照: のデータ モデルの設計MongoDB マニュアル)。
通常、外部キーの関係は、分散 NoSQL データベースからのサーバー側のサポートによって設定または適用されません。そのため、ODM での宣言的な参照は、サーバー上で複数のクエリに変換されることがよくあります。複数のクエリが必ずしも悪いわけではありません (不十分な極端な記述がある場合もあります)。参照を使用したアプリケーション レベルのデータ結合は非常に便利です。
特に MongoDB の場合、データベース参照 (DBRefs)用の BSON フィールド タイプがあります。現在 (MongoDB 2.6 のように) サーバー側での DBRef の拡張はサポートされていませんが、ドライバーと ODM の多くは、この標準表記法で参照を追跡および設定するための便利なメソッドを提供しています。
これは、あなたが言及したいくつかの ODM で使用されていることがわかります。
- Mongoose は、他のコレクションからのドキュメントの作成をサポートします
- Doctrine ODM は、他のクラス/コレクションへの関係をマッピングする参照をサポートします
通常、ODM では、参照の自動生成または遅延生成 (つまり、必要に応じて、またはコードでアクセス) のいずれかを選択できます。
私は Cassandra ライブラリに詳しくありませんが、ドキュメントで参照や関係について明確に言及されているのを見たことがありません。関係機能の有無は、特定のパターン/アンチパターンというよりも、ODM の作成者の選択によるものだと思います。