2012-07-11 97 views
3

为什么数字在数据库中用作ID(认为主键+ AI),几乎到处都是字母而不是字母? 有10个数字可用,而英文字母有26个字母。为什么数字用作识别而不是字母?

假设每个字母/数字都有一个位置。 需要两个点,需要四个等。在四个点中,最多可以存储10000个ID,但如果使用字母代替,则可以使用相同数量的点存储多达456个976 ID 。如果您使用区分大小写,则更多。 这差不多是50倍。

我的确意识到这对普通用户来说可能并不重要,但为什么不使用字母而不是数字作为ID的大型数据库呢?

+0

编辑,使问题更容易理解(包括标签),将不胜感激。英语不是我的母语,因此我觉得有时候很难让自己明白。 – Zar 2012-07-11 18:48:26

回答

4

您正在混淆字符的数字值。

一个使用整数(比如一个32位整数)作为数据类型的ID列只需要4个字节每行行。它也是内存中的本地值,可以在CPU中以本地方式执行(作为二进制表示形式)。

这与字符不同 - 即使假设使用ASCII(8位),当您超过4个字符时,您使用的空间也会更多。您还需要在值之间进行转换才能进行有效的比较。

0

因为电脑只能使用数字。甚至字符也被计算机视为数字。

此外,使用字符串的效率远低于数字。

任何小于4,294,967,296(2^32)的数字只能存储在4个字节中,而即使是一个字符(并且每个字符占用一个字节),字母串只允许11,881,376种可能性。

电脑不报道一个字节的基数为10的数字。每个字节实际上可以保存256个不同的可能值。

2

数字包装更好。你猜这是因为数字是以十进制显示的,它们是以十进制存储的,但它们确实是二进制的。针对电脑进行了优化:)。

如果你想要代表26个字母之一,你需要2 二进制数字。你丢失32-26 =每块5位可能的数字。

1

有没有硬性规定,说你不能在数据库中使用字母数字文件作为ID。人们一直这样做。

至于为什么它是更常见的是使用数字...

  • 大多数数据库系统的设计与数字自动递增的能力。 (是的,我知道,这是一个鸡/蛋情景)
  • 数字通常可以占用较少的存储字节。 (是的,你可以存储大量和较短的字符串来克服这一点,但作为一般规则......)
    • 我打算对此进行扩展,但其他人都对我进行了深入研究,准确地描述了存储int与varchar相比所需的字节之间的差异。现在添加它会很愚蠢。 ;-)
  • 在每一个我使用过系统,整理上数字比对字符串排序不同:
    • 1,12,3,2,20被数字顺序排序为1,2的值,3,12,20,但是当按字母顺序排序时:1,12,2,20,3
  • 需要更多的计算能力来克服前面的问题,所以数字只是更有效地使用。
    • 这是为什么大多数数据库设计为自动递增数字而不是第一个项目符号中的自动递增字符串的答案。无论是鸡还是鸡蛋,我都会留给你。
相关问题