我使用Laravel 5开发应用程序并在开发期间使用sqlite。我想稍后更快地切换到更快的东西。我希望将字符串作为users-table的唯一标识符。这是一个问题吗?比如用外键?或者自动递增整数没有区别?
答案 0 :(得分:4)
简短的回答:使用字符串作为主键完全没问题。
答案很长:我们选择字符串作为主键非常糟糕。
什么是好的主要候选人?
现在,您可能认为您的字符串永远不会改变,并且它非常独特,直到它不再是唯一的。
另一个(次要的)问题是表现。搜索,连接等在整数上比在字符串上要快一些,主要是由于长度(数字比字符串短,所以比较更容易)。
我会认为在主键上使用什么字符串很长很难,大多数时候这是一个坏主意
答案 1 :(得分:1)
字符串的索引与增量int有很大不同,但您可以将其作为主键而没有问题。
插入时的碰撞检测是您必须自己处理的问题,甚至不会出现在自动增量情境中。
从外键的角度来看,也没有任何问题,你要面对的唯一问题是char / varchar的效率低于整数。