64

我正在拼凑一个图像网站。基本架构非常简单的 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!)。一旦我有足够的业力给你这些奖励积分,我会:)

4

1 回答 1

98

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


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

index的复数形式应该是index

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

对于一般目的,index是更可取的复数形式,而不是indices。... 指数,虽然不如论坛教条那么自命不凡,但仍然是自命不凡的。一些作者更喜欢技术背景下的索引,如数学和科学。尽管 index 不是index的最佳复数形式,但是从“指标”的意义上说,indices是允许的。...避免单数索引,从复数索引的反向格式

于 2009-01-14T05:22:02.790 回答