【问题标题】:when foreign key points to something else, move other data as well当外键指向别的东西时,也移动其他数据
【发布时间】:2015-09-18 20:38:11
【问题描述】:

假设您有以下模型。

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。

首选的处理方式是什么?

【问题讨论】:

    标签: mysql sql database postgresql


    【解决方案1】:

    最好的方法是不存在这种关系,因为它违反了数据规范化规则https://en.wikipedia.org/wiki/Database_normalization

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

    【讨论】:

    • 抱歉,我进行了编辑,这可能解释了为什么我需要图像 -> 书籍关系。你可能仍然会说我仍然违反了某些东西,请让我知道如何改进它。
    • 可能,最好的方法是建立两个独立的关系:book_image 和 article_image。
    【解决方案2】:

    数据模型不必要的复杂。您应该避免此类解决方案。但是如果你不得不忍受这个,你可以在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 仅包含书籍图片的文章。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      • 2012-01-06
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      相关资源
      最近更新 更多