2011-07-28 49 views
1

我的問題是,我必須使表將具有外鍵,並且三個外鍵之一必須是非空,其餘的必須是NULL。 MySQL中有什麼解決它嗎? Michael。在MySQL數據庫中使用null。三個外鍵之一必須不爲空。

+2

你標記了你的問題數據庫設計,所以我想我會問你的。我想不出一個合理的設計來證明2個外鍵始終爲空。 – Jacob

+1

@Michal:發佈信息。作爲cularis要點,您的設計可能有缺陷。規範化數據庫設計中不應存在NULL(尤其在主鍵和外鍵中)。 –

+2

主鍵無效;但是FK中的1方沒有任何錯誤... –

回答

0

FOREIGN KEY Constraints例如:

CREATE TABLE parent 
(
    id INT NOT NULL, PRIMARY KEY (id) 
) ENGINE=INNODB; 

CREATE TABLE child 
(
    id INT, parent_id INT, 
    INDEX par_ind (parent_id), 
    FOREIGN KEY (parent_id) REFERENCES parent(id) 

) ENGINE=INNODB; 
1

避免空的外鍵 - 他們有許多問題和缺點。將這些列放在單獨的表格中通常會更容易,更好,因此當沒有值時不需要爲它們創建空值。這應該是默認方法:每種不同情況下的Normal Form,除非你有特殊的理由將三列合併到一個表中。

+1

完全不同意。我看到Foriegn Key有一個可空的一面沒什麼問題:事實上它們很常見。 –

+0

@Mitch,其中一個缺點是,約束似乎沒有被強制執行。可空的「外鍵」實際上並不是外鍵。它們在不同的數據庫管理系統和軟件工具中的工作方式不同,所以一個人或應用程序解釋可空的外鍵是不同的。根據對「空」意味着什麼的常用解釋,它們沒有多大意義。而且它們完全是多餘的 - 沒有任何東西可以用可空的約束來表示,不能做得更好或沒有更好的約束。 BTW不確定你的意思是「可空1方」。 – sqlvogel

相關問題