小编典典

MySQL外键是否允许为NULL?

mysql

我拼凑了一个图片网站。基本模式是非常简单的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!)。一旦我有足够的业力为您提供这些奖励积分,我就会:)


阅读 977

收藏
2020-05-17

共1个答案

小编典典

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


PS Bonus指向任何告诉我的人,就数据库而言,是“索引”还是“索引”。

索引 的复数应该是 index

根据布莱恩·加纳(Bryan A.
Garner)的《现代美国人的用法》:

出于普通目的, 索引 是首选的复数,而不是 索引 。… 索引 虽然比 论坛教条要不要
那么自命不凡,但仍然自命不凡。一些作家更喜欢在技​​术方面的 索引 ,例如在数学和科学方面。虽然不是最好的多个 指数指数
是在这个意义上允许的“指标”。…避免单数 索引 ,即复数 索引的 倒数 形式。 __

2020-05-17