MySQL的外键允许NULL?

我在拼凑一个图片网站。 基本模式的MySQL非常简单,但是在尝试表示与图像相关的可能的pipe理标志(“不适当”,“受版权保护”等)时遇到了一些麻烦。 我目前的想法如下:

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在标志types的查找表上被外键控制,正如您可以想象的那样, tblImageFlags.resolutionTypeID 应该luResolutionTypes.resolutionTypeID外键。 现在的问题是,当一个标志第一次发布,没有逻辑parsingtypes(我会声明这是一个很好的使用NULL ); 但是,如果设置了值,则应该对查找表进行外键。

我无法find这种情况下的MySQL语法解决方法。 它存在吗? 最好的亚军是:

  • 添加一个“未经审查”的分辨率types
  • 将一个NULL条目添加到luResolutionTypes.resolutionTypeID (这将甚至工作在AUTO_INCREMENT列?)

感谢您的见解!

PS奖金指向谁告诉我,在数据库的情况下,它是“索引”还是“索引”。


后续 :感谢Bill Karwin指出了表结构中的一个语法错误(如果你希望它允许NULLNOT NULL将列设置为NOT NULL NULL !)。 一旦我有足够的业力给你这些奖励点,我会:)

你可以通过在外键列tblImageFlags.resolutionTypeID允许NULL来解决这个问题。


PS奖金指向谁告诉我,在数据库的情况下,它是“索引”还是“索引”。

索引的复数应该是索引

根据Bryan A. Garner的“ Modern American Usage ”

对于普通的目的, 指数是优选的复数,而不是指数 。 尽pipe不像论坛教条那么自命不凡,但是这种指责却是自命不凡的。 有些作者更喜欢技术上的指标 ,如math和科学。 虽然不是指数的最佳复数,但指数在“指标”的意义上是可以允许的。 …避免单一的指标,从复数指数的背后形成。