01 · DATA MODELINGP012 MIN
一对一、一对多与多对多
从业务基数出发决定关系,而不是看到数组就建中间表。
MENTAL MODELRELATIONSHIPS
01业务基数
→02外键方向
→03唯一约束
→04级联策略
先把概念与边界说清楚
定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。
One-to-one
一条主记录最多对应一条扩展记录,常由扩展表外键加唯一约束实现。
One-to-many
一个订单拥有多个订单项,每个订单项只属于一个订单。
Many-to-many
角色可拥有多个权限,权限也可属于多个角色,通过关联表表达。
OrderItem 为什么不是简单桥表
产品和订单是多对多,团队只保存 order_id 与 product_id。
- 01
识别关联发生时还需保存数量、成交单价、折扣与税。
- 02
把 OrderItem 作为独立实体。
- 03
保存下单时快照,避免未来产品改价篡改历史。
历史订单可重算,售后也能准确定位具体行项目。
马上动手
- 画出 User—Role—Permission 的基数。
- 说明 Product—SKU 为什么是一对多。
常见坑
- 用逗号字符串存 ID 列表
- 忽略关联实体自己的属性
- 任意开启级联删除
05 · KNOWLEDGE CHECK如何判断多对多关联表是否应有独立 ID?查看答案⌄
答案
当关联需要被其他记录引用、拥有生命周期或承载业务属性时,应把它视为实体并给予稳定身份。