【问题标题】:NULL values with foreign key带有外键的 NULL 值
【发布时间】:2013-05-13 13:05:51
【问题描述】:

我在 php 中有 2 个表单用于添加供应商和客户。在这些表格上,我可以添加供应商或客户的联系方式。现在,我在表联系人上创建了外键,因为 1 个供应商或 1 个客户可以有很多联系人。但问题是我有 1 个联系表,结构如下:

ID  |  telefon  |  name  |  mail  |  type_fk  | supplier_fk_id  |  customer_id_fk
------------------------------------------------------------------------------
1   |  123      | john   | mail   |     1     |       23        |      NULL
2   |  123234   | julie  | gfdh   |     3     |       NULL      |      45

所以基本上,我希望将其存储在一个表中,现在我不确定这是否是个好主意。因为当我添加客户联系人时,我在供应商_fk_id 中有 NULL 值,供应商也是如此,但在 customer_fk_id 中。我在更新和删除时都有外键 - 级联,因为如果客户/供应商被删除,我希望这些联系人被删除。如果我删除数据库中的外键,我将不会进行我想要的数据库端检查。但我得到这样的错误:

Error   
Error inserting:
Cannot add or update a child row: a foreign key constraint fails 
(`testbase`.`pro_contact`, CONSTRAINT `supplier_fk_id` FOREIGN KEY (`supplier_fk_id`) 
REFERENCES `pro_supplier` (`supplier_id`) ON DELETE CASCADE ON UPDATE CASCADE)

任何建议将不胜感激......

【问题讨论】:

  • 您要从哪个表中删除记录?
  • 在联系人表中,如果供应商或客户被删除我希望他的联系人被删除
  • IIUC,您想要一张供所有人(供应商和消费者)使用的表格和一张用于联系人的表格(供应商知道哪个消费者,反之亦然),并使用 CASCADE ON DELETE。如果我错了,请纠正我
  • 不。 :) 我有 1 张桌子给客户,1 张给供应商,1 张给他们的联系人。如果我添加供应商而不是添加他的联系人,并且该数据存储在联系人表中,并且来自供应商的 FK/PK,反之亦然。

标签: php mysql


【解决方案1】:

我认为将ON DELETE SET NULL 用于SUPPLIER/CONTACTSON DELETE CASCADE 代表 CUSTOMER/CONTACTS 或反之亦然,具体取决于您的决定

【讨论】:

  • 我认为这不起作用,因为我无法插入 NULL 值,你误解了它
  • 当来自supplier的通讯录被删除时,系统自动将supplier_fk_idcontacts替换为NULL
  • 你误解了这个问题。我知道如何删除和更新工作,我想将 NULL 值放在外键字段中,并为该字段创建外键。
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 2011-08-06
  • 2014-06-13
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多