2009-01-14 78 views
63

我在拼湊一個圖片網站。基本模式的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指點出了什麼竟然是在表結構中的語法錯誤。一旦我有足夠的業力給你這些獎勵積分,我會:)

回答

96

你可以解決這個問題,允許NULL在外鍵列tblImageFlags.resolutionTypeID


PS獎勵積分給誰就給誰告訴我是否在數據庫的情況下,它的「指數」或「指數」。

指數的複數應索引

據 「Modern American Usage」,由布賴恩·A·加納:

對於普通的目的,索引是 優選多個,不指數。 ... 指數,比論壇教理, 是自命不凡不過雖然不太裝腔作勢。 一些作者喜歡指數在 技術上下文,如在數學 和科學。雖然不是最好的 複數索引,索引是 允許在意義上的「指標」。 ... 避免單數指數,從複數指數的回編。

+4

你如何處理不允許爲NULL的主鍵列的外鍵?這是一個多年來一直困擾我的應用程序的問題,有時我最終會使用0,或者說前面的外鍵關係,但這不是最優的。 – glyph 2013-02-13 00:18:57