主キー(primary key)

分類
テクノロジ系 データベース
出る試験
基本情報応用情報
重要度
★★★★☆

表の中の1行を一意に特定する列。値の重複と空値が許されない。

もう少し詳しい説明

主キーは、表の中の1行を、これ1つで指し示せる列のことです。

先に「表・行・列」を説明します

関係データベース(データを表の形でためておく仕組み)では、データを表の形で持ちます。

クラスの名簿なら、列が「出席番号・氏名・点数」、行が生徒1人ぶんです。「1行を指し示す」とは、その表から生徒1人を決めるということになります。

なぜ必要なのか

クラスの名簿を思い浮かべてください。「佐藤さんの点数を見せて」と言われたとき、クラスに佐藤さんが2人いたら困ります。どちらの佐藤さんか決められません。

会員番号氏名1行目1001佐藤 ゆう2行目1002佐藤 ゆう3行目1003田中 けん
氏名の列には、同じ「佐藤 ゆう」が縦に2つ並んでいます。この列では、どちらの行のことか決められません。会員番号の列は、どの行も違う値なので、1行に決まります。

そのため、名前とは別に重複しない番号を1人に1つ振ります。出席番号、会員番号、社員番号。呼び名とは別に番号を用意するのは、どこの世界でも同じ理由です。

満たすべき条件は2つだけ

主キーに選べる列には、2つの条件があります。

  1. 値が重複しないこと(一意性)— 同じ値が2行あったら、1行に決められない
  2. 空欄がないこと(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