3

データベース(主キー+ AIを考えてください)でIDとして数字が使用され、文字の代わりにほとんどすべての場所で使用されるのはなぜですか?利用可能な10桁がありますが、英語のアルファベットは26文字にもなります。

各文字/数字がスポットを占めるとしましょう。98は2つのスポットを取り、 1202は4つを取ります。4つのスポットでは、最大10,000個のIDを格納できますが、代わりに文字を使用すると、同じ数のスポットで456,976個のIDを格納できます。ケースセンシティビティを使用する場合はさらに多くなります。それはほぼ50倍です。

これは通常のユーザーにとっては問題ではない可能性が高いことは理解していますが、IDとして数字の代わりに文字を使用する大規模なデータベースではないのはなぜですか?

4

4 に答える 4

4

数値と文字を混同しています。

データ型として整数(たとえば32ビット整数)を使用するID列は、 1行あたり4バイトしか使用しません。また、メモリ内のネイティブ値になり、CPU内でネイティブに動作することができます(バイナリ表現として)。

これは文字の場合と同じではありません。ASCII(8ビット)が使用されていると仮定しても、4文字を超えると、より多くのスペースを使用することになります。また、有効な比較を行うために、値を変換する必要があります。

于 2012-07-11T18:51:48.297 に答える
2

数字はより良くパックします。数値は10進数で表示されるため、10進数として格納されていると思いますが、実際には2進数です。コンピューター用に最適化:)。

26文字のいずれかを表す場合は、25桁の2進数が必要です。5ビットのブロックごとに32〜26=8桁の数字が失われます。

于 2012-07-11T18:51:48.403 に答える
1

データベースのIDとして英数字のフィールドを使用できないという厳格なルールはありません。人々はいつもそれをします。

数字を使うのが一般的である理由については...

  • ほとんどのデータベースシステムは、数値の自動インクリメント機能を備えて設計されています。(ええ、私は知っています、それは鶏/卵のシナリオです)
  • 数値は、通常、より少ないバイトのストレージを使用できます。(はい、これを克服するために大きな数と短い文字列を格納できますが、原則として...)
    • 私はこれを拡張しようとしていましたが、他の誰もが、varcharと比較してintを格納するために必要なバイト間の違いを正確に説明して私を打ち負かしました。今それを追加するのはばかげているでしょう。;-)
  • 私が使用したすべてのシステムで、数値の並べ替えは文字列の並べ替えとは異なります。
    • 値1、12、3、2、20は、数値で1,2,3,12,20としてソートされますが、英数字でソートすると、1,12,2,20,3になります。
  • 前のポイントを克服するには、より多くの計算能力が必要であるため、数値を使用する方が単純に効率的です。
    • これは、ほとんどのデータベースが最初の箇条書きの文字列の自動インクリメントではなく、数値の自動インクリメントで設計されている理由に対する答えです。鶏が先か卵が先かはあなたにお任せします。
于 2012-07-11T18:52:40.543 に答える
0

コンピューターは数字でしか機能しないからです。文字でさえ、コンピュータによって数字として扱われます。

また、文字列を使用すると、数字よりも効率が大幅に低下します。

4,294,967,296(2 ^ 32)より小さい数値は、4バイトにしか格納できませんが、5文字(および各文字が1バイトを占める)のアルファベット文字列でも、11,881,376の可能性しかありません。

コンピューターは、1バイトに基数10の数字を格納しません。各バイトは実際には256の異なる可能な値を保持できます。

于 2012-07-11T18:50:58.450 に答える