主キーと外部キーの違いとは?データベース初心者向けにわかりやすく解説
結論として、主キー(Primary Key)はデータを一意に識別するための項目、外部キー(Foreign Key)は別のテーブルとデータを関連付けるための項目です。どちらもデータベース設計では欠かせない重要な概念であり、IT業務でも頻繁に登場します。
主キーと外部キーとは?
主キー(Primary Key)とは
主キーとは、1件のデータを重複なく識別するためのカラムです。
主キーには次のルールがあります。
- 同じ値を登録できない(重複禁止)
- NULL(空の値)を登録できない
- 1つのテーブルに基本的に1つ設定する
例えば社員管理テーブルでは、「社員番号」が主キーになることが一般的です。
| 社員番号(主キー) | 氏名 | 部署 |
|---|---|---|
| 1001 | 山田 太郎 | 営業部 |
| 1002 | 佐藤 花子 | 総務部 |
| 1003 | 鈴木 一郎 | 開発部 |
社員番号が重複すると、どの社員のデータか判別できなくなるため、主キーとして管理します。
外部キー(Foreign Key)とは
外部キーとは、別のテーブルの主キーを参照してデータ同士を関連付けるカラムです。
例えば注文テーブルでは、「社員番号」を外部キーとして社員テーブルと関連付けることができます。
| 注文番号 | 社員番号(外部キー) | 商品名 |
|---|---|---|
| 5001 | 1001 | ノートPC |
| 5002 | 1002 | モニター |
この社員番号は、社員テーブルの主キーを参照しています。
主キーと外部キーの違い
| 比較項目 | 主キー | 外部キー |
|---|---|---|
| 役割 | データを一意に識別する | 別テーブルと関連付ける |
| 重複 | 不可 | 可能 |
| NULL | 不可 | 設計によっては可能 |
| 設定数 | 通常1つ | 複数設定できる |
| 参照先 | 自分のテーブル | 他テーブルの主キー |
どんな場面で使われるのか
主キーと外部キーは、ほとんどの業務システムで利用されています。
- 社員管理システム
- 販売管理システム
- 在庫管理システム
- 顧客管理(CRM)
- 会計システム
データ同士の関係を正しく管理するために必要な仕組みです。
なぜ重要なのか
主キーと外部キーを設定することで、データの整合性を保てます。
例えば存在しない社員番号で注文データを登録しようとした場合、外部キー制約によって登録を防ぐことができます。
これにより、不正なデータや入力ミスを防止できます。
初心者が混乱しやすいポイント
| よくある勘違い | 正しい内容 |
|---|---|
| 主キーと外部キーは同じもの | 役割が異なる |
| 外部キーも重複できない | 同じ値を複数登録できる |
| 外部キーは必須 | 設計によっては設定しないこともある |
| 主キーは変更しても問題ない | 変更すると関連データへ影響する可能性がある |
実際のIT現場での利用例
例えば社員テーブルと貸与PCテーブルを管理している場合、貸与PCテーブルの社員番号を外部キーとして設定します。
これにより、「どの社員がどのPCを利用しているか」を簡単に管理できます。
また、退職した社員のデータを削除する際も、関連するデータが存在するか確認できるため、誤削除を防ぐことができます。
筆者が現場で経験したこと
運用現場で外部キー制約を設定していないシステムを担当したことがあります。
その結果、存在しない社員番号のデータが大量に登録され、データ修正に多くの時間を費やしました。
外部キー制約を設定するだけで防げたトラブルだったため、データベース設計の重要性を実感しました。
業務でよくあるトラブル
| トラブル | 原因 |
|---|---|
| データ登録に失敗する | 外部キー制約違反 |
| 削除できない | 他テーブルから参照されている |
| 重複エラー | 主キーが重複している |
| 関連データが見つからない | 外部キーが正しく設定されていない |
原因の切り分け
キー関連のエラーが発生した場合は、次の順番で確認します。
- 主キーが重複していないか確認する
- 外部キーが存在する主キーを参照しているか確認する
- 削除対象データが他テーブルから参照されていないか確認する
- 制約(Constraint)の設定を確認する
- アプリケーション側で入力値が誤っていないか確認する
GUIでの確認方法
SQL Server Management Studio(SSMS)やOracle SQL Developerなどの管理ツールでは、テーブルの設計画面から主キーや外部キーを確認できます。
ER図(Entity Relationship Diagram)が用意されている場合は、テーブル同士の関連も視覚的に把握できます。
CUI(SQL)での確認方法
SQLでは、テーブル定義を確認することで主キーや外部キーの設定を確認できます。
また、JOINを利用すると外部キーで関連付けられた複数のテーブルをまとめて検索できます。
PowerShellで確認できる内容
PowerShellではデータベースに接続し、テーブル定義や制約情報を取得できます。
定期的なチェックや監査資料の作成を自動化する際に利用されることがあります。
影響範囲を考えるポイント
- 主キーの変更で他テーブルへ影響しないか
- 外部キー制約がアプリケーションへ影響しないか
- データ削除時に関連データも削除されないか
- システム間連携に影響しないか
新人が覚えておきたいポイント
- 主キーはデータを識別する番号
- 外部キーはテーブル同士をつなぐ番号
- 主キーは重複できない
- 外部キーは重複できる
- 外部キーは主キーを参照する
上司へ報告するポイント
- 対象テーブル名
- 対象レコード
- 主キーまたは外部キーの値
- 発生したエラーメッセージ
- 実施した確認内容
- 影響範囲
エスカレーションするタイミング
- 主キーの変更が必要な場合
- 外部キー制約の追加・削除が必要な場合
- 大量データの更新・削除が発生する場合
- 他システムとの連携へ影響する場合
関連するIT用語
- テーブル(Table)
- レコード(Record)
- カラム(Column)
- SQL(Structured Query Language)
- JOIN
- 制約(Constraint)
- インデックス(Index)
- ER図(Entity Relationship Diagram)
よくある質問(FAQ)
主キーは必ず設定する必要がありますか?
必須ではありませんが、多くの業務システムではデータを正しく管理するために設定されます。
外部キーは重複できますか?
はい。同じ社員が複数の注文を持つような場合、同じ外部キーの値を複数登録できます。
外部キーを設定しないとどうなりますか?
存在しないデータを参照できてしまうため、データの整合性が崩れる原因になります。
主キーを削除するとどうなりますか?
外部キーで参照されている場合は削除できないことがあります。また、関連するシステムへ影響する可能性があるため、慎重に対応する必要があります。
まとめ
主キー(Primary Key)はデータを一意に識別するための項目、外部キー(Foreign Key)はテーブル同士を関連付けるための項目です。
主キーは「データの身分証明書」、外部キーは「テーブル同士をつなぐ橋」のような役割と考えると理解しやすくなります。
実際のIT業務では、主キーと外部キーを正しく設計・運用することで、データの重複や不整合を防ぎ、システム全体の信頼性を高められます。データベースを学び始めたばかりの方は、この2つの違いをしっかり押さえておきましょう。
