小编典典

SQL表外键,它是组合主键的一部分

sql

一个表的外键是否可以成为另一个表的组合主键的一部分?例如,如果我有两个表,一个包含有关不同用户的所有活动项目的信息,另一个包含有关项目正在使用哪种设备的信息:

项目表:

Composite Primary Keys: UserId, ProjectId (两者都不是唯一的)

设备表:

Composite Primary Keys: UserId, ProjectId, EquipmentId (两者都不是唯一的)

现在可以将设备表中的ProjectId设置为项目表中的外键吗?尝试时,我收到一条错误消息,指出“项目表”中的列与现有的主键或唯一约束不匹配?


阅读 342

收藏
2021-03-23

共1个答案

小编典典

不。

创建外键时,在另一个表中“指向”的键必须是UNIQUE或PRIMARY
KEY约束。您不能建立指向允许重复值的列的外键。很难想象如果更新另一个表中的重复值之一(例如),数据将如何“起作用”。

若要执行您想要的操作,您必须建立一个Projects表,其中ProjectID为UNIQUE或PRIMARY KEY,然后将其他 两个
表中的外键指向该表。

附带说明,您使用术语“主键”来描述组成主键的每个表中的列。实际上,每个表可以只有一个主键。该键可以由一列或多列组成,但是该键本身仍以单数形式引用。使用主键优化搜索时,这是一个重要的区别。

2021-03-23