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

Php 数据库-字符串作为主键?,php,sqlite,laravel,primary-key,Php,Sqlite,Laravel,Primary Key,我使用Laravel5开发了一个应用程序,并在开发过程中使用sqlite。我想以后换个更快的。我希望有一个字符串作为users表的唯一标识符。这有什么问题吗?例如使用外键?或者说,自动递增整数没有区别吗?简单的回答是:使用字符串作为主键是非常好的 答案很长:我们在选择字符串作为主键方面很糟糕 什么是好的主要关键候选人 它应该是独一无二的 它应该很少改变,如果有的话 现在,你可能认为你的字符串永远不会改变,它是非常独特的,直到它不再是唯一的 另一个(次要)问题是性能。搜索、连接等在整数上比在字符串

我使用Laravel5开发了一个应用程序,并在开发过程中使用sqlite。我想以后换个更快的。我希望有一个字符串作为users表的唯一标识符。这有什么问题吗?例如使用外键?或者说,自动递增整数没有区别吗?

简单的回答是:使用字符串作为主键是非常好的

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

什么是好的主要关键候选人

  • 它应该是独一无二的
  • 它应该很少改变,如果有的话 现在,你可能认为你的字符串永远不会改变,它是非常独特的,直到它不再是唯一的

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


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

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

    插入时的碰撞检测是一个您必须自己处理的问题,在自动递增的情况下甚至不存在


    从外键的角度来看,也不会有任何问题,您将面临的唯一问题是char/varchar的效率低于整数。

    String可以是主键。添加“唯一”约束。但不能添加“自动增量”约束。谢谢你的回答。我希望使用字符串作为标识符的主要原因是,我使用第三方api服务获取实际用户数据,并希望使用他们的id作为我的id。或者这是一个坏主意?如果使用第三方id保存查询,id的唯一性已经是他们为你解决的一个问题我不明白为什么这是一个坏主意我同意法比奥的观点,本质上这是他们的问题,你只是他们数据的消费者。我确实想知道,如果主键在其端发生更改,会发生什么情况:)