Bhr*_*tel 3 rdbms index database-design primary-key
我不确定是否有人问过这个问题。至少我找不到。
我对数据搜索和检索效率方面的主键感到好奇。
这是一个假设的例子......我有一个独特的学生列表StudentID
(比如 10 位数字,因为学校永远不会有那么多学生)和StudentName
(这也是独一无二的)。
将其用StudentID
作主键或为主键创建一个新字段(可能是 6 - 8 位数字或字符和数字的组合。即 ATC1002)会更好吗?
如果我用StudentName
作主键,我会看到任何检索性能下降吗?如果有,一般大概多少钱?是否还有其他因素会影响主要领域的选择?
您永远不应该假设超出系统控制范围的数据点永远不会改变。这意味着您不应该假设学生姓名不会改变。在现实世界中,名称可能会发生变化的原因有很多。 任何有合理更改风险的东西都不适合作为主键。 此外,在任何合理规模的学生群体中,姓名都不太可能是唯一的。
一些例外情况可能是由外部标准机构控制的事情,可以合理地信任该机构以保持一致性。这可能包括机场的 IATA 代码或原子元素的符号。
关于文本(自然)键与整数(代理)键的效率,对此没有简单的答案,因为它取决于许多因素。 总的来说,可以说代理整数键比自然文本键更有效- 特别是如果您的文本值比几个字符大得多。
然而,自然键除了原始文件 I/O 和 CPU 周期之外还有其他优势,只要您相信自然键是稳定的。学校的学生证可能是一个很好的候选者,因为您可以制定一项内部政策,规定学生证是终身授予的,永远不会改变。