【问题标题】:Combining Foreign Keys组合外键
【发布时间】:2014-02-18 19:12:00
【问题描述】:

在 MySQL 中,如何将表中的 2 个外键组合成主键?

我有两张表,一张Staff,一张Roles,每个都包含自己的主键StaffIDRoleID。我创建了第三个名为StaffRole 的表,其中将包含StaffIDRoleID,请记住这是一对多的关系,因为工作人员可能有1 个或多个角色。

您将如何组合StaffIDRoleID 的外键来为表StaffRole 创建一个新的唯一主键。

【问题讨论】:

    标签: mysql foreign-keys


    【解决方案1】:

    从技术上讲,您所描述的不是一对多关系,而是多对多关系,因为有一个Staff记录与许多 Role 记录相关,但一个 Role 记录也与许多不同的 Staff 相关。您使用连接表StaffRole 是处理关系的典型方式。

    这是语义,但实际上并不是组合两个外键的问题,而只是创建第三个键,它是两者的组合,也是主键。因此,您的表将有两个 FOREIGN KEY 定义,一个用于两列,一个复合 PRIMARY KEY 定义跨两个列。

    CREATE TABLE StaffRole (
      StaffID INT NOT NULL,
      RoleID INT NOT NULL,
      /* Composite primary key on both columns */
      PRIMARY KEY (StaffID, RoleID),
      /* Two separate foreign keys */
      FOREIGN KEY (StaffID) REFERENCES Staff (StaffID),
      FOREIGN KEY (RoleID) REFERENCES Roles (RoleID)
    ) ENGINE=InnoDB;
    

    注意,我已将 InnoDB 指定为表类型,因为 MySQL 不会在 MyISAM 表上强制使用 FOREIGN KEYs。

    【讨论】:

      【解决方案2】:

      您可以创建一个 StaffRoleID 作为主键,并使用 StaffID 和 RoleID 作为外键。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-14
        • 1970-01-01
        • 2012-10-30
        • 1970-01-01
        • 2011-01-16
        • 2021-03-12
        • 2021-04-10
        • 1970-01-01
        相关资源
        最近更新 更多