---
title: "多对多"
description: "多对多关系字段（M2M），两表实体多对多关联，通常需中间表，如学生-课程。"
keywords: "多对多,M2M,BelongsToMany,中间表,关联字段,NocoBase"
---

# 多对多

在选课系统中，有学生和课程两个实体，一个学生可以选修多门课程，一门课程也可以有多个学生选修，这就构成了多对多的关系。在关系数据库中，为了表示学生和课程之间的多对多关系，通常会使用一个中间表，比如选课表。这个表可以记录每个学生选择了哪些课程，每门课程被哪些学生选修。这样的设计可以很好地表示学生和课程之间的多对多关系。

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

中间表，当两个实体之间存在多对多的关系时，需要使用中间表来存储这种关系。中间表有两个外键，用于保存两个实体之间的关联。

### Source key

外键约束引用的字段，必须具备唯一性。

### Foreign key 1

中间表的字段，用于建立与源表之间的关联。

### Foreign key 2

中间表的字段，用于建立与目标表之间的关联。

### Target key

外键约束引用的字段，必须具备唯一性。

### ON DELETE

ON DELETE 是指在删除父表中的记录时对相关子表中的外键引用的操作规则，它是用于定义外键约束时的一个选项。常见的 ON DELETE 选项包括：

- CASCADE：当删除父表中的记录时，自动删除子表中与之关联的所有记录。
- SET NULL：当删除父表中的记录时，将子表中与之关联的外键值设为 NULL。
- RESTRICT：默认选项，当试图删除父表中的记录时，如果存在与之关联的子表记录，则拒绝删除父表记录。
- NO ACTION：与 RESTRICT 类似，如果存在与之关联的子表记录，则拒绝删除父表记录。