# 多対多

選考システムでは、学生とコースという2つのエンティティがあります。1人の学生が複数のコースを履修でき、1つのコースに複数の学生が履修できるため、多対多のリレーションシップが成立します。リレーショナルデータベースでは、学生とコース間の多対多のリレーションシップを表現するために、通常、履修コレクションのような中間コレクションを使用します。このコレクションには、各学生がどのコースを選択したか、また各コースをどの学生が履修したかが記録されます。このような設計により、学生とコース間の多対多のリレーションシップを効果的に表現できます。

ER図:

![alt text](https://static-docs.nocobase.com/0e9921228e1ee375dc639431bb89782c.png)

フィールド設定:

![alt text](https://static-docs.nocobase.com/8e2739ac5d44fb46f30e2da42ca87a82.png)

## パラメータ説明

### Source collection

ソースコレクション。現在のフィールドが存在するコレクションです。

### Target collection

ターゲットコレクション。関連付けられるコレクションです。

### Through collection

スルーコレクション。2つのエンティティ間に多対多のリレーションシップが存在する場合に、その関係を保存するために使用する中間コレクションです。スルーコレクションには、2つのエンティティ間の関連を維持するための2つの外部キーがあります。

### Source key

ソースコレクション内のフィールドで、外部キー制約が参照するフィールドです。一意である必要があります。

### Foreign key 1

スルーコレクション内のフィールドで、ソースコレクションとの関連を確立するために使用されます。

### Foreign key 2

スルーコレクション内のフィールドで、ターゲットコレクションとの関連を確立するために使用されます。

### Target key

ターゲットコレクション内のフィールドで、外部キー制約が参照するフィールドです。一意である必要があります。

### ON DELETE

ON DELETEは、親コレクションのレコードが削除された際に、関連する子コレクション内の外部キー参照に適用される操作ルールを指します。これは、外部キー制約を定義する際に使用されるオプションです。一般的なON DELETEオプションは以下の通りです。

- CASCADE: 親コレクションのレコードが削除されると、子コレクション内の関連するすべてのレコードも自動的に削除されます。
- SET NULL: 親コレクションのレコードが削除されると、子コレクション内の関連するレコードの外部キー値がNULLに設定されます。
- RESTRICT: デフォルトのオプションです。親コレクションのレコードを削除しようとした際に、関連する子コレクションのレコードが存在する場合、親コレクションのレコードの削除は拒否されます。
- NO ACTION: RESTRICTに似ており、関連する子コレクションのレコードが存在する場合、親コレクションのレコードの削除は拒否されます。