MongoDB の外部キー
MongoDB は、スキーマなしで動作するよく知られたデータベースです。 代わりに、JSON のようなファイルを使用してデータを保持し、構造を課しません。
MongoDB は、従来の RDBMS とは異なり、データベース設計に対して明確なアプローチが必要です。 しかし、全体として、データベースは多くの制限を課していないため、拡張が容易です。
外部キー
外部キーは、2つのテーブルをリンクする列または列のセットです。 これは、子テーブルの他の列にリンクされた親テーブルの主キー列で構成されます。
たとえば、country と city の 2つのテーブルを考えてみましょう。 これら 2つのテーブルをリンクして、各都市が適切な国に関連付けられるようにします。
これを実現するために外部キーを使用できます。
上記の例の都市テーブルからデータを読み取ると、各都市に関連付けられた country_id.
があることがわかります。 これにより、単一のクエリでパキスタンのすべての都市を検索できます。
外部キーを作成するとき、データが変更または破棄された場合にどうするかを指定できます。 たとえば、カスケードを選択できます。つまり、国が削除されると、それにリンクされているすべての都市も削除されます。
null を設定することもできます。これは、国データベースのデータが削除されると、リンクされた都市が null に設定されることを意味します。
MongoDB リファレンス
通常、MongoDB は外部キーの概念では機能しません。 ただし、リレーショナル データベースでは、外部キーを使用して、複数のコレクションのデータを同時に視覚化できます。
MongoDB がデータを格納する方法も異なります。 たとえば、MongoDB は、テーブル、列、および行を使用する代わりに、コレクション、オブジェクト、およびフィールドを使用します。
MongoDB では、コレクションにデータを格納する方法として、非正規化と正規化という 2つの方法があります。
非正規化
非正規化では、同じコレクションにさまざまなデータが含まれます。
以下のサンプルは、各人物にリンクされた addresses
が persons
コレクションにどのように埋め込まれているかを示しています。
> db.persons.findOne()
{
name: 'Ali Ikram',
addresses : [
{ street: '123 PWD', city: 'Rawalpindi', cc: 'PAK' },
{ street: '123 ABC', city: 'Faisalabad', cc: 'PAK' }
]
}
1対少数に適しています。 その利点は、別のドキュメントに対して追加のクエリを実行する必要がないことです。
ただし、埋め込み文書の実体を個別に管理することはできません。
正規化
正規化では、さまざまなデータがさまざまなコレクションに格納されます。 このプロセスはリレーショナル データベースにデータを格納するのと似ていますが、テーブルの代わりにコレクションを使用します。
MongoDB では、参照は主に正規化プロセスに使用されます。 子のテーブル (通常はオブジェクト ID) からの参照は、親テーブルに埋め込まれます。
情報を読み取るとき、ユーザーは複数のクエリを実行して、複数のコレクションからデータを取得する必要があります。
たとえば、次の 2つのコレクション students
と courses.
を取り上げます。 コースには、courses
コレクションで参照される多くの学生が含まれます。
MongoDB でいわゆる外部キーを定義できます。 ただし、データの整合性は自分で維持する必要があります。
例:
students
{
_id: ObjectId(...),
name: 'Haris',
courses: ['chem101', 'chem102'] // <= ids of the courses
}
courses
{
_id: 'chem101',
name: 'Chemistry 101',
description: 'Introduction to Chemistry'
}
courses
フィールドには、コースの _id
が含まれています。 1 対多の関係を定義するのは非常に簡単です。
ただし、生徒 Haris,
のコース名を取得する場合は、_id.
を介して courses
ドキュメントを取得する別の操作を実行する必要があります。
コース chem101
が削除された場合、students
ドキュメントの courses
フィールドを更新するために別の操作を実行する必要があります。
MongoDB で仮想外部キーを作成する
DbSchema は、スキーマのローカル イメージをモデル ファイルに保存します。 これは、データベースに接続する必要なく、プロジェクトをオフラインで作業できることを意味します。
再接続後、データベースとローカル プロジェクト ファイルの相違点を比較および同期できます。 プロジェクト ファイルを使用して仮想外部キー関係を構築することもできます。
これらの外部キーは DbSchema でのみ使用でき、データベースには影響しません。
外部キーはすばやく簡単に作成できます。 たとえば、cities
と countries
のコレクションを見てみましょう。 参照用に、どちらにもcountry id
という共通フィールドがあります。
ある列を別の列にドラッグ アンド ドロップして、外部キーを作成します。 これにより、新しいウィンドウが作成され、外部キーに説明を付けたり、フィールドを追加したりできます。
仮想外部キーを使用して MongoDB でのデータ参照を高速化する
仮想外部キーを使用して、コレクションからデータを閲覧できます。 さらに、リレーショナル データ エディターを使用すると、多数のコレクションからデータを同時に参照できます。
外部キーを使用して、国に接続されている都市をすばやく参照できます。
まとめ
この MongoDB チュートリアル記事の助けを借りて、MongoDB コレクションを図として視覚化し、DbSchema を使用して仮想外部キーを構築する方法を学習しました。 また、異なるコレクションのデータを同時に参照できるようになりました。
さらに、仮想外部キーはローカル プロジェクト ファイルにのみ保存され、データベースには影響しません。