---
title: "主キー・外部キーとは？表を識別し関係づける基本【SG試験】"
description: "主キーは表の行を一意に識別する項目、外部キーは別表の行との関係を保つ項目です。重複禁止と参照整合性の違い、ER図やデータモデルで何を表しているかをSG試験向けに整理します。候補キーや単なる項目名との混同を防ぎます。更新時の不整合を防ぐ観点でも確認します。"
last_modified_at: "2026-06-24"
canonical_url: "https://stemtazoo.github.io/sg/primary-key-foreign-key/"
section: "sg"
---

## まず結論

主キーは、**表の中の1行を一意に識別するための項目**です。

外部キーは、**別の表の主キーなどを参照して、表同士の関係を表す項目**です。

SG試験では、次のように切り分けると分かりやすいです。

- **主キー**：この表の中で、どの行かを特定する
- **外部キー**：別の表とつながるために使う

例えば、顧客表の「顧客ID」は主キーになり、注文表の「顧客ID」は外部キーになります。

---

## 直感的な説明

主キーは、**その表の中での名札**のようなものです。

例えば、顧客表に次のようなデータがあるとします。

| 顧客ID | 顧客名 |
|---|---|
| C001 | 山田さん |
| C002 | 佐藤さん |

このとき、顧客IDがあれば「どの顧客か」を一意に特定できます。

一方、外部キーは、**別の表へのリンク**のようなものです。

注文表に次のようなデータがあるとします。

| 注文ID | 顧客ID | 注文日 |
|---|---|---|
| O001 | C001 | 2026-04-01 |
| O002 | C002 | 2026-04-02 |

注文表の顧客IDを見ると、その注文がどの顧客のものか分かります。

このように、外部キーは別の表と関係づけるために使われます。

---

## 定義・仕組み

主キーと外部キーを整理すると、次のようになります。

| 用語 | 意味 | 例 |
|---|---|---|
| 主キー | 表の行を一意に識別する項目 | 顧客表の顧客ID |
| 外部キー | 別の表との関係を表す項目 | 注文表の顧客ID |

主キーには、基本的に次の特徴があります。

- 同じ値が重複しない
- 行を一意に識別できる
- 空の値にしない

外部キーには、次の特徴があります。

- 別の表の主キーなどを参照する
- 表同士の関係を表す
- データの整合性を保つために使われる

例えば、注文表の顧客IDに「C999」と入力されているのに、顧客表にC999の顧客が存在しないと、注文が誰のものか分からなくなります。

外部キーを使うことで、このような不整合を防ぎやすくなります。

---

## どんな場面で使う？

主キーと外部キーは、関係データベースで表を設計するときに使われます。

特に、次のような場面で重要です。

- 表の中の1行を一意に特定する
- 表同士の関係を表す
- 重複データを減らす
- データの整合性を保つ
- ER図やデータモデルを実際の表設計につなげる

例えば、注文表に顧客名や住所を毎回書くと、同じ顧客情報が何度も重複します。

そこで、顧客表を分けて、注文表には顧客IDだけを持たせます。

このとき、顧客表の顧客IDは主キー、注文表の顧客IDは外部キーとして使われます。

---

## ER図との関係

ER図では、エンティティ同士の関係を整理します。

例えば、

- 顧客は注文する
- 1人の顧客は複数の注文を行う
- 1つの注文は1人の顧客に対応する

という関係を表します。

この関係を関係データベースで実装するときに、主キーと外部キーが使われます。

| ER図で見るもの | DB設計で対応するもの |
|---|---|
| エンティティ | 表 |
| 属性 | 列 |
| リレーションシップ | 主キー・外部キーによる関係 |

ER図は「関係を整理する図」、主キー・外部キーは「その関係を表で実現する仕組み」と考えると分かりやすいです。

---

## よくある誤解・混同

### 誤解1：主キーは名前や住所でもよい

主キーは、行を一意に識別できる必要があります。

名前は同姓同名があり得ますし、住所も変わることがあります。

そのため、主キーには顧客IDや社員番号のように、重複せず変わりにくい項目を使うことが多いです。

---

### 誤解2：外部キーは必ず別名でなければならない

外部キーは、別の表の主キーを参照する項目です。

同じ名前になることもあります。

例えば、顧客表の主キーが「顧客ID」で、注文表の外部キーも「顧客ID」という形です。

名前が同じかどうかより、**別の表との関係を表しているか**が重要です。

---

### 誤解3：外部キーは行を一意に識別するもの

行を一意に識別するのは主キーです。

外部キーは、別の表との関係を表すものです。

注文表の顧客IDは、同じ顧客が複数回注文すれば何度も出てきます。

そのため、注文表の顧客IDだけでは注文の1行を一意に特定できません。

注文表では、注文IDが主キーになることが多いです。

---

## 主キー・外部キー・候補キーの違い

主キーと合わせて、候補キーという用語も出てくることがあります。

| 用語 | 意味 |
|---|---|
| 候補キー | 行を一意に識別できる候補となる項目 |
| 主キー | 候補キーの中から代表として選ばれたもの |
| 外部キー | 別の表を参照し、表同士の関係を表すもの |

例えば、社員表で「社員番号」と「メールアドレス」がどちらも重複しない場合、どちらも候補キーになり得ます。

その中から、社員番号を主キーとして選ぶ、というイメージです。

---

## 確認問題（SG試験対策）

主キーと外部キーの説明として、最も適切なものはどれか。

- ア. 主キーは表内で行を一意に識別し、外部キーは他表との関連を保つ。
- イ. 主キーは重複を許可し、外部キーは必ず重複不可である。
- ウ. 主キーは文字列型では定義できない。
- エ. 外部キーは同一表の参照では使えない。

<details markdown="1">
<summary>▶ クリックして答えと解説を見る（ここを開く）</summary>

**正解：ア**

### 解説
- ア：それぞれの役割を正しく述べている。
- イ：制約の理解が逆。
- ウ：型ではなく一意性が本質。
- エ：自己参照でも設定可能。

👉 判断ポイント  
「一意に識別」と「表間整合性維持」を分けて理解する。

</details>

## まとめ（試験直前用）

主キーは、**表の1行を一意に識別する項目**です。

外部キーは、**別の表と関係づけるための項目**です。

試験直前は、次の3点で判断しましょう。

- **主キー＝この表の行を特定する**
- **外部キー＝別の表との関係を示す**
- **ER図の関係を、DB上で実現するのが主キー・外部キー**

迷ったときは、

**この表の中で1行を選ぶなら主キー。**  
**別の表につなげるなら外部キー。**

と押さえると、選択肢を切り分けやすくなります。
