SQL表外键是复合主键的一部分

Ton*_*ony 6 sql sql-server foreign-keys primary-key

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

项目表:

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

设备表:

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

现在是否可以将设备表中的ProjectId设置为项目表中的外键?当我尝试时,我得到一个错误,说项目表中的列与现有的主键或唯一约束不匹配?

Lar*_*tig 9

没有.

创建外键时,另一个表中"指向"的键必须是UNIQUE或PRIMARY KEY约束.您无法建立指向允许重复值的列的外键.如果你更新另一个表中的一个重复值(例如),那么很难想象数据应该如何"动作".

做你想做的,你必须建立一个项目表中,专案编号是唯一的或主键,然后在点外键什么别桌到桌.

顺便说一句,您使用术语"主键"来描述构成主键的每个表中的列.实际上,每个表可以只有一个主键.该密钥可以由一个或多个列组成,但密钥本身仍然被称为单数.使用主键优化搜索时,这是一个重要的区别.