首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并外键

问合并外键
EN

Stack Overflow用户
提问于 2014-01-27 19:06:53
回答 2查看 2.1K关注 0票数 1

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

我有两个表,一个Staff,一个Roles,每个表都包含自己的主键StaffID和RoleID。我已经创建了名为StaffRole的第三个表,它将包含StaffID和RoleID,记住这是一对多的关系,因为工作人员可能有一个或更多的角色。

如何将StaffID和RoleID的外键组合起来,为表StaffRole创建一个新的唯一主键。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-27 19:13:33

从技术上讲,您所描述的不是一对多的关系,而是一种多对多的关系,因为一条Staff记录涉及许多Role记录,但是一条Role记录也涉及到许多不同的Staff。使用join表StaffRole是处理关系的典型方法。

这是语义,但这并不是将两个外键组合在一起的问题,而是创建第三个键,它是两个键的组合,也是主键。因此,您的表将有两个FOREIGN KEY定义,两个列各一个,以及两个列之间的一个复合PRIMARY KEY定义。

代码语言:javascript
复制
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。

票数 3
EN

Stack Overflow用户

发布于 2014-01-27 19:14:00

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21389473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档