外部キーとは?テーブル同士をつなぐ役割を小学生でもわかるように解説

外部キーとは?テーブル同士をつなぐ役割を小学生でもわかるように解説のサムネイル

外部キーとは、別のテーブルにある主キーなどの一意な値を参照し、テーブル同士の関係を守るための列、または列の組み合わせです。見た目はただのIDの列でも、役割はとても大切です。データベースでは、データがバラバラにならず、つじつまが合うように支える「約束事」だと考えるとわかりやすいです。

よくある疑問:外部キーって、ただ数字を入れるだけの列とは違うんですか?

はい。外部キーは、別テーブルに本当に存在する値だけを使って、データ同士の関係がずれないようにする仕組みです。

たとえば、会員テーブルと注文テーブルがあるとします。注文には「だれの注文か」を入れたいので、会員テーブルの会員IDを注文テーブルに持たせます。このとき、会員IDを参照する列が外部キーです。もし会員IDが間違っていたら、注文の持ち主がわからなくなります。外部キーは、そうしたミスを起こしにくくします。

目次

基礎解説:外部キーの役割

外部キーのいちばん大きな役割は、テーブル同士の関係をはっきりさせることです。データベースは、1つの大きな表に全部入れるより、目的ごとに表を分けることが多いです。名前、注文、商品、支払いのように分けておくと管理しやすくなります。その代わり、表同士をどう結ぶかを決めないと、後で何のデータかわからなくなります。そこで外部キーが必要になります。

外部キーがあると、次のような助けがあります。

  • 存在しない相手のIDを入れにくくなる
  • 親データと子データの関係が保ちやすくなる
  • テーブルのつながりをSQLや図で追いやすくなる
  • データのつじつまが合わない事故を減らしやすい

ここでよく出る言葉が「親テーブル」と「子テーブル」です。会員テーブルのように、参照される側を親テーブル、注文テーブルのように、参照する側を子テーブルと呼ぶことがあります。親は「元のデータ」、子は「そのデータを使っている側」と覚えると混乱しにくいです。

また、外部キーはただ入れれば終わりではありません。親データを更新したり削除したりするときに、子データをどう扱うかも考える必要があります。運用によっては、親を消そうとしたら止める、子も一緒に消す、子の値を空にする、といった動きが設定できます。ここは、データを勝手に壊さないための安全装置です。

テーブルを分ける考え方は、正規化でよく出てきます。データを整理して重複を減らすほど、どの列がどの表を指すのかを外部キーで決める場面が増えます。逆に、表のつながりがあいまいだと、後から探しにくくなります。

身近なたとえ:名簿と出席番号で考える

外部キーは、学校の名簿にたとえるとわかりやすいです。クラス名簿には、児童番号と名前があります。日直表や出席記録には、児童番号を書いておくと、誰の記録かすぐにわかります。このとき、出席記録に存在しない番号を書いてしまうと、名簿と記録が合いません。

つまり、外部キーは「相手の表に本当にいる番号だけを書いてね」というルールです。電話番号のメモのように見えても、実は相手の名簿とつながっているので、勝手な番号を入れると困ります。データベースでも同じで、関係のない番号が入ると、注文の持ち主、所属部署、担当者などが追えなくなります。

もう少し大人向けの仕事の場面で言うと、顧客マスタと受注データの関係です。受注データには顧客IDを入れますが、その顧客IDは顧客マスタにある番号でなければいけません。これが外部キーの考え方です。もし顧客が退職、退会、削除などの状態になっても、受注データとの関係は設計で整理しておかないと、あとで誰の取引かわからなくなります。

実務例:ECサイトの注文データ

ECサイトでは、会員、商品、注文、注文明細のようにテーブルが分かれることが多いです。たとえば、注文テーブルに会員IDを入れておけば、「この注文はどの会員のものか」をすぐに追えます。注文明細には注文IDと商品IDを入れておけば、「どの注文に、どの商品が、何個入っているか」がわかります。こうしたつながりを支えているのが外部キーです。

CREATE TABLE customers (
  customer_id INT PRIMARY KEY,
  customer_name VARCHAR(100)
);

CREATE TABLE orders (
  order_id INT PRIMARY KEY,
  customer_id INT,
  order_date DATE,
  FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

この例では、orders の customer_id が外部キーです。customers にない customer_id を入れようとすると、データベースが止めてくれる設定にできます。これによって、存在しない会員の注文を作ってしまうミスを防ぎやすくなります。

画面で一覧を作るときは、外部キーだけでは足りません。注文一覧に会員名も表示したいなら、JOIN を使ってテーブルをつなぎます。外部キーは「つなぐ約束」、JOINは「つないで見せるSQL」です。役割がちがうので、セットで覚えると整理しやすくなります。

設計を図で考えるなら、ER図 が便利です。ER図では、テーブル同士の線を見ながら、どれが親でどれが子かを確認できます。外部キーがあると、図の線と実際のテーブル定義がそろいやすく、あとで確認するときにも迷いにくいです。

よくある疑問:外部キーがあれば、JOINはもう使わなくていいんですか?

いいえ。外部キーは関係を守るルールで、JOINはその関係を使ってデータを一緒に見るSQLです。どちらも大切ですが、仕事はちがいます。

図解で整理

外部キーで2つの表をつなぐイメージ

注文表のC01を見ると、「誰の注文か」を顧客表からたどれます。

主キーと外部キーのちがい
主キーは自分の表の行を見分ける番号。外部キーは別の表を参照して関係をつなぐ番号。

ここで、主キーと外部キーのちがいを一度まとめます。主キーは「その表の中で1行を見分けるための番号」、外部キーは「別の表の番号を借りて関係をつなぐ番号」です。見た目は似ていますが、役割ははっきりちがいます。

主キー 外部キー
そのテーブルの行を一意に見分ける 別テーブルの主キーを参照する
重複しない値にする 相手側に本当にある値だけを使う
テーブルの「本人確認」 テーブル同士の「つながりの証明」

この違いをひとことで言うと、主キーは「自分の表の代表」、外部キーは「ほかの表との橋」です。橋があると行き来しやすくなりますが、橋の先に相手がいないと困ります。だから、外部キーには相手の表との整合性を守る意味があります。

実務では、外部キーを付ければ終わりではありません。削除時の動き、更新時の動き、NULL を許すかどうかなど、運用ルールを合わせて考えることが大切です。必要以上に制約を増やしすぎると、逆に管理しにくくなることもあるので、データの流れに合わせて設計します。

3問クイズ

Q1. 外部キーの説明として、いちばん近いものはどれ?

A. テーブル内で行を一意に見分ける列

B. 別テーブルの主キーを参照して関係を保つ列

C. 文字を自動で大きくする機能

D. 画面の色を変える機能

答えを見る

答え:B. 別テーブルの主キーを参照して関係を保つ列です。

Q2. 外部キーがあると、どんなミスを防ぎやすい?

A. 存在しない相手のIDを入れるミス

B. パソコンの電源が切れるミス

C. 文字入力のスピードが落ちるミス

D. 画面を印刷できないミス

答えを見る

答え:A. 存在しない相手のIDを入れるミスです。

Q3. 外部キーと特に相性がよいものはどれ?

A. ER図

B. 画像編集ソフト

C. 音楽再生アプリ

D. ZIPファイル

答えを見る

答え:A. ER図です。

まとめ

外部キーとは、別テーブルにある主キーなどの一意な値を参照して、データ同士の関係を守る列、または列の組み合わせです。主キーは自分の表の本人確認、外部キーはほかの表とのつながりを保つ役目です。正規化JOINER図 と一緒に覚えると、データベース設計がぐっと理解しやすくなります。まずは「テーブルを安全につなぐ約束」と覚えましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次