使用代理主键是一个好习惯,即使表只包含一列并且它本身包含唯一值吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用代理主键是一个好习惯,即使表只包含一列并且它本身包含唯一值吗?相关的知识,希望对你有一定的参考价值。
我有一张gender
表:gender_id | gender_label
如果我删除gender_id
列,这是一个不好的做法,因为gender_label
也是唯一的并且可以用作主键吗?
我知道应该尽可能使用代理键,因为它们有效且快速搜索。但它会对上述情况产生任何影响吗?怎么样?
答案
我写了数百张桌子。其中2/3有一个“自然”键; 1/3有一个“代理键”。
从那以后,我推断出你的问题的答案是“它取决于”。
好的,那又取决于什么?
- 有一个可靠的自然键 - 一个真正的
UNIQUE
?如果是这样,可能你应该使用它。 - 性能是一个问题 - 嗯,这是双向的。
- 自然键是“小”吗?在我看来,取自国际标准的2个字符的
country_code
比4字节的INT
更好。 - 如果自然键是“大”并且有多个辅助键,则请记住PK包含在每个辅助键中。 (在InnoDB中)
- 通过辅助密钥查找(在InnoDB中)首先在二级密钥的BTree中进行深入分析,然后在PK的BTree中进行深入分析。因此,拥有一个你经常使用的PK有一个从轻微到大的性能优势。 (这可能是代理,也可能是自然的。)
在你的简单情况下,gender_id
字符串像M / F /等?这就是我要用的东西。实际上,我可能根本没有桌子;而在其他表中有gender
作为ENUM('unknown', 'male', 'female', 'other')
以上是关于使用代理主键是一个好习惯,即使表只包含一列并且它本身包含唯一值吗?的主要内容,如果未能解决你的问题,请参考以下文章