【问题标题】:mysql table multi foreign key cascademysql表多外键级联
【发布时间】:2014-03-12 13:24:06
【问题描述】:

假设我有 4 个相关的表,如下图所示

ad --> advertisable advertisable_product --> product

这3个->的含义如下,都是OneToOne相关的

  1. adadvertisable 有一个 FK(可为空)
  2. advertisable_productadvertisable 有一个 FK
  3. advertisable_productproduct 有一个 FK

我在3. 上设置了on delete cascade约束

问题是:当product被删除时,advertisable_product会被on delete级联约束自动删除,但是如何让它也同时删除advertisable和将 ad 中的 FK 设置为 null。

我能想到的唯一方法是编写一个触发器来做到这一点。有没有更好的解决方案或更好的设计来实现这一点?

欢迎任何建议或意见,谢谢~

【问题讨论】:

    标签: mysql sql jpa foreign-keys cascade


    【解决方案1】:

    这是不可能的。根据 FK 逻辑,可能有另一个产品与 advertisable 相关联。

    假设有 1 个广告 - “A1”和 2 个产品“P1”和“P2”。 advertisable_product 有 2 条记录

    A1 P1

    A1 P2

    现在您删除“P1”。 “A1 P1”被级联删除,但“A1”不能删除,因为它在“A1 P2”中使用

    【讨论】:

    • 嗨 StanislavL,advertisable 和 advertisable_product 是 OneToOne,所以只有 A1 P1 是可能的,没有 A1 P2
    • FK 对此一无所知。从您的业务逻辑来看,这在逻辑上是不可能的,但 DB 认为根据 FK 是可能的
    • 好的,我明白你的意思了。所以,这样做的唯一方法就是手动编写逻辑,对吧?
    • 您可以为 advertisable_product 定义 ON DELETE 触发器并删除 advertisable 中的行
    猜你喜欢
    • 1970-01-01
    • 2011-02-24
    • 2018-04-13
    • 1970-01-01
    • 2019-07-11
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多