Thanks to visit codestin.com
Credit goes to docs.cloudbase.net

跳到主要内容

MySQL 多对多关联关系

多对多关联关系是指两个数据模型之间存在「双向多重关联」的场景,例如:

  • 学生和课程:一个学生可以选修多门课程,一门课程也可以被多个学生选修
  • 用户和角色:一个用户可以拥有多个角色,一个角色也可以分配给多个用户
  • 商品和订单:一个订单可以包含多个商品,一个商品也可以出现在多个订单中

关系型数据库 中,多对多关系无法通过单一外键实现,需要借助「中间表」来存储两个实体之间的关联关系。

多对多中间表机制

云开发数据模型会自动为多对多关联关系创建「中间表」(Junction Table),您无需手动创建和维护这些表。中间表专门用于存储两个模型之间的关联关系,确保数据完整性和查询效率。

中间表的作用

  • 存储关联关系:记录哪个主表记录关联了哪个从表记录
  • 支持双向查询:可以从任意一端查询关联的另一端数据
  • 保证数据一致性:通过外键约束确保关联数据的有效性
  • 提升查询性能:通过索引优化多对多关联查询

查找中间表

当您需要直接操作或查看中间表数据时,可以按以下步骤定位中间表:

步骤 1:获取中间模型标识

进入 云开发平台 / MySQL数据库 / 数据模型,在模型字段配置中查找「中间模型标识」:

模型字段配置 - 中间模型标识

💡 提示:「中间模型标识」是系统自动生成的唯一标识符,用于在数据库中定位对应的中间表。

步骤 2:在数据库中搜索中间表

通过「中间模型标识」在数据库表列表中搜索,即可找到对应的中间表:

在数据库中查找中间表

⚠️ 环境区分

  • 表名-preview 结尾:体验环境的中间表
  • 表名不以 -preview 结尾:正式环境的中间表

中间表字段说明

中间表通常包含以下核心字段:

字段名说明示例
leftRecordId主表(左表)记录的主键 ID学生表的 _id,如 STUDENT_001
rightRecordId从表(右表)记录的主键 ID课程表的 _id,如 COURSE_101

字段说明图示

中间表关联字段说明

实际示例

以「学生选课」场景为例,中间表的数据结构如下:

leftRecordIdrightRecordId含义
STUDENT_001COURSE_101学生 001 选修了课程 101
STUDENT_001COURSE_102学生 001 选修了课程 102
STUDENT_002COURSE_101学生 002 选修了课程 101

这样的设计使得:

  • 通过 STUDENT_001 可以查询到该学生选修的所有课程(COURSE_101COURSE_102
  • 通过 COURSE_101 可以查询到选修该课程的所有学生(STUDENT_001STUDENT_002