15

在我的教育期间(大约4年前)所做的数据库课程中,我认为建议避免使用字符串作为主键的数据类型。作为文本的主关键字

有人能告诉我选择字符变化的优点和缺点 SQL中主键的数据类型和上述前提是多少真实?

N.B .:(我正在使用PostgreSQL数据库)。我也正在处理一种情况,当你需要从另一个表中引用这样一个表时,因此将字符的外键改为数据类型。请考虑到这一点。

+2

一些见解可以从这里找到:http://stackoverflow.com/questions/337503/whats-the-best-practice-for-primary-keys-in-tables – 2013-03-18 12:39:53

+0

http://stackoverflow.com/questions/404040 /你怎么做你的主键 – 2013-03-18 13:57:18

回答

10

选择字符数据类型作为主键字段的好处是您可以选择可以显示哪些数据。例如,您可以将电子邮件地址作为用户表的关键字段。无需额外的色谱柱。另一个好处是,如果你有一个公用的数据表,它保存了多个其他表的索引(想象一下带有对FINANCE,CONTACT和ADMIN表的外部引用的NOTES表),你可以很容易地知道这个表来自哪个表(例如你的FINANCE表具有F00001的索引,CONTACT表具有C00001的索引等)。我恐怕在这个答复中弊大于利,因为我反对这种做法。

的缺点如下:存在正是这个原因,PostgreSQL的

  1. 串行数据类型
  2. 数字索引将在顺序输入和最小的重索引需要做(即如果有表格中键Apple,Carrot并且想要插入Banana,表格必须围绕索引移动,这样才能在中间插入Banana。如果索引是数字,则很少在索引中间插入数据)。
  3. 从数据中取消链接的数字索引不会改变。
  4. 数字索引较短,它们的长度可以固定(4个字节与您选择的varchar长度无关)。

在你的情况下,你仍然可以在数字索引上放置一个外键,所以我不知道为什么你想强制它是一个varchar类型。数字字段上的搜索和过滤在理论上比文本字段更快,因为服务器将被迫首先转换数据。一般而言,您将拥有一个非群集的数字主键,然后在您要过滤的数据列上创建一个群集键。

这些是编写SQL时的通用标准,但是当涉及到基准测试时,您只会发现varchar列在连接和过滤方面比整数列稍慢。只要你的主键不会改变,那么你就没事了。

+4

*“表将不得不绕着索引移动,以便香蕉插入中间”*这些信息是错误的,尤其是自OP提到PostgreSQL以来,它不**根据主键对记录进行排序。请参阅:http://stackoverflow.com/a/13191075/517371 – Tobia 2016-06-22 10:22:20