主キー(primary key)
- テクノロジ系
- データベース
- 基本情報
- 応用情報
- 重要度 ★★★★☆
表の中の1行を一意に特定する列。値の重複と空値が許されない。
もう少し詳しい説明
主キーは、表の中の1行を、これ1つで指し示せる列のことです。
クラスの名簿を思い浮かべてください。「佐藤さんの点数を見せて」と言われたとき、クラスに佐藤さんが2人いたら困ります。どちらの佐藤さんか決められません。
だから、名前とは別に重複しない番号を1人に1つ振ります。出席番号、会員番号、社員番号。呼び名とは別に番号を用意するのは、どこの世界でも同じ理由です。
満たすべき条件は2つだけ
主キーに選べる列には、2つの条件があります。
- 値が重複しないこと(一意性)— 同じ値が2行あったら、1行に決められない
- 空欄がないこと(NOT NULL)— 番号の入っていない行は、指し示しようがない
この2つをあわせて実体整合性と呼びます。どちらか片方でも崩れると、表が表として機能しなくなります。
1つの列では足りないとき
1つの列だけでは決まらない表もあります。
たとえば注文の明細表。「注文番号」だけでは、同じ注文の中に何行もあるので決まりません。そこで「注文番号+明細行番号」の組み合わせを主キーにします。これを複合キーと呼びます。
候補が複数あるとき
行を一意に決められる列の組み合わせは、1つの表に複数あることがあります。社員の表なら、社員番号でも、メールアドレスでも決まるかもしれません。
こうした「決められる候補」を候補キーと呼び、その中から設計者が1つ選んだものが主キーです。選ばれなかったほうは代替キーと呼ばれます。
意味のない番号をあえて使う
会員番号のように業務で使う番号をそのまま主キーにすると、業務の都合で番号の付け方が変わったときに困ります。
そこで、意味を持たないただの連番を新しく用意して主キーにすることがあります。これをサロゲートキー(代理キー)と呼びます。外の都合に振り回されなくなる、というのが利点です。
索引は結果であって条件ではない
多くのデータベースでは、主キーに指定すると索引(インデックス)が自動的に作られます。
ただしこれは、重複していないかを速く確かめるための都合であって、主キーの条件ではありません。「索引があるから主キー」ではないという点が、試験の引っかけになります。
試験ではこう出る
科目A(旧・午前)のデータベース分野で、正規化とセットで出る基本用語です。多いのは、表を示して「主キーとして適切な列はどれか」を選ばせる形と、主キーが満たすべき条件そのものを問う形です。応用情報では、複数の列を組み合わせた複合キーや、候補キーとの区別まで踏み込んで問われます。「重複しない」「空値を許さない」の2点を押さえれば大半は解けます。 応用情報では、E-R図から表を設計させる問題の中で複合キーや候補キーの判断が問われます。
関連する用語
- 候補キー
- 一意に特定できる列の組み合わせ。複数あってよく、その中から1つ選んだものが主キー
- 複合キー
- 複数の列を組み合わせた主キー。1列では一意にならない表で使う
- 外部キー
- 他の表の主キーを指す列。重複してよく、空欄を許すこともある
- UNIQUE制約
- 重複を禁止する決まり。実装によっては空欄を許す点が主キーと違う
- インデックス
- 検索を速くする索引。主キーに付くことが多いが、主キーの条件ではない
- 正規化
- 同じ事実を1か所にだけ書くよう表を分ける設計
ミニクイズ
関係データベースで、ある列を主キーに設定するために満たしていなければならない条件として、最も適切なものはどれか。
正解は 4番:値が重複せず、空値(NULL)も入っていないこと
行を1つに特定するための列なので、同じ値が2行あれば特定できませんし、空欄があればその行を指し示せません。この2つをあわせて実体整合性と呼びます。他の表の主キーを参照するのは外部キー、索引はインデックスの話で、どちらも主キーの条件ではありません。主キーには索引が自動で作られる実装が多いのですが、それは結果であって条件ではない、という点が引っかけになります。
最終更新:2026-09-14