SQL 中的复合外键
数据库设计通常涉及创建表之间的关系。当一个表的主键由多个列组成时,将其链接到另一个表中的外键就变得具有挑战性。本题探讨如何在具有复合主键和外键的两个表之间建立关系。
问题陈述
考虑以下两个表:
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`) );
目标是在组表中创建一个链接到教程表中的复合主键的字段。问题来了:我们如何有效地关联这些表?
解决方案
根据 MySQL 文档,可以设置外键映射到复合键。这需要在外键表中创建多个列:
ALTER TABLE `group` ADD COLUMN `beggingTime` time NOT NULL; ALTER TABLE `group` ADD COLUMN `day` varchar(8) NOT NULL; ALTER TABLE `group` ADD COLUMN `tutorId` int(3) NOT NULL; ALTER TABLE `group` ADD FOREIGN KEY (`beggingTime`,`day`,`tutorId`) REFERENCES tutorial(`beggingTime`,`day`,`tutorId`);
此方法在组表中创建与教程表中复合主键的组件相对应的附加列。
建议
虽然创建复合外键是可能的,但它并不总是最佳的设计选择。正如其他回复所建议的那样,建议重新考虑表设计并为教程表使用单列主键。这将提高数据库性能并简化关系管理。
以上是如何在MySQL中实现复合外键?的详细内容。更多信息请关注PHP中文网其他相关文章!