用語比較
主キーと外部キーの違い|行を特定するか、別の表を指すか(DS検定)
主キーと外部キーは、どちらもリレーショナルデータベースの表に設定するキーで、違いは役割です。主キーは表の中の1行を他の行と区別して特定するための列(または列の組)、外部キーは別の表の主キーを指して2つの表を結びつける列です。
行を特定するのが主キー、別の表を指すのが外部キーと区別するのが出発点です。顧客表の顧客IDは主キー、注文表の中にある顧客IDは外部キー、というように、同じ名前の列でも表が変わると役割が変わります。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
主キーと外部キーの要点
主キー
表の中の各行を、確実に区別して特定できる列(または列の組)。表ごとに1つ選ぶ。
外部キー
別の表の主キー(候補キー)を指す列(または列の組)。2つの表を結びつける。
違いを表で確認
| 比較軸 | 主キー | 外部キー |
|---|---|---|
| 役割 | 表の中の1行を特定する | 別の表の行を指して、表どうしを結びつける |
| 値の重複 | 同じ値の行は作れない | 同じ値が複数の行に入ってよい(1つの顧客に複数の注文) |
| NULL(値なし) | 主キーの列には値が必ず入る | 値なしを認める場合がある |
| 1つの表での数 | 1つ | 複数持てる。外部キーごとに参照先の表が違ってよい |
| 試験で探す語 | 一意に識別、行を特定、重複しない | 別の表を参照、リレーションシップ、参照整合性 |
DS検定の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
ER図の線が何を表しているか分からない人
ER図で表どうしを結ぶ線は、外部キーによるつながりを表します。線の片側が主キーを持つ表、もう片側が外部キーを持つ表です。
同じ「顧客ID」が顧客表にも注文表にもあり、どちらが主キーか迷う人
顧客表では、顧客IDは1人を特定するので主キーです。注文表では、顧客IDは顧客表を指す列なので外部キーです。注文表の主キーは注文番号になります。
問題文の「重複しない」「別の表を参照する」の手がかりを知りたい人
「行を一意に識別する」「重複しない」と書いてあれば主キー、「別の表の主キーを参照する」「表を関連づける」と書いてあれば外部キーの説明です。
具体例で使い分ける
例 1
顧客表と注文表の場合
顧客表(顧客ID、顧客名)と注文表(注文番号、顧客ID、注文日)を結びつけたい場面です。
- 顧客表では、顧客IDが1人を特定するので、顧客IDを主キーにします。同じ顧客IDの行は2つ作れません。
- 注文表では、注文番号が1件の注文を特定するので、注文番号を主キーにします。
- 注文表の顧客IDは、顧客表の主キーを指す外部キーにします。同じ顧客IDが複数の注文に入ってよく、1人の顧客が複数回注文した状態を表せます。
結論: 顧客表の顧客IDは主キー、注文表の顧客IDは外部キーです。
例 2
存在しない顧客の注文が入ってしまう場合
顧客表に無い顧客IDが、注文表に入力された場面です。
- 外部キーの値は、参照先の表の主キーのどこかの行と一致するか、値なしであることが求められます。この決まりを参照整合性制約と呼びます。
- 顧客表に無い顧客IDは、この決まりに反します。多くのデータベース管理システムは、この食い違いを防ぐ仕組みを備えています。
結論: 外部キーは、参照先に存在する値だけを入れるための決まりでもあります。
問題文から答えを選ぶ手順
- 1
列が何をしているかを見る
表の中の行を特定する列なら主キー、別の表の行を指す列なら外部キーです。
- 2
値が重複してよいかを確かめる
同じ値の行を作れないなら主キー、同じ値が何度も入るなら外部キーの可能性が高いです。
- 3
参照先の表があるかを確かめる
別の表の主キーとつながっているなら外部キーです。
- 4
表ごとに考え直す
同じ列名でも、表が違えば役割が違います。どの表の中で見ているかを先に決めます。
試験での見分け方
- 1主キーは、表の中の各行を一意に特定する列(または列の組)である。
- 2外部キーは、別の表の主キー(候補キー)を指す列(または列の組)である。
- 3外部キーの値は、参照先に存在する値か、値なしでなければならない。
- 4データサイエンティスト協会のスキルチェックリストには、ER図を読んで表どうしのリレーションシップを理解できることが、データ構造の★1つ星の項目として載っている。
誤答しやすい選択肢
外部キーも、重複しない列と考える
修正: 1つの顧客が複数回注文できるように、外部キーには同じ値が複数の行に入ります。重複を禁じるのは主キーの役割です。
同じ列名なら、どの表でも同じ種類のキーと考える
修正: 顧客IDは、顧客表では主キー、注文表では外部キーです。表ごとに役割を判断します。
外部キーは、必ず別の表にあると考える
修正: 外部キーが、同じ表の別の行を指すこともあります(自己参照)。参照先が同じ表でも、主キーを指す列である点は変わりません。
確認問題
Q1表の中の各行を、他の行と区別して特定する列は何ですか?
答え: 主キー
主キーに選んだ列は、同じ値の行を作れません。
Q2別の表の主キーを指して、2つの表を結びつける列は何ですか?
答え: 外部キー
外部キーの値は、参照先の主キーに存在する値か、値なしです。
Q3ER図で、表どうしを結ぶ線が表しているのは、どちらのキーによるつながりですか?
答え: 外部キー
ER図のリレーションシップは、外部キーで表どうしを結びつけた関係を表します。
到達チェック
- 主キーの役割を言える
- 外部キーの役割を言える
- 値の重複とNULLの扱いの違いを説明できる
- 顧客表と注文表の例で、どの列が主キーでどの列が外部キーかを答えられる
関連ページで確認する
同じ資格で次に知りたいこと
- バッチ処理とストリーム処理の違い|まとめて処理するか、届くたびに処理するか(DS検定)
バッチ処理とストリーム処理の違いを、処理のタイミング、結果が出るまでの待ち時間、向く用途で解説。DS検定のデータ蓄積で問われるKafka・Flinkなどの位置づけと確認問題つきです。
- HadoopとSparkの違い|保存と処理の基盤か、処理エンジンか(DS検定)
HadoopとSparkの違いを、役割、データの置き場所、MapReduceとの関係、向く用途で解説。DS検定のデータ蓄積で問われるHDFS・MapReduce・YARNの位置づけと確認問題つきです。
- 形態素解析と係り受け解析の違い|単語に分けるか、単語どうしのつながりを調べるか(DS検定)
形態素解析と係り受け解析の違いを、入力と出力、処理の順序、日本語の例文で解説。DS検定の自然言語処理で問われる見分け方の手順と確認問題つきです。
よくある質問
Q主キーと外部キーの一番大きな違いは何ですか?
役割です。主キーは表の中の1行を特定する列、外部キーは別の表の主キーを指して表どうしを結びつける列です。
Q外部キーには同じ値が複数入ってもよいですか?
はい。1つの顧客が複数回注文できるように、外部キーには同じ値が複数の行に入ります。重複しないことが求められるのは、主キーの側です。
Q主キーの列に、値なし(NULL)は入りますか?
入りません。Wikipediaは、SQL標準では主キーに加わる各列が暗黙にNOT NULLとして定義されると説明しています。外部キーは、値なしを認める場合があります。
QDS検定に主キーと外部キーは出ますか?
データサイエンティスト協会のスキルチェックリストに、ER図を読んで表どうしのリレーションシップを理解できること(★1つ星)と、正規化手法(第一正規化から第三正規化)を用いてテーブルを正規化できること(★1つ星)が含まれます。キーの言葉そのものは項目に載っていないため、ER図と正規化の理解の土台として押さえておくのが安全です。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
