gpt4 book ai didi

MySQL外键约束多表同一个字段

转载 作者:行者123 更新时间:2023-11-29 22:21:18 24 4
gpt4 key购买 nike

我有一个评论系统,用户可以在其中对各种不同类型的页面发表评论。每种页面类型(例如评论)都有自己的表,其中包含 id 列。在我的评论表中,我有 page_typepage_id ,它们引用页面类型及其各自表的 id 列。

我希望根据 page_typepage_id 列进行外键约束,这样,如果页面 ID 更改或页面被删除,评论就会更新。我知道这在单个列上是不可能的,但是对此的最佳解决方案是什么?

我可以为每种页面类型设置一个列,该列将引用特定表中的 ID 并对其施加外键约束,但是随着页面类型数量开始增长(目前有 4 个),这可能会变得困惑。

最佳答案

MySQL 不支持派生列上的外键引用(没有派生列)。

所以,我想说,如果您需要对某物的外键引用,那么该“某物”就是一个实体。那应该是引用的地方。考虑这样的结构:

create table pages (
PageId int not null autoincrement primary key,
<additional columns common to all pages>
);

那么每个特定的页面类型可以是:

create table PagesType1 (
PageType1Id int not null autoincrement primary key,
PageId int not null,
foreign key PageId references pages(PageId)
)

这并不完美,因为两种不同的页面类型可能会引用同一页面。但是,如果没有触发器,这对于 MySQL 来说就相当不错了。另一个解决方案是:

create table pages (
PageId int not null autoincrement primary key,
<additional columns common to all pages>,
PageType1Id int unique,
PageType2Id int unique,
. . .
foreign key (PageType1Id) references PagesType1(PageType1Id),
. . .
);

这可以正确获取外键关系。但是,您需要一个触发器来保证只设置一个值。

无论如何,这个答案的要点是您的数据库中需要一个 Pages 实体。有多种方法可以实现它。

关于MySQL外键约束多表同一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30683579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com