首页 > 解决方案 > 使用 VARCHAR 作为 ID 的任何数据库问题

问题描述

我正在构建一个数据库,并希望使用 VARCHAR 作为某些表的 ID/主键,这样它对用户更友好。我知道历史上存在系统限制/减速,因此使用尽可能小的数据类型是一种很好的做法。

对于当前的系统硬件,这种情况是否发生了变化?我的意思是,我们是否还应该练习使用小数据类型,或者这已经成为过去?

谢谢,

标签: mysqlsqldatabase

解决方案


这不是世界末日。但是VARCHAR()不鼓励使用主键,原因如下:

  • 它们通常比整数占用更多空间。这在主表中几乎没有什么区别,但是外键引用的空间使用量成倍增加。
  • 它们(通常)是可变长度的。这会给索引增加一点开销。不多,但为什么要打扰?
  • 它们(通常)没有订购。该表按主键排序,因此这增加了页面拆分和碎片的机会。
  • 他们可能会改变。我只是发现级联外键关系在数据模型中是一个不好的迹象。

我会推荐一个自动递增的主键,在varchar()列上有一个唯一的索引,所有的外部引用都使用主键。


推荐阅读