跳到主要内容

模型关联关系

关联关系类型

模型关联关系包含三种逻辑列类型:

一对一反向关联

一对多关系的特例,通过唯一索引约束实现一对一。物理表中不存在该字段,通过 LEFT JOIN 查询获得。

示例:「学生证」与「学生」的一对一关系,在学生证表中一对一反向关联字段并不真实存在。

一对多关联

当前模型的一条记录关联到另一个模型的多条记录。物理表中不存在该字段,通过 LEFT JOIN 查询获得。

示例:一个「班级」关联多个「学生」,在班级表中一对多字段并不真实存在。

多对多关联

当前模型的多条记录关联到另一个模型的多条记录。物理表中不存在该字段,通过中间表和 LEFT JOIN 查询获得。

示例:「学生」与「课程」之间的选课关系,在学生表和课程表中多对多字段并不真实存在。

多对多中间表

查找中间表

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

    模型字段配置
  2. 通过「中间模型标识」在数据库表中搜索:

    查找中间表

💡 注意:表名以 -preview 结尾的是 体验环境 模型多对多关联关系对应的中间表,不以 -preview 结尾的表是 正式环境 模型多对多关联关系对应的中间表。

中间表字段说明

  • leftRecordId:记录主表(左表)记录 ID,如学生表的主键 _id 对应的值
  • rightRecordId:记录从表(右表)记录 ID,如课程表的主键 _id 对应的值
中间表关联字段

外键约束配置

模型关联关系当前不支持外键操作,如需添加外键约束,请在 云开发平台 数据库表管理页面操作。

一对一关系外键约束

应用场景

  • 用户 ↔ 用户资料(一个用户对应一个用户资料)
  • 学生 ↔ 学生证(一个学生对应一个学生证)

控制台操作步骤

  1. 通过模型找到表名和关联字段标识:

  2. 在数据库表管理页搜索相关表,添加外键:

SQL 创建示例

-- 用户资料表(从表)
CREATE TABLE user_profile (
_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL UNIQUE, -- 唯一约束确保一对一关系
avatar VARCHAR(255),
bio TEXT,
CONSTRAINT fk_profile_user_id FOREIGN KEY (user_id)
REFERENCES user(_id) ON DELETE CASCADE
);

配置要点

  • 在从表的外键字段上添加 UNIQUE 约束
  • 使用 ON DELETE CASCADE 确保级联删除
  • 外键字段必须 NOT NULL

一对多关系外键约束

应用场景

  • 部门 ↔ 员工(一个部门有多个员工)
  • 文章 ↔ 评论(一篇文章有多个评论)

控制台操作步骤

  1. 通过模型找到表名和关联字段标识:

  2. 在数据库表管理页搜索相关表,添加外键:

SQL 创建示例

-- 员工表(多的一方)
CREATE TABLE employee (
_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
department_id INT NOT NULL,
position VARCHAR(100),
_openid VARCHAR(64),
CONSTRAINT fk_employee_department_id FOREIGN KEY (department_id)
REFERENCES department(_id) ON DELETE CASCADE
);

配置要点

  • 外键约束建立在「多」的一方
  • 外键字段通常为 NOT NULL
  • 使用 ON DELETE CASCADE 处理级联删除

多对多关系外键约束

应用场景

  • 学生 ↔ 课程(一个学生选修多门课程,一门课程有多个学生)
  • 用户 ↔ 角色(一个用户有多个角色,一个角色分配给多个用户)

控制台操作步骤

  1. 通过模型字段配置查找中间表对应的中间模型标识:

  2. 通过中间模型标识在数据库表管理页搜索相关表:

SQL 创建示例

-- 中间表(关联表)
CREATE TABLE mid_55ZTLScHD (
_id INT AUTO_INCREMENT,
rightRecordId INT NOT NULL,
leftRecordId INT NOT NULL,
_openid VARCHAR(64),
PRIMARY KEY (id, rightRecordId, leftRecordId), -- 联合主键
CONSTRAINT fk_sc_student_id FOREIGN KEY (leftRecordId)
REFERENCES student(_id) ON DELETE CASCADE,
CONSTRAINT fk_sc_course_id FOREIGN KEY (rightRecordId)
REFERENCES course(_id) ON DELETE CASCADE
);

配置要点

  • 中间表包含两个外键字段
  • 使用联合主键确保关联关系的唯一性
  • 两个外键都设置级联删除

配置规范

表名规则

  • 体验环境表名:模型标识 + -preview
  • 正式环境表名:模型标识

约束命名规范

  • 使用有意义的约束名称:fk_表名_字段名
  • 保持命名一致性便于维护

级联操作类型

  • CASCADE:主表记录删除时,从表关联记录也删除
  • SET NULL:主表记录删除时,从表外键字段设为 NULL
  • RESTRICT:阻止删除有外键引用的主表记录
  • NO ACTION:与 RESTRICT 类似,但检查时机不同