多対多の関係を作成する
多対多関係は、1つのエンティティが別のエンティティと双方向に1対多の関係を持つことをいいます。たとえば、1人の著者
が複数の本
を書くこともあり、1冊の本
が複数の著者
によって書かれるということもあります。このような関係は、N対M関係としても知られています。
接合エンティティと呼ばれる第3のエンティティを追加することによってこのような関係を解決します。ここでは少なくとも2つの外部キー(関係内の各エンティティに対して1つ)がある必要があります。必要に応じて、他のアトリビュートを追加することもできます(例を参照)。
多対多の関係を作成するには、以下の手順を実行します。
- 関係エンティティを作成します。
- アトリビュートを追加し、最初のエンティティの識別子にデータ型を設定します。
- 別のアトリビュートを追加し、第2のエンティティの識別子にデータ型を設定します。
新しいエンティティが一意のレコード(著者
は同じ本
を2回以上書けないなど)を持つことを保証する場合、これら2つの外部キーに1つの一意のインデックスを追加します。
例
エンドユーザーがレストランやホテルのような様々な場所の検索やレビューができるGoOutというモバイルアプリケーションがあります。1人のエンドユーザーは複数の場所をレビューでき、1つの場所には多くのエンドユーザーからのレビューがあるという多対多の関係があります。これら2つのエンティティをReview
およびPlace
と呼ぶことにします。2つの外部キーのほかに、レビューには、分類、コメントおよび送信日という別のアトリビュートがあります。
それでは、Review
エンティティを作成しましょう。
- [Data]タブで、GoOutWebDataModelエンティティ図を開きます。
- Userシステムエンティティと
Place
エンティティを図にドラッグします。 - 図キャンバスを右クリックして[Add Entity]を選択します。
- そのエンティティに
Review
という名前を付けます。 User.Id
アトリビュートをReview
にドラッグします。Place.Id
アトリビュートをReview
にドラッグします。- 残りのアトリビュートを追加します。
Classification
、Integer型Comments
、Text型SubmittedOn
、Date型