您正在尝试进行一种称为“ 多态关联”的设计。即,外键可以引用几个相关表中的任何表中的行。
但是外键约束必须精确地引用一个表。您不能根据表的另一列中的值来声明引用不同表的外键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) ); 必须先插入新行才能生成新的伪密钥ID ,然后才能在BlogPosts或中UserPictures插入行Commentable。然后,您可以在将内容插入到相应的子类型表中时使用该生成的ID。
一旦完成所有这些操作,就可以依靠引用完整性约束。来源:stack overflow
如果觉得《mysql 外键约束条件_MySQL-条件外键约束-问答-阿里云开发者社区-阿里云》对你有帮助,请点赞、收藏,并留下你的观点哦!