我在拼湊一個圖片網站。基本模式的MySQL非常簡單,但在嘗試表示與圖像相關的可能管理標誌(「不適當」,「受版權保護」等)時遇到了一些麻煩。我現在的想法是:MySQL外鍵允許NULL?
tblImages (
imageID INT UNSIGNED NOT NULL AUTO_INCREMENT,
...
);
tblImageFlags (
imageFlagID INT UNSIGNED NOT NULL AUTO_INCREMENT,
imageID INT UNSIGNED NOT NULL,
flagTypeID INT UNSIGNED NOT NULL,
resolutionTypeID INT UNSIGNED NOT NULL,
...
);
luResolutionTypes (
resolutionTypeID INT UNSIGNED NOT NULL AUTO_INCREMENT,
resolutionType VARCHAR(63) NOT NULL,
...
);
(截斷爲了便於閱讀;各類外鍵和索引是爲了,我發誓)的標誌類型的查找表
tblImageFlags.flagTypeID
被國外鍵控,並且你可以想象得到tblImageFlags.resolutionTypeID
應該在luResolutionTypes.resolutionTypeID
上被外鍵。現在的問題是,當一個標誌首次發佈時,沒有邏輯分辨率類型(我會聲明這是一個很好用的NULL
);但是,如果設置了值,則應該對查找表進行外鍵。
我找不到這種情況下的MySQL語法解決方法。它存在嗎?最好的亞軍是:
- 添加一個「非審」的決議類型
- 添加
NULL
進入luResolutionTypes.resolutionTypeID
(會這樣即使在AUTO_INCREMENT
列工作?)
感謝您的見解!
PS獎金指向任何人告訴我,在數據庫的情況下,它是「索引」還是「索引」。
後續:(!如果你想讓它允許NULL
沒有設置NOT NULL
列)感謝比爾Karwin指點出了什麼竟然是在表結構中的語法錯誤。一旦我有足夠的業力給你這些獎勵積分,我會:)
你如何處理不允許爲NULL的主鍵列的外鍵?這是一個多年來一直困擾我的應用程序的問題,有時我最終會使用0,或者說前面的外鍵關係,但這不是最優的。 – glyph 2013-02-13 00:18:57