情報処理試験を勉強していると、「主キーって結局どれを設定すればいいの?候補キーや外部キーとの違いは?」と混乱しがちです。この記事では、主キー(Primary Key)の定義から試験での出題パターンまでを一気に整理します。
対象試験と出題頻度
主キーは、ITパスポート・基本情報技術者・応用情報技術者のすべてで出題されるテーマです。
関係データベースの基本構造に関する問題として定番化しており、候補キー・外部キー・複合キーとの区別が繰り返し問われます。
詳細をクリックして確認
ITパスポート
基本情報技術者
応用情報技術者
★★★★★(頻出度S)
ランクS(超重要)絶対に覚える必要あり
用語の定義
主キー(Primary Key)とは、一言で言うと
「関係データベースの表(テーブル)の中で、各行(レコード)を一意に特定するための列(属性)またはその組合せ」
のことです。
イメージとしては、「学校の出席番号」です。
クラスに同姓同名の「田中太郎」が2人いても、出席番号が「5番」と「18番」で異なれば、誰のことか確実に区別できます。
空欄(番号なし)の生徒がいたら出席管理が破綻します。主キーに求められる「値の重複禁止」と「空欄(NULL)禁止」は、まさにこの出席番号のルールと同じです。
🔑 主キーの基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Primary Key(PK) |
| 分類 | 関係データベースのキー制約 |
| 2つの制約 | ① 一意性制約(値の重複を許さない) ② NOT NULL制約(空値を許さない) |
| 設定数 | 1つの表に対して1つだけ設定できる |
解説
関係データベースでは、データを「表」で管理します。しかし、表の中に同じ値を持つ行が複数あると、「どの行を更新すればいいのか」「どの行を削除すべきか」が判断できなくなります。
この問題を防ぐために、「この列の値さえ見れば1行を確実に特定できる」という列を決めておく必要があります。それが主キーの役割です。
主キーの2つの制約
主キーに課される制約は2つだけです。ここだけは確実に押さえてください。
🚫
一意性制約(UNIQUE)
同じ値を持つ行が2つ以上存在してはならない。「従業員番号 001」が2行あったら、どちらの001か特定できない。
🚫
NOT NULL制約
値が空(NULL)の行があってはならない。出席番号が空欄の生徒がいたら、その生徒を指名できない。
キーの種類と関係を整理する
データベースには主キー以外にも複数のキーが登場します。それぞれの関係を階層的に整理すると理解しやすくなります。
🗂 キーの種類と包含関係
スーパーキー
行を一意に特定できる属性の組合せ(冗長な属性を含んでもよい)
候補キー
スーパーキーのうち、余分な属性を含まない最小のもの
主キー(PK)
候補キーの中から1つ選んだもの
代替キー
主キーに選ばれなかった候補キー
▲ スーパーキー ⊃ 候補キー ⊃ 主キー の包含関係
図解:従業員テーブルで見る主キー
具体的なテーブルで主キーの役割を確認します。
📊 従業員テーブルの例
| 🔑 従業員番号 (主キー) |
従業員名 | 部門コード |
|---|---|---|
| E001 | 田中太郎 | D10 |
| E002 | 田中太郎 | D20 |
| E003 | 鈴木花子 | D10 |
▲ 「従業員名」は同姓同名があり得るため主キーにできない。「従業員番号」なら各行を確実に特定できる。
複合主キーとは
1つの列だけでは行を特定できない場合、複数の列を組み合わせて主キーにすることがあります。
これを複合主キー(複合キー)と呼びます。
📊 履修テーブルの例(複合主キー)
| 🔑 学生番号 (主キーの一部) |
🔑 科目コード (主キーの一部) |
成績 |
|---|---|---|
| S001 | C101 | A |
| S001 | C202 | B |
| S002 | C101 | C |
▲ 「学生番号」だけだとS001が2行あり特定できない。「学生番号+科目コード」の組合せで初めて1行を特定できる。
外部キーとの違い
主キーと混同しやすいのが外部キー(Foreign Key / FK)です。両者は役割がまったく異なります。
| 比較項目 | 主キー(PK) | 外部キー(FK) |
|---|---|---|
| 目的 | 自テーブル内の行を一意に特定する | 他テーブルの候補キーを参照し、テーブル間を関連付ける |
| NULL | 許されない | 許される場合がある |
| 重複 | 許されない | 許される |
| 設定数 | 1テーブルに1つ | 1テーブルに複数設定可能 |
SQLでの主キー定義
実際のSQL文では、CREATE TABLE文の中でPRIMARY KEY制約を指定します。
CREATE TABLE 従業員 ( 従業員番号 CHAR(4) PRIMARY KEY, 従業員名 VARCHAR(20) NOT NULL, 部門コード CHAR(3) REFERENCES 部門(部門コード) );
▲ PRIMARY KEY を指定すると、一意性制約とNOT NULL制約が自動的に適用される
では、主キーが試験でどのように出題されるか見ていきましょう。
💡 主キーの核心を3行で
・表の各行を一意に特定するための列(またはその組合せ)
・一意性制約(重複禁止)とNOT NULL制約(空値禁止)の2つが課される
・候補キーの中から1つを選んで主キーとし、1テーブルに1つだけ設定する
試験ではこう出る!
主キーは、IP・FE・APのいずれでもデータベース分野の定番テーマです。直接「主キーの性質を選べ」と問う問題から、正規化や参照制約の前提知識として問われるケースまで幅広く登場します。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| IP R4 問65 |
条件から「従業員」表の主キーを選ぶ問題 | ・重複のない属性を主キーに選ぶ ・部門コードは複数従業員が共有するため不適 |
| FE H21秋 午前 問32 |
主キーの性質として適切なものを選ぶ問題 | ・「値が同じ行が複数存在しない」が正解 ・「複合主キーは不可」がひっかけ |
| FE H25秋 午前 問30 |
主キー制約の条件を選ぶ問題 | ・一意性制約とNOT NULL制約の両方を満たす選択肢を選ぶ |
| AP R5秋 午前 問27 |
外部キーの説明を選ぶ問題 | ・主キー・候補キー・代替キー・外部キーの定義を正確に区別させる出題 |
📝 IPA試験での出題パターン
パターン1:「主キーの性質・制約を選べ」
4つの選択肢から、一意性制約やNOT NULL制約の内容に合致するものを選ぶ形式。「主キーは検索にしか使えない」「複合主キーは作れない」「数値型は算術演算不可」のような誤りの選択肢が並ぶ。
パターン2:「表の条件から主キーを特定せよ」
IP R4問65のように、業務条件から適切な主キーを選ばせる形式。「重複がない」「最小の組合せである」の2点で判断する。
パターン3:「キーの種類の定義を正しく選べ」
AP R5秋問27のように、主キー・候補キー・代替キー・外部キーの説明文をそれぞれ区別させる出題。各キーの定義を1文で言えれば対応できる。
試験ではここまででOKです。スーパーキーの厳密な定義まで深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. 関係データベースの主キーに関する記述として、最も適切なものはどれでしょうか?
- A. 主キーに指定した列は算術演算の対象として使用できなくなる。
- B. 1つの表に対して主キーを複数設定することで、検索速度を向上させることができる。
- C. 主キーに指定した列には、値の重複とNULL(空値)が許されない。
正解と解説を見る
正解:C
解説:
主キーには一意性制約(値の重複禁止)とNOT NULL制約(空値禁止)の2つが課されます。この2つの制約によって、表の中の各行を確実に特定できる状態が保証されます。
選択肢Aは誤りです。主キーに数値型の列を指定しても、その列を集計関数や算術演算で使うことは制限されません。選択肢Bも誤りです。主キーは1つの表に対して1つだけ設定するものであり、複数の主キーを設定する機能は存在しません(検索速度の向上にはインデックスを使用します)。
よくある質問(FAQ)
Q. 主キーには連番(オートインクリメント)を使うべきですか?
実務では、業務上の意味を持たない連番(サロゲートキー)を主キーにするケースが多くあります。業務コードの体系変更に影響されない、値の衝突が起きにくいといった利点があるためです。一方、IPA試験では「業務条件からどの属性が主キーになるか」を判断させる問題が主流なので、サロゲートキーの知識が直接問われることはほぼありません。
Q. 候補キーが1つしかない場合、主キーの選び方で迷うことはありますか?
候補キーが1つだけなら、そのまま主キーになります。選択の余地はありません。候補キーが複数ある場合に初めて「どれを主キーにするか」を決める必要があり、選ばれなかった候補キーが代替キーになります。
Q. 主キーとUNIQUE制約はどう違いますか?
どちらも値の重複を禁止する点は同じですが、2つの違いがあります。第一に、主キーはNULLを許さないのに対し、UNIQUE制約はNULLを許容します。第二に、主キーは1テーブルに1つだけですが、UNIQUE制約は複数の列に設定できます。メールアドレスのように「重複は禁止したいが、主キーではない」列にUNIQUE制約を使います。
Q. 正規化と主キーはどう関係しますか?
正規化では、主キーに対する関数従属性を分析してテーブルを分割します。第2正規形では「主キーの一部にのみ従属する列」を別テーブルに切り出し、第3正規形では「主キー以外の列に従属する列」を切り出します。つまり、正規化の各段階は主キーを基準に判断する作業です。IP R6問81やFE R6免除問19でも、正規化の前提として主キーの特定が求められています。