2013-05-13 74 views
1

我有2種形式在PHP中添加供應商和客戶。在這些表格上,我可以添加供應商或客戶的聯繫人。現在,由於1個供應商或1個客戶可以有多個聯繫人,所以我在桌面上聯繫了外鍵。但問題是,我有1個接觸表,結構是這樣的:NULL值與外鍵

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 

所以基本上,我想,要被存儲在一個表,現在我不知道這是一個好主意。因爲當我添加客戶聯繫人時,我在supplier_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) 

任何意見,將不勝感激......

+0

你想從哪個表中刪除記錄? – Amir 2013-05-13 13:34:53

+0

如果供應商或客戶被刪除我想要他的聯繫人被刪除 – enigmaticus 2013-05-13 13:35:35

+0

IIUC,你需要一個供所有人(供應商和消費者)使用的表格和一個供聯繫人使用的表格(哪個供應商知道哪個消費者,反之亦然)與CASCADE ON DELETE。糾正我,如果我錯了 – draxxxeus 2013-05-13 13:39:57

回答

0

我認爲使用ON DELETE SET NULLSUPPLIER/CONTACTSON DELETE CASCADECUSTOMER/CONTACTS或副/亦可根據你的決定

+0

我認爲這是行不通的,因爲我不能插入NULL值,你誤解了它 – enigmaticus 2013-05-14 05:42:25

+0

當'supplier'的通訊錄記錄被刪除時,系統自動將'supplier_fk_id'從'contacts'替換爲'NULL'。 – Amir 2013-05-14 06:07:19

+0

你誤會了這個問題。我知道如何在刪除和更新工作上,我想將NULL值置於外鍵字段中,併爲該字段創建外鍵。 – enigmaticus 2013-05-14 07:16:16