我使用Laravel 5开发应用程序,并在开发期间使用sqlite。我想稍后更快地切换到某些东西。我想有一个字符串作为用户表的唯一标识符。这有什么问题吗?例如与外键?或者自动增加整数没有区别吗?数据库 - 字符串作为主键?
回答
简短的回答:使用字符串作为主键是完全正确的。
长答案:我们在选择字符串作为主键时非常糟糕。
什么是优秀的主要关键人选?
- 它应该是唯一的。
- 它应该很少,如果有的话,改变。
现在,你可能认为你的字符串永远不会改变,而且它是非常独特的,直到它不再是唯一的。
另一个(次要)问题是性能。搜索,连接等整数比字符串快一些,主要是由于长度(数字比字符串通常短,所以比较容易)。
漫长而艰难的,我觉得到主键使用的字符串,很多时候这是一个坏主意
感谢您的回答。我想使用字符串作为标识符的主要原因是我使用thrid-party api服务来获取实际的用户数据,并希望将其用户id用作我的id。或者这是一个坏主意? – norbertVC
如果您将通过使用第三方ID保存查询,并且ID唯一性已经是他们为您解决的问题,我不明白为什么这将是一个坏主意 – FabioCosta
我同意法比奥,实质上这是他们的问题,你只是他们数据的消费者。我不知道如果一个主键在他们的末端改变会发生什么,但:) – Patrick
字符串的索引比增量有很大不同INT,但你可以把它作为主键没有问题。
插入时碰撞检测是一个问题,你必须自己处理,甚至不会存在于自动增量情况下。
从外键的角度来看,也不会有任何问题,唯一会遇到的问题是char/varchar的效率会低于整数。
- 1. 字符串作为SQL数据库中的主键
- 2. 作为主键的字符串?
- 3. MySQL - 使用字符串作为主键
- 4. 数据库 - 已经有字符串作为主键后创建关系索引
- 5. WCF:DeSerialize字符串数据库作为int
- 6. NHibernate和字符串主键
- 7. Big Endian字节与字符串作为字符串 - 字符串数据库中的键
- 8. 如何在实体框架中将字符串作为主键!
- 9. 同步数据库时唯一的标识符作为主键
- 10. 如何为数据库表中的主键生成随机字符串
- 11. 字符串数组作为HashMap的键
- 12. Laravel迁移中的字符串作为主键
- 13. 的Django删除其中有一个字符串作为主键
- 14. 作为主键的两个字符串列
- 15. ActiveRecord的字符串主键
- 16. 字符串键更改为数字键?
- 17. 数据库主键
- 18. 数据库主键
- 19. 作为字符串的Grails ID(主键)列
- 20. 从数据库操作字符串
- 21. 使用字符串作为字典键?
- 22. MongoDB作为主数据库?
- 23. 从数据库印刷为字符串
- 24. 字符串作为主键的性能损失?
- 25. 以字符串字段为主键生成模型
- 26. SQL订单字符串主键
- 27. 存储浮点数作为字符串中的Android数据库
- 28. greendao字符串主键 - 如何使用
- 29. 如何使用字符串作为Ember Data的主键?
- 30. Kundera和Cassandra单元问题 - 字符串作为主键
字符串可以是主键。添加“唯一”约束。但是你不能添加“auto_increment”约束。 http://www.sqlite.org/lang_createtable.html#constraints – user2267379