数据库 - 字符串作为主键?

nor*_*tVC 2 php sqlite primary-key laravel

我用 Laravel 5 开发了一个应用程序,并在开发过程中使用了 sqlite。我想稍后切换到更快的东西。我想要一个字符串作为用户表的唯一标识符。这有什么问题吗?例如外键?或者自动递增整数没有区别?

Pat*_*ick 5

简短的回答:使用字符串作为主键完全没问题。

长答案:我们在选择字符串作为主键方面很糟糕。

什么是好的主键候选?

  1. 它应该是独一无二的。
  2. 它应该很少改变,如果有的话。

现在,您可能认为您的字符串永远不会改变,并且它非常独特,直到它不再是独特的。

另一个(次要)问题是性能。搜索、连接等在整数上比在字符串上快一点,主要是由于长度(数字通常比字符串短,因此比较更容易)。

我会仔细考虑在主键上使用什么字符串,大多数时候这是一个坏主意