我正拼凑一个图片网站。基本模式非常简单的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
!)。一旦我有足够的业力给你那些奖励积分,我会:)
答案 0 :(得分:97)
您可以通过在外键列NULL
中允许tblImageFlags.resolutionTypeID
来解决此问题。
PS Bonus指向任何人告诉我,在数据库的情况下,它是“索引”还是“索引”。
索引的复数应为索引。
根据Bryan A. Garner的“Modern American Usage”:
对于普通用途,索引是 优选的复数,而不是指数。 ... 指数,虽然不如论坛或 dogmata 自命不凡, 尽管如此,仍然是自命不凡的。 一些作家更喜欢 indices 技术背景,如数学 和科学。虽然不是最好的 复数 index , indices 是 允许的意义上的“指标”。 ... 避免使用单数 indice ,这是复数索引的反向形式。