# 多対多の関係を作成する 多対多の関係は、一つのエンティティが別のエンティティと1対多の関係を持ち、逆もまた同様である場合に発生します。例えば、`Author`(著者)は複数の`Books`(書籍)を書くことができ、`Book`は複数の`Authors`によって書かれることがあります。この種の関係は**N対M**関係としても知られています。 このような関係は、**接合エンティティ**(junction entity)と呼ばれる第三のエンティティを追加することで解決します。これには少なくとも2つの外部キーが必要で、関係にある各エンティティへの参照が含まれます。必要に応じて他のアトリビュートも追加できます(例を参照)。 多対多の関係を作成するには、次の手順に従います: 1. [関係エンティティを作成します](https://success.outsystems.com/ja-jp/documentation/11/building_apps/data_management/data_modeling/create_an_entity_to_persist_data/)。 2. アトリビュートを追加し、データ型を最初のエンティティの識別子に設定します。 3. 別のアトリビュートを追加し、データ型を2番目のエンティティの識別子に設定します。 エンティティに一意のレコードを確保したい場合(例えば、`Book`が一つの`Publisher`しか持てないなど)、2つの外部キーに[ユニークインデックス](https://success.outsystems.com/ja-jp/documentation/11/building_apps/data_management/data_modeling/create_an_entity_index/)を追加します。 このトピックに関する[オンライントレーニングビデオ](https://learn.outsystems.com/training/journeys/modeling-data-relationships-642/many-to-many-relationship/o11/448)をご覧ください: ## 例 GoOutというモバイルアプリケーションを持っているとします。ここではエンドユーザーがレストランやホテルなどの場所を見つけてレビューすることができます。エンドユーザーは多くの場所をレビューでき、ある場所は多くのエンドユーザーからレビューを受けることができます。つまり、多対多の関係です。これら2つのエンティティを`Review`と`Place`と呼びましょう。2つの外部キーの他に、レビューには他のアトリビュートもあります:評価、コメント、提出日です。 `Review`エンティティを作成しましょう: 1. データタブで、GoOutWebDataModelエンティティ図を開きます。 2. ユーザーシステムエンティティと`Place`エンティティを図にドラッグします。 3. 図のキャンバスを右クリックして「エンティティの追加」を選択します。 4. エンティティの名前を`Review`とします。 5. `User.Id`アトリビュートを`Review`にドラッグします。 6. `Place.Id`アトリビュートを`Review`にドラッグします。 7. 残りのアトリビュートを追加します: - `Classification`、Integer型 - `Comments`、Text型 - `SubmittedOn`、Date型 ![GoOutモバイルアプリケーションのデータモデルにおいて、ReviewエンティティがUserエンティティとPlaceエンティティに接続されている多対多の関係を示す図](https://success.outsystems.com/TK_Resource/857bf96f-3b4e-419b-a394-522160706ec8 "多対多関係の図")