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

ac17ddb57513ff2623266cdd3b3ce3a9.png

慕沐林林

您正在尝试进行称为多态关联的设计。也就是说,外键可以引用几个相关表中的任何一个中的行。但是外键约束必须恰好引用一个表。您不能声明引用不同表的外键,具体取决于表的另一列中的值Comments。这将违反关系数据库设计的几个规则。更好的解决方案是制作一种由评论引用的“超级”。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、付费专栏及课程。

余额充值