sql - 如何选择我的主键?

标签 sql mysql database primary-key

我在 choosing a primary key 上找到了这份阅读 Material .

  • 是否有关于如何为给定表选择主键的指南/博客文章?
  • 我应该使用自动递增/生成的键,还是应该将主键基于正在建模的数据(假设它有一个真正唯一的字段)?
  • 为了性能起见,主键应该总是很长,还是我可以将外部唯一 ID 作为主键,即使它是一个字符串?

最佳答案

我相信在实践中使用 natural key很少比 surrogate key 好.

以下是使用自然键作为主键的主要缺点:

  • 您可能有一个不正确的键值,或者您可能只是想重命名一个键值。要对其进行编辑,您必须更新所有将其用作外键的表。

  • 通常很难有一个真正的 unique自然键。

  • 自然键通常是字符串。数字字段上的索引将比字符串字段上的索引更紧凑。

对于主键的数据类型应该是什么没有硬性规定。数字键通常性能更好,但您可以使用字符串,尤其是在表不大且引用它的表也不大的情况下。

关于sql - 如何选择我的主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4291990/

相关文章:

sql - 当列的数据类型为 int 时如何用字符串替换 null

sql - 使用proc sql将多个不同结构的表堆叠到一张表中

sql - 多对多查询

mysql - 从一列中选择一些字符串,其中一些是 utf8 编码的,而另一些不是

php - Codeigniter 和 doctrine 连接三个表

database - 如何在 sybase ASE 15 中查找运行时间最长的查询?

mysql - 设计每个用户都有收藏夹列表的数据库

sql - 在 MySql 中强制执行查询以使用特定索引

留言簿中的 PHP 脚本不会添加到 MySQL

sql - 如何获取从当前日期算起的过去 12 个月