我有一张这样的桌子:
的东西
a [INT]
b [INT]
c [INT]
...其中 a , b 和 c 是分开的外键,指向三个不同的表。 ID 。由于我想让所有注册表都是唯一的,并且在阅读this great answer之后,我认为我应该以这种方式创建一个新的索引:UNIQUE INDEX(a, b, c)
和(在我的情况下)做IGNORE INSERTS。
但正如你所看到的,我会为每列提供一个KEY,然后是另一个包含所有三个的额外UNIQUE INDEX。这是正常的事吗?这对我来说似乎很奇怪,我从未见过它。
答案 0 :(得分:1)
在多个索引中包含列是完全正常和合理的。但是,如果(a,b,c)的组合足以唯一地标识一行,那么您在这里似乎需要PRIMARY
索引而不是UNIQUE
索引(技术上差别很小,但在语义上它可能是更好的选择。)
答案 1 :(得分:-1)
如果某些内容(a,b,c)创建主键,则无法满足对唯一索引的需求。如果您的主键是Something(a,b)并且您想要一个唯一索引(a,b,c),那么另一个唯一索引就有意义。但由于所有三列都是Foreignkey,因此您可以使用主键索引。