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