在MySQL中,如何将表中的两个外键组合成主键?
我有两个表,一个Staff,一个Roles,每个表都包含自己的主键StaffID和RoleID。我已经创建了名为StaffRole的第三个表,它将包含StaffID和RoleID,记住这是一对多的关系,因为工作人员可能有一个或更多的角色。
如何将StaffID和RoleID的外键组合起来,为表StaffRole创建一个新的唯一主键。
发布于 2014-01-27 19:13:33
从技术上讲,您所描述的不是一对多的关系,而是一种多对多的关系,因为一条Staff记录涉及许多Role记录,但是一条Role记录也涉及到许多不同的Staff。使用join表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 KEY。
发布于 2014-01-27 19:14:00
您可以创建一个StaffRoleID作为主键,并使用StaffID和RoleID作为外键。
https://stackoverflow.com/questions/21389473
复制相似问题