咨询ERD实体关系图中One与One and Only One的区别及适用场景
ERD中One与One and Only One的概念区别及适用场景
核心差异
- One(基数为0..1):指实体A的单个实例,最多只能关联1个实体B的实例,允许不存在关联的实体B实例。简单来说就是“最多一个,也可以没有”。
- One and Only One(基数为1..1):指实体A的单个实例,必须恰好关联1个实体B的实例,既不允许没有关联,也不允许关联超过1个。简单来说就是“有且只有一个”。
适用场景
结合医院业务场景可以快速区分两类约束的使用逻辑:
假设现有「住院病人」和「主治医生」两个实体:
- 如果医院规则允许刚办理入院的病人暂时未分配主治医生,最多只能分配1名主治医生,此时「住院病人」对「主治医生」的关联就是One约束
- 如果医院规则要求所有住院病人入院时必须分配唯一的主治医生,不允许出现无主治医生的住院病人,也不允许一个病人同时归属多名主治医生,此时「住院病人」对「主治医生」的关联就是One and Only One约束
日常业务建模中还有很多典型场景:
- 用户账号和实名认证信息:如果平台支持游客模式,允许用户不实名认证即可使用功能,那么用户账号对实名认证信息的关联适用One约束
- 支付订单和支付流水:每一笔成功的支付订单必然对应唯一的支付流水,不可能存在无流水的有效支付订单,也不可能一笔订单对应多笔流水,此时适用One and Only One约束
注意事项
初学者建模时很容易混淆两类约束,核心判断标准就是是否允许关联关系为空:允许为空选One,必须有且只能有一个关联选One and Only One,选错约束会直接导致后续建表时非空、外键等约束配置错误,建议建模前先梳理清楚业务规则再确定基数。
内容的提问来源于stack exchange,提问作者Carolyn Johnson
相关产品推荐
相关产品推荐

