我的問題是,我必須使表將具有外鍵,並且三個外鍵之一必須是非空,其餘的必須是NULL。 MySQL中有什麼解決它嗎? Michael。在MySQL數據庫中使用null。三個外鍵之一必須不爲空。
1
A
回答
0
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
相關問題
- 1. 外鍵在mySQL中必須是索引?
- 2. Mysql外鍵,必須在引用表或鍵中匹配刪除?
- 3. 三級數據庫 - 外鍵
- 4. 數據必須的,是NULL
- 5. Mysql外鍵必須引用父表的整個主鍵?
- 6. 數據庫空不表示爲空NULL
- 7. 在一個表中有兩個外鍵的MySQL數據庫
- 8. 將外鍵更改爲null不爲空
- 9. 無法在mysql中爲不同的數據庫創建外鍵
- 10. 在另一個數據庫表中的MySQL外鍵?
- 11. Mysql跨數據庫外鍵
- 12. MySQL數據庫外鍵
- 13. 索引名稱在Mysql中的整個數據庫中必須唯一嗎?
- 14. MySQL約束 - 集合中的某一列必須爲非null?
- 15. 兩個數據庫之間的外鍵
- 16. 休眠/ JPA:映射舊的數據庫不爲空的外鍵「假人」值NULL
- 17. 外鍵(FK300D262149997B:four [three_id]))的列數必須與引用的主鍵相同(三[one_id,two_id])
- 18. MySQL數據庫,多個外鍵
- 19. 爲什麼外鍵數據不會持久到mysql數據庫?
- 20. 空外鍵MySQL不能爲空
- 21. 數據庫設計 - NULL外鍵
- 22. MySQL - 外鍵刪除設置null不爲空字段
- 23. 在2列必須匹配唯一行時使用REPLACE INTO MySQL數據庫
- 24. 在SQL中,我如何使用一個必須有許多(20+)外鍵的表?
- 25. 在使用錯誤之前項目集合必須爲空
- 26. 無法使用SqlYog在MySQL數據庫中設置外鍵
- 27. Spring Boot 1.4:Principal必須爲空例外
- 28. 外鍵ID必須爲空,儘管我有CascadeOnDelete
- 29. MySQL:整個數據庫,將[空]值轉換爲NULL
- 30. 如何使用外鍵作爲另一個表的主鍵在mysql數據庫中創建表?
你標記了你的問題數據庫設計,所以我想我會問你的。我想不出一個合理的設計來證明2個外鍵始終爲空。 – Jacob
@Michal:發佈信息。作爲cularis要點,您的設計可能有缺陷。規範化數據庫設計中不應存在NULL(尤其在主鍵和外鍵中)。 –
主鍵無效;但是FK中的1方沒有任何錯誤... –