Visual LabINTERACTIVE LEARNING
01 · DATA MODELINGP012 MIN

一对一、一对多与多对多

从业务基数出发决定关系,而不是看到数组就建中间表。

MENTAL MODELRELATIONSHIPS
01业务基数
02外键方向
03唯一约束
04级联策略
关系回答的是“一个 A 在同一业务时刻最多能关联几个 B”,基数是业务规则,不是 UI 形状。
01 · CONCEPTS & BOUNDARIES

先把概念与边界说清楚

定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。

01

One-to-one

一条主记录最多对应一条扩展记录,常由扩展表外键加唯一约束实现。

02

One-to-many

一个订单拥有多个订单项,每个订单项只属于一个订单。

03

Many-to-many

角色可拥有多个权限,权限也可属于多个角色,通过关联表表达。

02 · BLIND BOTS CASE

OrderItem 为什么不是简单桥表

问题现场

产品和订单是多对多,团队只保存 order_id 与 product_id。

  1. 01

    识别关联发生时还需保存数量、成交单价、折扣与税。

  2. 02

    把 OrderItem 作为独立实体。

  3. 03

    保存下单时快照,避免未来产品改价篡改历史。

得到什么

历史订单可重算,售后也能准确定位具体行项目。

03 · PRACTICE

马上动手

  1. 画出 User—Role—Permission 的基数。
  2. 说明 Product—SKU 为什么是一对多。
04 · PITFALLS

常见坑

  • 用逗号字符串存 ID 列表
  • 忽略关联实体自己的属性
  • 任意开启级联删除
05 · KNOWLEDGE CHECK如何判断多对多关联表是否应有独立 ID?查看答案⌄
答案

当关联需要被其他记录引用、拥有生命周期或承载业务属性时,应把它视为实体并给予稳定身份。