データ モデリングとは、データベース内のデータの組織と、関連するエンティティ間のリンクを指します。
MongoDB には多形データを保存できる柔軟なデータモデルがあるため、次のことを意味します。
MongoDBのデータ モデリングの主要原則は、まとめてアクセスされるデータはまとめて保存する必要があるということです。そのために、関連データをオブジェクトと配列フィールド内に埋め込むことができます。埋め込みにより、アプリケーションの読み取りパフォーマンスが向上し、データの整合性が確保されます。ただし、パフォーマンスを最適化するには、アプリケーションのデータアクセスパターンに基づいてデータモデルを構造化する必要があります。
詳細については、MongoDBのデータモデリングのベストプラクティスを参照してください。
ユースケース
ドキュメントモデルの柔軟性を活用する次の例を考えてみましょう。
お客様の会社で、各従業員がどの部門で働いているかを追跡しているとします。部門情報を
employeeコレクションに埋め込むと、1 回のクエリで関連情報を返すことができます。eコマースアプリケーションでは、製品ページの最新 5 件のレビューが表示されます。頻繁にアクセスされないため、古いレビューを含むすべてのレビューを別のコレクションに保存できます。
お客様の衣料品店では、製品カタログ用に単一ページのアプリケーションを作成する必要があるとします。製品によって属性が異なるため、ドキュメントフィールドとフィールドタイプが異なる場合があります。これらの違いに関係なく、すべての製品を同じコレクションに保存できます。
はじめる
データモデルが論理的な構造を持ち、最適なパフォーマンスを実現できるようにするには、データベースを本番環境の規模で使用する前にスキーマを計画してください。データモデルを決定するには、次のスキーマ設計プロセスを使用します。
詳細
柔軟なデータモデルによる開発
MongoDB の柔軟なスキーマにより、基礎のデータベースに大きな変更を必要とせずにデータモデルを適応させることができます。この方法では、アプリケーションの開発 に伴うデータモデルを反復的に改善することができます。
MongoDB の 柔軟なスキーマを使用して開発することで、次のことが可能になります。
コードに存在するオブジェクトにデータモデルを直接マッピングします。
より厳格な制御が必要なドキュメントのセクションとアスペクトのみにスキーマ検証を追加します。
データモデルを反復的に変更する方法の例については、データモデルの変更を参照してください。
ドキュメントの関係
ドキュメントフィールドの値には、他のドキュメント、配列、ドキュメントの配列など、任意のBSON データ型を含めることができます。これらのオブジェクトは、データモデル内のさまざまなタイプの 関係 を表すために使用できます。
1 対 1 の関係: 各ドキュメントは他のドキュメント1 つにのみ関連付けられています。例、ユーザーの 医療レコードは 1 つだけです。
1 対多の関係: 各ドキュメントは、複数の他のドキュメントに関連付けられています。例、ウェブアプリケーションユーザーは多数の書き込みやコメントを持つことができます。
多対多の関係: 各ドキュメントは複数の他のドキュメントに関連付けることができ、その逆も同様です。例、学生は複数のコースに登録でき、各コースに複数の学生を含めることができます。
MongoDBでは、データを埋め込みまたは参照することで関係をモデル化できます。最適なデータリンク方法を選択することで、アプリケーションの特定のアクセス パスワードなしに合わせてデータモデルを最適化できます。
MongoDBでの関係のモデル化の詳細については、以下を参照してください。
スキーマ設計: リレーショナル データベースとドキュメント データベースの違い
MongoDBのようなドキュメントデータベースのスキーマを設計する場合は、関係データベースとの次の重要な違いを考慮してください。
関係データベースの動作 | ドキュメント データベースの動作 |
|---|---|
データを挿入する前に、テーブルのスキーマを決定する必要があります。関係データベースでデータモデルを変更することはできますが、固定されたスキーマでは、変更が依存関係参照にどのように影響するかを考慮して、より多くの事前計画が必要です。 | アプリケーションのニーズが変化するにつれて、データモデルは時間の経過とともに簡単に変更できます。 |
アプリケーションに必要なデータを返すには、多くの場合、複数の異なるテーブルのデータを結合する必要があります。 | 柔軟なデータモデルにより、アプリケーションのデータアクセスパターンに従ってデータを保存できます。例、データを埋め込むと、複数のコレクションにまたがる複雑な結合を回避できると同時に、パフォーマンスが向上し、配置のワークロードが軽減されます。 |