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

时间:2015-04-16 21:31:05

标签: php sqlite laravel primary-key

我使用Laravel 5开发应用程序并在开发期间使用sqlite。我想稍后更快地切换到更快的东西。我希望将字符串作为users-table的唯一标识符。这是一个问题吗?比如用外键?或者自动递增整数没有区别?

2 个答案:

答案 0 :(得分:4)

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

答案很长:我们选择字符串作为主键非常糟糕。

什么是好的主要候选人?

  1. 它应该是独一无二的。
  2. 如果有的话,应该很少改变。
  3. 现在,您可能认为您的字符串永远不会改变,并且它非常独特,直到它不再是唯一的。

    另一个(次要的)问题是表现。搜索,连接等在整数上比在字符串上要快一些,主要是由于长度(数字比字符串短,所以比较更容易)。

    我会认为在主键上使用什么字符串很长很难,大多数时候这是一个坏主意

答案 1 :(得分:1)

字符串的索引与增量int有很大不同,但您可以将其作为主键而没有问题。

插入时的碰撞检测是您必须自己处理的问题,甚至不会出现在自动增量情境中。

从外键的角度来看,也没有任何问题,你要面对的唯一问题是char / varchar的效率低于整数。