小编典典

复合键作为外键(sql)

mysql

这是我的两个关注表:

CREATE TABLE IF NOT EXISTS `tutorial` (
  `beggingTime` time NOT NULL,
  `day` varchar(8) NOT NULL,
  `tutorId` int(3) NOT NULL,
  `maxMembers` int(2) NOT NULL,
  `minMembers` int(1) NOT NULL,
  PRIMARY KEY (`beggingTime`,`day`,`tutorId`),
  KEY `tutorId` (`tutorId`)
)


CREATE TABLE IF NOT EXISTS `group` (
  `groupId` tinyint(3) NOT NULL AUTO_INCREMENT,
  `status` varchar(20) NOT NULL,
  `groupName` varchar(50) NOT NULL,
  PRIMARY KEY (`groupId`)
)

我想在“组”中创建一个字段,该字段将链接到“教程”中的复合唯一键。所以我想我的问题是,如何关联这些表?我必须为“教程”中的每个主键在“组”中创建外键字段吗?


阅读 789

收藏
2020-05-17

共1个答案

小编典典

根据mySQL文档,您应该能够设置到组合的外键映射,这将要求您创建多个列。

添加列并将其放在group表格中

FOREIGN KEY (`beggingTime`,`day`,`tutorId`) 
    REFERENCES tutorial(`beggingTime`,`day`,`tutorId`)

正如史蒂文(Steven)在以下注释中提到的那样,您应该尝试重新构造它,以便教程表使用实际的主键(即使它只是身份代理键)。由于SQL是为这种类型的关系而不是复合关系而构建的,因此可以提高性能。

2020-05-17