mysql引用表的两种方式_mysql – 在SQL中,两个表可以相互引用吗?

不,不行表之间的循环引用是凌乱的。看到这个(十岁)的文章:

SQL By Design: The Circular Reference

有些DBMS可以处理这些,特别注意的是,但是MySQL会有问题。

第一个选择是,作为您的设计,使两个FK之一成为无效。这样可以解决鸡蛋问题(我应该先插入哪个表格?)。

尽管你的代码有一个问题。它将允许产品具有默认图片,该图片将引用另一个产品!

要禁止这样的错误,您的FK约束应该是:

CONSTRAINT FK_products_1

FOREIGN KEY (id, default_picture_id)

REFERENCES products_pictures (product_id, id)

ON DELETE RESTRICT --- the SET NULL options would

ON UPDATE RESTRICT --- lead to other issues

这将需要在上表FK的(product_id,id)的表products_pictures中定义UNIQUE约束/索引并正常工作。

另一种方法是从产品表中删除Default_Picture_ID列,并在图表中添加IsDefault BIT列。该解决方案的问题是如何让每个产品只有一张照片才能让所有其他照片都有效。在SQL Server中(我认为在Postgres中)可以使用部分索引:

CREATE UNIQUE INDEX is_DefaultPicture

ON products_pictures (Product_ID)

WHERE IsDefault = 1 ;

但MySQL没有这样的功能。

你可能感兴趣的:(mysql引用表的两种方式)