リレーショナル モデルでは、テーブル内に存在し、一意であることが保証されている任意の列または列のセットを、テーブルの候補キーと呼ぶことができます。「現在」は「NOT NULL」を意味します。データベース設計では、候補キーの 1 つを主キーとして指定し、主キーへの参照を使用して行全体または行が説明する主題項目を参照するのが一般的です。
SQL では、PRIMARY KEY 制約は、各主キー列の NOT NULL 制約と、すべての主キー列をまとめた UNIQUE 制約になります。実際には、多くの主キーは単一の列になります。
ほとんどの DBMS 製品では、PRIMARY KEY 制約により、主キー列に基づいてインデックスが自動的に作成されます。これにより、主キーに対して新しいエントリが作成されたときのシステム チェック アクティビティが高速化され、新しい値が既存の値と重複しないことが確認されます。また、主キーの値に基づいて検索を高速化し、主キーとそれを参照する外部キーを結合します。どのくらい高速化されるかは、クエリ オプティマイザーの動作によって異なります。
もともと、リレーショナル データベースの設計者は、与えられたデータの自然キーを探していました。最近では、ID と呼ばれる列を常に作成し、最初の列として整数を作成し、すべてのテーブルの主キーにする傾向があります。DBMS の自動生成機能を使用して、このキーが一意になるようにします。この傾向は「オスロ設計基準」に記載されています。これは必ずしもリレーショナル デザインではありませんが、それに従う人々の差し迫ったニーズに応えます。この方法はお勧めしませんが、一般的な方法であることは認識しています。
索引は、索引付けされた表の列の記述に基づいて、表内のいくつかの行への迅速なアクセスを可能にするデータ構造です。インデックスは、インデックス キーと呼ばれる特定のテーブル列のコピーで構成され、テーブル行へのポインターが散在しています。通常、ポインターは DBMS ユーザーから隠されています。インデックスは、クエリ オプティマイザと連携して機能します。ユーザーが検索対象のデータを SQL で指定すると、オプティマイザは検索対象を検索するための戦略に変換するためのインデックス戦略やその他の戦略を考え出します。並べ替えやハッシュなど、インデックスを高速検索やその他の特定の用途に使用できるようにする、ある種の編成原則があります。データベースビルダーがインデックスを作成するか、主キーを宣言すると、これはすべて DBMS の内部になります。
主キーとは関係のないインデックスを作成できます。主キーはインデックスがなくても存在できますが、これは一般的に非常に悪い考えです。