外键约束问题

问题描述:

的问题表是:外键约束问题

查询

  • ID
  • accepted_quote_id

supplier_enquiry

  • ID
  • enquiry_id

报价

  • ID
  • enquiry_id
  • supplier_enquiry_id

约束如下:

  • 约束supplier_enquiry_ibfk_1外键(enquiry_id)参考文献enquiryid)ON DELETE CASCADE

  • 约束quote_ibfk_1外键(supplier_enquiry_id)参考文献supplier_enquiryid)ON DELETE CASCADE

  • 约束enquiry_ibfk_9对外KEY(accepted_quote_id)参考文献quoteid

因此,我希望这个工作的方式是:

  1. 如果删除“询问”它删除子“supplier_enquiry”记载
  2. 如果删除“supplier_enquiry”它删除子“报价”记录
  3. 您cannnot删除“报价”如​​果“询问”引用引用的ID

的我遇到的问题是删除“查询”记录。由于需要首先删除子记录,即'supplier_enquiry'和'quote',如果'accepted_quote_id'引用了'quote',那么'查询'不能被删除。

任何想法如何克服这个问题?

通过使两个其他表依赖于查询来摆脱循环引用。

所以:

quote.enquiry_id引用enquiry.id

和:

supplier_enquiry.enquiry_id引用enquiry.id

编辑:这可能是不清楚的。我建议对引用enquiry_id到e​​nquiry.id的引用表进行新的约束,然后删除enquiry_ibfk_9

删除前将引用更新为NULL。