mysql 外键约束条件_MySQL – 条件外键约束

你试图做一个名为多态关联的设计。也就是说,外键可以引用几个相关表中的任何一个中的行。

但外键约束必须只引用一个表。您不能根据注释表的另一列中的值声明引用不同表的外键。这将违反关系数据库设计的几个规则。

一个更好的解决方案是创建一种由注释引用的“supertable”。

CREATE TABLE Commentable (

id SERIAL PRIMARY KEY

);

CREATE TABLE Comments (

comment_id SERIAL PRIMARY KEY,

foreign_id INT NOT NULL,

...

FOREIGN KEY (foreign_id) REFERENCES Commentable(id)

);

您的每个内容类型都将被视为此可重新订阅的子类型。这类似于接口的面向对象的概念。

CREATE TABLE BlogPosts (

blogpost_id INT PRIMARY KEY, -- notice this is not auto-generated

...

FOREIGN KEY (blogpost_id) REFERENCES Commentable(id)

);

CREATE TABLE UserPictures (

userpicture_id INT PRIMARY KEY, -- notice this is not auto-generated

...

FOREIGN KEY (userpicture_id) REFERENCES Commentable(id)

);

在可以将一行插入BlogPosts或UserPictures之前,必须将一个新行插入到Commentable以生成新的伪键id。然后,您可以在将内容插入到相应的子类型表中时使用生成的ID。

一旦你做了所有这一切,你可以依赖参照完整性约束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值