在数据库设计中,可能会出现这样的情况:您希望使用单个列作为外键来建立不同表之间的关系多个目标表。然而,这种特定场景(如下面的 SQL 代码片段所示)是不可行的:
CREATE TABLE `pdf_created` ( `id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT, `pdf_id` INT(10) NOT NULL, `item_type` INT(3) UNSIGNED NOT NULL, `item_id` INT(10) UNSIGNED NOT NULL, `quantity` INT(3) NOT NULL, PRIMARY KEY (`id`), KEY `FK_pdf_id` (`pdf_id`), CONSTRAINT `FK_pdf_id` FOREIGN KEY (`pdf_id`) REFERENCES `pdf` (`id`), KEY `FK_item_type` (`item_type`), CONSTRAINT `FK_item_type` FOREIGN KEY (`item_type`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, KEY `FK_item_id` (`item_id`), CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `service` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `header` (`id`) ON DELETE CASCADE ON UPDATE CASCADE );
这样做的原因是强制执行外键约束,要求单列匹配多个表中的主键在关系数据库理论中是不可能的。虽然您可以在 pdf_created 表中创建引用产品、服务、标题和项目表中相应列的列,但不允许同时为每个引用建立外键约束。
但是,这是可能的利用引用的列值进行连接,而无需定义显式外键约束。外键本质上是包含关联表主键值的列。这允许您根据共享外键值在表之间连接记录。在给定的场景中,您可以让 pdf_created 表中的 item_id 列引用产品、服务、标头和项目表中的主键。通过这样做,您可以使用 item_id 列作为连接条件将 pdf_created 表与任何这些目标表连接起来。
以上是SQL中单列可以作为多个外键吗?的详细内容。更多信息请关注PHP中文网其他相关文章!