web-dev-qa-db-ja.com

テキストとしての主キー

教育中(約4年前)に行ったデータベース講座では、文字列を初等教材として使用しないことをお勧めしますキーのデータ型。

SQLの主キーの文字の変化するデータ型を選択することの長所と短所、および上記の前提条件を誰かが教えてもらえますか?本当ですか?

N.B .:(PostgreSQLデータベースを使用しています)。私はまた、別のテーブルからそのようなテーブルを参照する必要がある状況にも対処しています。つまり、外部キーを文字可変データ型に配置します。それも考慮に入れてください。

26
artaxerxe

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

欠点は次のとおりです。

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

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

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

17
DF_