具有2个值的主键的SQL外键

时间:2018-03-26 03:33:44

标签: mysql sql

据我所知,你只能将主键和唯一列分配给外键......但我有一个表,它在两列之间有一个主键:

alter table NAME add constraint PK primary key(VALUE1, VALUE2)

我试图将Value1作为另一个表中的外键,但它没有将其识别为主键或唯一 - 显然是因为主键在两个值之间共享...那么什么我从这里做?我对SQL语法很陌生......

2 个答案:

答案 0 :(得分:1)

您是正确的,您只能将主键和唯一列分配给外键。我不太清楚这里的业务需求,但理想情况下,你应该有一个第三个表,其中VALUE1作为主键。如果没有,你应该创建一个。

答案 1 :(得分:1)

主要思想是,您无法将外键链接到可以在引用的表上保留重复项的值。因此,如果您的主表有一个复合键(超过1列),将外键链接到它的一列(或许多但不是全部)将把表链接到多行(从那一列开始)本身可能有重复。)

如果你真的需要在两者之间建立联系,那么你就会遇到问题:

  • 您的主键实际上不是2列或更多列。您可以阅读关于规范化数据库(以标准正常形式)来解决此问题。
  • 表格之间的关系不是1到N(它是N到M)。您无法添加外键,您必须创建一个第三个表,其中包含两个主键以链接它们。