我在拼凑一个图片网站。基本模式的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指点出了什么竟然是在表结构中的语法错误。一旦我有足够的业力给你这些奖励积分,我会:)
你如何处理不允许为NULL的主键列的外键?这是一个多年来一直困扰我的应用程序的问题,有时我最终会使用0,或者说前面的外键关系,但这不是最优的。 – glyph 2013-02-13 00:18:57