MySQL外键允许NULL?

kyl*_*yle 64 mysql database null referential-integrity foreign-keys

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

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,
    ...
);
Run Code Online (Sandbox Code Playgroud)

(为了便于阅读而被截断;各种外键和索引都是有序的,我发誓)

tblImageFlags.flagTypeID在标志类型的查找表上是外键的,你可以想象tblImageFlags.resolutionTypeID 应该是外键的luResolutionTypes.resolutionTypeID.手头的问题是,当首次发布一个标志时,没有逻辑解决方案类型(我很好地宣称这个NULL); 但是,如果设置了一个值,它应该是外键键到查找表.

我找不到这种情况的MySQL语法解决方法.它存在吗?最佳参赛者是:

  • 添加"未经调整"的分辨率类型
  • 添加一个NULL条目luResolutionTypes.resolutionTypeID(这甚至可以在AUTO_INCREMENT列中工作吗?)

感谢您的见解!

PS Bonus指向任何人告诉我,在数据库的情况下,它是"索引"还是"索引".


后续行动:感谢Bill Karwin指出了表格结构中出现的语法错误(NOT NULL如果您希望它允许,请不要设置列NULL!).一旦我有足够的业力给你那些奖励积分,我会:)

Bil*_*win 98

您可以通过允许NULL在外键列中解决此问题tblImageFlags.resolutionTypeID.


PS Bonus指向任何人告诉我,在数据库的情况下,它是"索引"还是"索引".

索引的复数应该是索引.

根据Bryan A. Garner的" 现代美国用法 ":

对于普通目的,索引是优选的复数,而不是索引....... 虽然指数虽然不如论坛教条那么自命不凡,但仍然是自命不凡的.有些作家喜欢技术语境中的指数,如数学和科学.虽然不是指数的最佳复数,但指数在"指标"意义上是允许的.......避免单数指数,这是多元指数的反向形成.

  • 太棒了...现在我需要分析一下我的数据库架构是否听起来是否有意义. (37认同)
  • 索引确实在美国英语中更常见 - 但在英国英语中则更少见,因为索引的使用频率更高,特别是在技术背景下...... http://grammarist.com/usage/indexes-indices/ (21认同)
  • @ShaheenGhiassy,你没看过OP所说的部分,"PS Bonus指向谁告诉我,在数据库的情况下,它是"索引"还是"索引".你太热心了. (5认同)
  • 对于不允许为NULL的主键列,您如何处理外键?这是多年来一直困扰我的应用程序的问题,我有时最终会使用0或者超出外键关系,但这不是最佳选择. (4认同)
  • 好吧,我刚做了一个实验,我的问题是我的pk字段有一个默认值.PK字段为NULL但默认为none,则FK字段可以为NULL,一切都很好. (2认同)