在MySQL中,如何将表中的2个外键组合成主键?
我有两个表,一个Staff
,一个Roles
,每个表都包含自己的主键StaffID
和RoleID
。我创建了一个名为StaffRole
的第三个表,其中包含StaffID
和RoleID
,请记住这是一对多关系,因为工作人员可能有一个或多个角色。
如何合并StaffID
和RoleID
的外键,为表StaffRole
创建新的唯一主键。
答案 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作为外键。