技术咨询:ER图中实体间的关系能否设置键?
ER图中实体间关系是否可设置键?
首先明确:关系本身可以有键,但不是所有场景都需要,也不是所有关系类型都适合直接加主键,得结合关系类型和业务逻辑判断:
1. 一对一(1:1)关系
这种场景下完全没必要给关系单独加主键。通常的做法是把其中一个实体的主键作为另一个实体的外键,同时设为该实体的主键(比如用户表和用户详情表,详情表的主键可以直接用用户ID)。强行给关系加独立主键属于冗余设计,这大概率是你导师不认可的原因之一。
2. 一对多(1:N)关系
同样不需要给关系单独加键。多方实体的表中会包含一方实体的主键作为外键,多方的主键要么是自身的主键字段,要么是自身主键+外键的组合(但后者很少用)。给中间关系加主键只会增加不必要的表结构,不符合简洁的设计原则。
3. 多对多(M:N)关系
这是唯一需要给关系(对应数据库里的中间关联表)设键的场景:
- 多对多关系必须通过中间表关联,这个表的主键通常是两个关联实体主键组成的复合主键——因为一组(实体A主键+实体B主键)就能唯一确定一条关联记录,完全贴合ER模型的语义;
- 你也可以给中间表加单独的自增主键,但这种做法不是必须的,甚至有些场景下会偏离ER模型的核心逻辑。
你导师不认可的可能原因
- 你在1:1或1:N关系里加了独立主键,造成设计冗余;
- 即使是多对多关系,你没采用复合主键,而是额外加了无意义的独立主键,不符合ER模型的关联语义;
- 导师希望你遵循“关系的键由参与关联的实体主键推导”的设计原则,而非凭空给关系加独立主键。
内容的提问来源于stack exchange,提问作者Judy
相关产品推荐
相关产品推荐

