sg database system_planning data_modeling
まず結論
主キーは、表の中の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が主キーになることが多いです。
主キー・外部キー・候補キーの違い
主キーと合わせて、候補キーという用語も出てくることがあります。
| 用語 | 意味 |
|---|---|
| 候補キー | 行を一意に識別できる候補となる項目 |
| 主キー | 候補キーの中から代表として選ばれたもの |
| 外部キー | 別の表を参照し、表同士の関係を表すもの |
例えば、社員表で「社員番号」と「メールアドレス」がどちらも重複しない場合、どちらも候補キーになり得ます。
その中から、社員番号を主キーとして選ぶ、というイメージです。
まとめ(試験直前用)
主キーは、表の1行を一意に識別する項目です。
外部キーは、別の表と関係づけるための項目です。
試験直前は、次の3点で判断しましょう。
- 主キー=この表の行を特定する
- 外部キー=別の表との関係を示す
- ER図の関係を、DB上で実現するのが主キー・外部キー
迷ったときは、
この表の中で1行を選ぶなら主キー。
別の表につなげるなら外部キー。
と押さえると、選択肢を切り分けやすくなります。