ERD中为弱实体添加人工单主键后是否不再属于弱实体?
ER模型中弱实体加人工代理键后的判定解答
首先先把弱实体的两个核心判定标尺掰清楚,别拿表象当本质:
- 存在依赖:实体实例的存在完全依附于另一个属主实体的实例,没有对应的属主实例,这个实体的实例就没有任何业务意义,属于业务逻辑层的固有属性,和数据库怎么设主键没有任何关系。
- 标识依赖:实体自身的原生属性无法独立完成全局唯一的实例标识,必须结合属主实体的标识才能唯一区分不同实例,属于业务标识规则层面的属性。
大家常说的“外键作为主键组成部分的实体是弱实体”,只是上述两个核心属性在传统ER建模中的典型表现形式,不是判定的充要条件。
针对你提的两个问题,直接给结论:
- 给原弱实体添加无业务含义的人工键(比如自增
entity_id)作为单一主键,只在数据库物理实现层面消除了形式上的标识依赖——毕竟现在单靠这个代理键就能在表里唯一定位一行记录,不需要再联合外键做联合主键。但业务层面的标识依赖根本没消失:业务场景下根本不会用这个无意义的自增ID来指代实体实例。
举个最常见的场景:你给订单明细表加了自增
order_item_id当单主键,快递员核对发货商品、财务核对退款明细的时候,永远不会报这个自增ID找你对单,还是会说“XX订单下的第2个商品”,本质还是在用属主实体的标识做定位,业务层面的标识规则半毛钱没改。
- 只要实体间的关联关系、业务依赖规则没有任何变更,这个实体在ER概念模型层面依然是弱实体。
很多人会把物理建表的实现技巧和概念模型的定义混为一谈:现在几乎所有开发团队建表都习惯统一加自增ID当单主键,难道所有加了自增ID的表对应的实体全成了能独立存在的强实体?显然不可能。你改的只是数据库存数据、找数据的方式,根本没碰实体之间的依赖本质——原来要依附属主实体才能存在的实体,加多少个代理键也不可能变成独立的强实体。
最后补个容易踩的误区:不要把物理表结构的设计等同于概念模型的建模。弱实体是业务层面的抽象定义,不是由主键字段组成规则决定的;主键怎么设,只是你把概念模型落地成物理表的时候选的实现方案而已,反过来拿实现方案倒推概念定义,完全是因果倒置。
内容的提问来源于stack exchange,提问作者Jen
相关产品推荐
相关产品推荐

