mysql - 使用 VARCHAR 作为 ID 的任何数据库问题
问题描述
我正在构建一个数据库,并希望使用 VARCHAR 作为某些表的 ID/主键,这样它对用户更友好。我知道历史上存在系统限制/减速,因此使用尽可能小的数据类型是一种很好的做法。
对于当前的系统硬件,这种情况是否发生了变化?我的意思是,我们是否还应该练习使用小数据类型,或者这已经成为过去?
谢谢,
解决方案
这不是世界末日。但是VARCHAR()
不鼓励使用主键,原因如下:
- 它们通常比整数占用更多空间。这在主表中几乎没有什么区别,但是外键引用的空间使用量成倍增加。
- 它们(通常)是可变长度的。这会给索引增加一点开销。不多,但为什么要打扰?
- 它们(通常)没有订购。该表按主键排序,因此这增加了页面拆分和碎片的机会。
- 他们可能会改变。我只是发现级联外键关系在数据模型中是一个不好的迹象。
我会推荐一个自动递增的主键,在varchar()
列上有一个唯一的索引,所有的外部引用都使用主键。
推荐阅读
- java - java.lang.NegativeArraySizeException: -1 在 Android 上使用 URLConnection 下载文件
- c# - Slack 交互式消息未在我的机器人上触发 Post 请求
- azure - 仅在用户发起事件时触发警报
- c# - 选中复选框时将列表添加到数据网格
- flutter - 发生更改时 TextFormField 光标未移动
- c++ - 为什么 C++ 三元运算符返回类型不能是基类类型?
- ruby-on-rails - 为 nil:NilClass 错误获取未定义的方法“builder_photo”
- angular - 错误 Unexpected console statement no-console Jhipster
- javascript - [[[Number]]] 不想正确保存我的 [[]] 数组
- cmake - 在 CMAKE 中定义编译器和链接器