结合外键

时间:2014-01-27 19:06:54

标签: mysql foreign-keys

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

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

如何合并StaffIDRoleID的外键,为表StaffRole创建新的唯一主键。

2 个答案:

答案 0 :(得分:1)

从技术上讲,您所描述的不是一对多关系,而是一个多对多关系,因为一个{{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; 指定为表类型,因为MySQL不会在MyISAM表上强制执行InnoDB

答案 1 :(得分:-1)

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

相关问题