32

在学中(約4年前)のデータベース講座で、主キーのデータ型に文字列を使うのは避けたほうがいいと考えていました。

SQL の主キーに文字可変データ型を選択することの長所と短所は何か、また上記の前提がどの程度当てはまるか教えてもらえますか?

NB: ( PostgreSQLデータベースを使用しています)。また、そのようなテーブルを別のテーブルから参照する必要がある状況にも対処しているため、文字のさまざまなデータ型に外部キーを配置します。ということも考慮してください。

4

1 に答える 1

29

文字データ型を主キー フィールドとして選択する利点は、表示できるデータを選択できることです。たとえば、電子メール アドレスを users テーブルのキー フィールドとして使用できます。これにより、列を追加する必要がなくなります。もう 1 つの利点は、他の複数のテーブルのインデックスを保持する共通のデータ テーブル (FINANCE、CONTACT、および ADMIN テーブルへの外部参照を持つ NOTES テーブルを考えてください) がある場合、これがどのテーブルから来たか (たとえば、FINANCE テーブル) を簡単に知ることができることです。 F00001 のインデックス、CONTACT テーブルのインデックスは C00001 など)。私はそのようなアプローチに反対しているので、この回答ではデメリットが大きくなると思います。

欠点は次のとおりです。

  1. シリアル データ型は、まさにこの理由で PostgreSQL に存在します。
  2. 数値インデックスは順番に入力され、最小限の再インデックスを実行する必要があります (つまり、Apple、Carrot のキーを持つテーブルがあり、Banana を挿入したい場合、Banana が中央に挿入されるように、テーブルはインデックスを移動する必要があります)。インデックスが数値の場合、インデックスの途中にデータを挿入することはめったにありません)。
  3. データからリンクされていない数値インデックスは変更されません。
  4. 数値インデックスは短く、その長さは固定できます (varchar の長さとして選択したものに対して 4 バイト)。

あなたの場合、数値インデックスに外部キーを置くことができるので、なぜ強制的に varchar 型にする必要があるのか​​ わかりません。数値フィールドでの検索とフィルタリングは、サーバーが最初にデータを変換するように強制されるため、理論的にはテキスト フィールドよりも高速です。一般的に言えば、クラスター化されていない数値の主キーがあり、データ列にクラスター化されたキーを作成して、多くのフィルター処理を行います。

これらは SQL を作成する際の一般的な基準ですが、ベンチマークに関しては、varchar 列は結合とフィルタリングで整数列よりも少し遅いことがわかります。主キーがまったく変更されていない限り、問題ありません。

于 2013-03-18T13:27:10.997 に答える