MySQL外键允许NULL?

时间:2009-01-14 05:17:00

标签: mysql database null foreign-keys referential-integrity

我正拼凑一个图片网站。基本模式非常简单的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,
    ...
);

(为了便于阅读而截断;各种外键和索引按顺序排列,我发誓)

tblImageFlags.flagTypeID在标记类型的查找表上是外键的,您可以想象tblImageFlags.resolutionTypeID luResolutionTypes.resolutionTypeID上进行外键操作。手头的问题是,当首次发布标志时,没有逻辑解决方案类型(我声明这是NULL的良好用法);但是,如果设置了一个值,它应该被外键键入查找表。

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

  • 添加“未经审核”的分辨率类型
  • NULL添加luResolutionTypes.resolutionTypeID条目(这是否会在AUTO_INCREMENT列中生效?)

感谢您的见解!

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


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

1 个答案:

答案 0 :(得分:97)

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


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

索引的复数应为索引

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

  

对于普通用途,索引是   优选的复数,而不是指数。   ...   指数,虽然不如论坛 dogmata 自命不凡,   尽管如此,仍然是自命不凡的。   一些作家更喜欢 indices   技术背景,如数学   和科学。虽然不是最好的   复数 index indices 是   允许的意义上的“指标”。   ...   避免使用单数 indice ,这是复数索引的反向形式。