2012-07-11 31 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
  • 需要更多的計算能力來克服前面的問題,所以數字只是更有效地使用。
    • 這是爲什麼大多數數據庫設計爲自動遞增數字而不是第一個項目符號中的自動遞增字符串的答案。無論是雞還是雞蛋,我都會留給你。
相關問題