首页 > 数据库 > mysql教程 > SQL中单列可以作为多个外键吗?

SQL中单列可以作为多个外键吗?

Patricia Arquette
发布: 2024-12-24 09:21:26
原创
199 人浏览过

Can a Single Column Serve as Multiple Foreign Keys in SQL?

将一列引用为多个外键

在数据库设计中,可能会出现这样的情况:您希望使用单个列作为外键来建立不同表之间的关系多个目标表。然而,这种特定场景(如下面的 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板