当外键指向其他内容时,也移动其他数据

时间:2015-09-18 09:47:54

标签: mysql sql database postgresql

假设您有以下型号。

Book has Articles (Article has foreign key to Book)

Article has Images (Article has upto #max number of images)

Image also has a foreign key to Book. 

编辑某些图片包含在图书中但不归文章所有)

假设你将一篇文章从book1移到了book2。

您希望文章中的图片也指向book2。

处理此问题的首选方式是什么?

2 个答案:

答案 0 :(得分:1)

完美的方式是不要有这种关系,因为它打破了数据规范化规则https://en.wikipedia.org/wiki/Database_normalization

如果出于性能原因需要它,那么它不会产生很多意义:外键上的索引无论如何都会在3个表中进行快速查找。这种方案仅适用于不应修改任何内容的静态表。在这种情况下,它肯定会为您节省一些时间。

答案 1 :(得分:0)

数据模型不必要复杂。你应该避免这种解决方案。但是如果你不得不忍受这种情况,你可以在更新articles之前使用触发器,例如

create function trigger_before_update_on_articles()
...
    if new.book_id <> old.book_id then
        update images set book_id = new.book_id
        where article_id = new.article_id
...

要规范化模型,您可以使用仅包含图书图像的dummy文章。