---
title: "外部キー（Foreign Key）とは？テーブルの関係を理解【DS検定】"
description: "外部キー（Foreign Key）とは、別のテーブルの主キーを参照することでテーブル同士の関係を表す列です。DS検定で問われる定義、具体例、似た概念との違い、選択肢の見分け方を整理します。主要な混同パターンや実務での読み取り方も確認します。"
canonical_url: "https://stemtazoo.github.io/ds/foreign-key/"
section: "ds"
---

<div style="font-size: 14px; margin-bottom: 12px;">
  <a href="/ds/">DS検定トップ</a>
  ＞ 外部キー（Foreign Key）とは？テーブルの関係を理解【DS検定】
</div>

## まず結論

外部キー（Foreign Key）とは、別のテーブルの主キーを参照することでテーブル同士の関係を表す列です。

DS検定では **「データの関係性」と「参照整合性」**を理解できるかが問われます。




## 直感的な説明

データベースでは、多くのデータが互いに関係しています。

例えば、

顧客と注文のデータを考えてみます。

顧客テーブル

顧客ID	名前

1	田中
2	鈴木


注文テーブル

注文ID	顧客ID

100	1
101	2


ここで注文テーブルの「顧客ID」は

どの顧客の注文なのか

を示しています。

このように

別のテーブルのデータを参照する列

を

外部キー（Foreign Key）

と呼びます。



## 定義・仕組み

外部キーとは

> 他のテーブルの主キーを参照することで、テーブル間の関係を表す列



です。

基本構造は次のようになります。

顧客テーブル（主キー）

顧客ID(PK)	名前



注文テーブル（外部キー）

注文ID(PK)	顧客ID(FK)



ここで

顧客テーブルの 顧客ID → 主キー

注文テーブルの 顧客ID → 外部キー


という関係になります。

この仕組みにより

テーブル同士の関係（リレーション）

を管理できます。



参照整合性

外部キーには

参照整合性（Referential Integrity）

というルールがあります。

これは

> 外部キーの値は、参照先テーブルに存在する値でなければならない



というルールです。

例えば

顧客テーブル

顧客ID

1
2


このとき

注文テーブル

注文ID	顧客ID

200	99


のようなデータは

存在しない顧客の注文

になるため登録できません。



## どんな場面で使う？

外部キーは

データ同士の関係を管理するために使います。

代表例

ECサイト

顧客テーブル

| 顧客ID |

注文テーブル

| 注文ID | 顧客ID |

商品テーブル

| 商品ID |

注文明細テーブル

| 注文ID | 商品ID |

このように

顧客

注文

商品


などのデータを

外部キーでつなぐことで

データの関係を表現します。

これは

リレーショナルデータベースの基本構造です。



## よくある誤解・混同

外部キー = 主キーではない

DS検定ではここを混同させます。

用語	役割

主キー	レコードを識別
外部キー	他テーブルを参照


つまり

主キー → 自分のテーブルを識別

外部キー → 他のテーブルとの関係

です。



外部キーは重複してよい

これも試験でよく出ます。

例

注文ID	顧客ID

100	1
101	1


1人の顧客が

複数回注文することは普通なので

外部キーは

重複しても問題ありません。



DS検定の典型的なひっかけ

選択肢で

❌ 「外部キーは重複できない」

と書かれていたら誤りです。

重複できないのは

主キーです。



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

外部キーは 他テーブルの主キーを参照する列

テーブル間の関係を表す

参照整合性によりデータの整合性を保つ

外部キーは 重複してよい


DS検定では

主キー = 識別

外部キー = 関係

と整理しておくと選択肢を切りやすくなります。



## 対応スキル項目（データエンジニアリング力シート）

データ管理

データベース


★ データベースの基本概念（テーブル、主キー、外部キーなど）を理解している ★ データの整合性や品質を保つ仕組みを理解している

<hr>

<div style="margin-top: 16px;">
  🏠 <a href="/ds/">DS検定トップに戻る</a>
</div>
