【问题标题】:SQL Foreign key for Primary key with 2 values具有 2 个值的主键的 SQL 外键
【发布时间】:2018-03-26 03:33:44
【问题描述】:

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

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

我正在尝试使 Value1 成为另一个表中的外键,但它没有将其识别为主键或唯一键 - 显然是因为主键在两个值之间共享......那么我该怎么做呢?我对 SQL 语法很陌生...

【问题讨论】:

  • 1:外键不必是唯一的。 2:外键可以像主键一样由多列组成。

标签: mysql sql


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    主要思想是您不能将外键链接到可以在引用表上保存重复项的值。因此,如果您的主表有一个复合键(超过 1 列),则将外键链接到它的一个(或多个但不是全部)列会将表链接到不止一行(因为该列可能有重复本身)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多