3、关系模型:一对一关系、一对多关系、多对多关系、关系配置实战
在低代码平台中,数据模型的核心能力不仅在于定义单个实体(表),更在于定义实体之间的关联关系。关系模型决定了数据如何被连接、查询和展示。本章将深入剖析三种基本关系类型,并给出低代码平台中的配置实战指南。
3.1 一对一关系 (One-to-One)
定义:实体A的一条记录,最多对应实体B的一条记录;反之亦然。
典型场景:
- 用户与身份证信息(一个用户只有一个身份证号)
- 订单与发票(一笔订单只能开具一张发票)
- 员工与工位(一个员工固定一个工位)
低代码实现方式:
- 外键+唯一约束:在任意一张表中添加指向另一张表的外键字段,并设置该字段为“唯一”。这是最常用的方式。
- 共享主键:两张表使用完全相同的主键值(例如,用户表主键=1,身份证表主键也=1)。这种方式性能较好,但配置稍复杂。
配置实战(以“用户-身份证”为例):
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 创建“用户”实体,主键为 userId | 基础字段:姓名、手机号 |
| 2 | 创建“身份证”实体,主键为 idCardId | 基础字段:身份证号、签发机关 |
| 3 | 在“身份证”实体中添加字段:userId(类型:关联关系) | 关联到“用户”实体 |
| 4 | 设置 userId 字段的唯一约束为“是” | 确保一个用户只能对应一张身份证 |
| 5 | 在关系配置中,选择“一对一”类型 | 平台自动生成反向引用(用户→身份证) |
3.2 一对多关系 (One-to-Many)
定义:实体A的一条记录,可以对应实体B的多条记录;但实体B的一条记录只能对应实体A的一条记录。
典型场景:
- 客户与订单(一个客户可以有多个订单)
- 部门与员工(一个部门可以有多个员工)
- 文章与评论(一篇文章可以有多个评论)
低代码实现方式:
- 外键:在“多”的一方(实体B)添加外键字段,指向“一”的一方(实体A)。不需要唯一约束。
- 反向引用:在“一”的一方自动生成一个子表/列表字段,用于展示所有关联的“多”方记录。
配置实战(以“客户-订单”为例):
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 创建“客户”实体,主键为 customerId | 字段:客户名称、等级 |
| 2 | 创建“订单”实体,主键为 orderId | 字段:订单金额、下单时间 |
| 3 | 在“订单”实体中添加字段:customerId(类型:关联关系) | 关联到“客户”实体 |
| 4 | 设置该字段的唯一约束为“否” | 允许一个客户对应多个订单 |
| 5 | 在关系配置中,选择“一对多”类型 | 平台自动在“客户”表单中生成“订单列表”子表 |
3.3 多对多关系 (Many-to-Many)
定义:实体A的一条记录,可以对应实体B的多条记录;实体B的一条记录,也可以对应实体A的多条记录。
典型场景:
- 学生与课程(一个学生选多门课,一门课被多个学生选)
- 订单与商品(一个订单包含多个商品,一个商品出现在多个订单中)
- 角色与权限(一个角色拥有多个权限,一个权限被多个角色拥有)
低代码实现方式:
- 中间表(关联表):系统自动或手动创建一个中间实体,该实体包含两个外键,分别指向实体A和实体B。
- 复合主键:中间表的主键通常由两个外键共同组成(联合唯一)。
- 附加属性:中间表可以额外存储关系本身的属性(例如:选课时间、订单数量)。
配置实战(以“学生-课程”为例):
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 创建“学生”实体,主键为 studentId | 字段:姓名、学号 |
| 2 | 创建“课程”实体,主键为 courseId | 字段:课程名、学分 |
| 3 | 创建“选课记录”中间实体 | 系统自动生成或手动创建 |
| 4 | 在中间实体中添加字段:studentId(关联学生)、courseId(关联课程) | 两个字段均为关联关系类型 |
| 5 | 设置中间实体的联合唯一约束(studentId + courseId) | 防止重复选课 |
| 6 | 在关系配置中,选择“多对多”类型,并指定中间实体 | 平台自动生成双向的多选组件(如:学生表单中显示“已选课程”多选列表) |
| 7 | (可选)在中间实体添加“选课时间”、“成绩”等字段 | 丰富关系属性 |
3.4 关系配置实战要点
在低代码平台中,关系配置不仅仅是选择类型,还需要注意以下关键设置:
- 级联操作:当主表记录被删除时,关联记录如何处理?
- 级联删除:自动删除所有关联记录(适用于订单明细等强依赖场景)。
- 置空:将外键字段设为NULL(适用于评论等弱依赖场景)。
- 禁止删除:如果有关联记录存在,则不允许删除主记录(防止数据丢失)。
- 显示字段:在关联下拉框或列表中,默认显示哪个字段?通常选择“名称”或“标题”字段,而非ID。
- 数据权限:关联查询时,是否受行级权限控制?例如:销售人员只能看到自己客户的订单。
- 性能优化:对于一对多和多对多关系,建议在关联字段上建立数据库索引,避免大数据量下的查询延迟。
关系类型速查表:
| 关系类型 | 外键位置 | 唯一约束 | 中间表 | 典型UI组件 |
|---|---|---|---|---|
| 一对一 | 任意一方 | 是 | 不需要 | 下拉框(单选) |
| 一对多 | 多的一方 | 否 | 不需要 | 下拉框(单选)+ 子表列表 |
| 多对多 | 无(在中间表) | 联合唯一 | 必须 | 多选下拉框 / 穿梭框 |
掌握这三种关系模型,你就能在低代码平台中构建出复杂且符合业务逻辑的数据结构。下一章我们将探讨如何利用这些关系进行高级查询与数据聚合。