複合キーとサロゲートキーは、データベース設計の主キー選定にかかわる重要な概念です。この記事では、それぞれの意味と違い、試験での出題ポイントを整理します。

対象試験と出題頻度

複合キー/サロゲートキーは、応用情報技術者で出題されるテーマです。

関係データベースの設計問題として午後試験を中心に登場し、主キーをどう設定するかの判断力が問われます。

詳細をクリックして確認
対象試験:
応用情報技術者
出題頻度:
★★☆☆☆
ランクC(応用)余裕があれば覚える

用語の定義

情報処理試験を勉強していると、「複合キーとサロゲートキーって何が違うの?どっちを使えばいいの?」と混乱しがちです。

複合キー(Composite Key)とは、一言で言うと

 「複数の列(属性)を組み合わせてレコードを一意に識別する主キー

のことです。

一方、サロゲートキー(Surrogate Key)とは

 「業務データとは無関係に、連番などで人工的に付与した代用の主キー

のことです。

イメージとしては、学校の出席番号と座席表で考えると分かりやすいです。

クラスで生徒を特定するとき、「3年2組の田中太郎」と学年・組・名前の3つを組み合わせて識別するのが複合キーの発想です。

一方、全校共通の出席番号「No.0512」を1つ振って識別するのがサロゲートキーの発想です。

📊 複合キー/サロゲートキーの基本情報

項目 複合キー サロゲートキー
英語名 Composite Key Surrogate Key
別名 連結キー、複合主キー 代用キー、代理キー
値の意味 業務上の意味あり(ナチュラルキー) 業務上の意味なし(連番など)
列の数 2列以上 1列

解説

関係データベースでは、テーブルの各レコードを一意に特定できる「主キー」の設定が必須です。

候補キー(レコードを一意に決定できる最小限の属性の組)が1つの列で収まればシンプルですが、現実のデータ構造では1列だけでは一意にならないケースが頻繁に発生します。

複合キーが必要になる場面

たとえば、受注テーブルの明細行は「受注番号」だけでは一意に特定できません。

1つの受注に複数の商品が含まれるためです。この場合、「受注番号+明細行番号」の2列を組み合わせて初めて1行を特定できます。これが複合キーです。

受注明細テーブル(複合キーの例)

🔑 受注番号 🔑 明細行番号 商品コード 数量
A001 1 P100 3
A001 2 P200 1
A002 1 P100 5

▲ 🔑 マークの2列を組み合わせて初めて1行を特定できる

サロゲートキーに置き換える理由

複合キーは業務データだけでテーブルを構成できるという利点がある反面、属性数が増えると次の3つの問題が発生します。

⚠ 複合キーの属性が多すぎると起きること

① SQL結合の煩雑化:JOINで結合する列が増え、SQL文が長く複雑になる
② テーブル間の依存度増大:参照先テーブルの列変更が、外部キーを持つすべてのテーブルに波及する
③ 仕様変更への脆弱性:主キーの構成が変わると、関連テーブルの再設計が必要になる

これらを回避するために、連番のような業務に無関係な列を新たに追加し、それを主キーに昇格させる手法がサロゲートキーです。

元の複合キーは主キーの役割から外れ、「オルタネートキー(代替キー)」という位置づけに変わります。

図解:複合キー → サロゲートキーへの置き換え

Before:複合キー

🔑 予約日 🔑 仲卸コード 内容
4/20 N01 トマト 5箱
4/20 N02 キュウリ 3箱

主キー=予約日+仲卸コード(2列)

After:サロゲートキー

🔑 予約番号 予約日 仲卸コード 内容
R001 4/20 N01 トマト 5箱
R002 4/20 N02 キュウリ 3箱

主キー=予約番号(1列)、元の2列はオルタネートキーに

ここだけは確実に押さえてください。サロゲートキーを導入しても、元の複合キーが消えるわけではありません。

元の列はオルタネートキー(alternate key)として残り、一意性制約はそのまま維持されます。

では、この用語が試験でどのように出題されるか見ていきましょう。

💡 複合キー/サロゲートキーの核心を3行で

・複合キーは複数列を組み合わせた主キー。業務データそのもので構成する
・サロゲートキーは連番等の人工的な列で主キーを代用する手法
・置き換え後、元の複合キーはオルタネートキー(代替キー)になる


試験ではこう出る!

複合キーとサロゲートキーは、応用情報技術者では午後のデータベース問題を中心に出題されています。午前問題では直接的な出題は少ないものの、DB設計の文脈で問われることがあります。データベーススペシャリスト試験では定番テーマです。

📊 過去問での出題実績

試験回 出題内容 問われたポイント
AP H29秋
午後 問6
青果卸売業の取引システム改修。予約エンティティで代用キー(サロゲートキー)を使う理由を記述させる問題。 ・「取りまとめの軸が変更される可能性がある」から複合キーでなくサロゲートキーを採用する判断
・元の属性はオルタネートキーになること
AP R2秋
午前 問27
UMLクラス図から関係DBへの実装を問う問題。納入表の主キー設計で複合キーとサロゲートキーの2パターンが解説に登場。 ・複合キーを候補キーの一部として使えるか
・外部キーの判定
DB R6秋
午前II 問5
複合キーの属性数が多すぎるとき、扱いやすくする方法を選ぶ問題。 ・サロゲートキー(surrogate key)で置き換え、元の複合キーをオルタネートキー(alternate key)にする

📝 IPA試験での出題パターン

パターン1(午後・記述):「なぜサロゲートキーを採用するのか」
AP H29秋 午後問6のように、E-R図の文脈で「主キーに代用キーを用いる理由を述べよ」と問う形式。「複合キーの構成が将来変わる可能性がある」「結合演算が煩雑になる」のいずれかが解答の軸になる。

 

パターン2(午前・選択):「サロゲートキー導入後の元キーの扱い」
DB R6秋 午前II 問5のように、サロゲートキー導入後に元の複合キーがどうなるかを問う。ひっかけとして「外部キーになる」という選択肢が出るが、正解は「オルタネートキー(代替キー)になる」。

 

試験ではここまででOKです。サロゲートキーとオルタネートキーの日本語訳が統一されていない点(代用キー/代理キー/代替キーの混在)は、深追いは不要です。英語名で覚えてしまうのが確実です。


【確認テスト】理解度チェック

ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。


Q. 関係データベースにおいて、主キーが多くの属性から構成される複合キーであるため扱いにくい場合の対応として、最も適切なものはどれか。

  • A. 複合キーを構成する属性のうち、エンティティの性格を最もよく表す1つの属性を主キーとし、残りを外部キーにする。
  • B. 複合キーを構成する属性のうち、エンティティの性格を最もよく表す1つの属性を主キーとし、残りをオルタネートキーにする。
  • C. 連番などを値としてとる列を新たに設けて主キーとし、元の複合キーをオルタネートキーとする。

正解と解説を見る

正解:C

解説:
サロゲートキー(surrogate key)とは、連番などの業務に無関係な列を新設して主キーにする手法です。導入後、元の複合キーはオルタネートキー(alternate key)として一意性制約を維持したまま主キーの役割から外れます。

選択肢Aは誤りです。複合キーは全属性の組み合わせで一意性を保っているため、1つの属性だけを取り出しても主キーとしては機能しません。また、残りの属性は他テーブルの主キーを参照しているわけではないので外部キーにもなりません。選択肢Bも同じ理由で不適切です。複合キーの一部だけではレコードを一意に特定できないため、主キーとして成立しません。


よくある質問(FAQ)

Q. サロゲートキーを導入すると正規化に影響はありますか?

正規化のレベルには影響しません。サロゲートキーはあくまで主キーの「入れ物」を差し替えるだけであり、属性間の関数従属関係自体は変わりません。ただし、元の複合キーにUNIQUE制約を付けておかないと、同じ業務データの重複登録を許してしまう点には注意が必要です。

Q. ナチュラルキーとは何ですか?複合キーとの関係は?

ナチュラルキー(自然キー)とは、業務上の意味を持つ既存の属性で構成された主キーのことです。メールアドレスや社員番号などが該当します。複合キーは、ナチュラルキーが1列では一意にならない場合に複数の属性を組み合わせた形です。つまり「ナチュラルキーかつ複合キー」という状態は普通に存在します。サロゲートキーはナチュラルキーの対義語にあたります。

Q. 実務ではどちらが多く使われていますか?

Webアプリケーション開発の現場では、サロゲートキー(連番のID列)を採用するケースが圧倒的に多いです。Ruby on RailsやDjangoなどの主要なORMフレームワークが、サロゲートキーを前提とした設計になっていることが理由の一つです。一方、データウェアハウスやバッチ処理の現場では、業務データの組み合わせで一意性を保証する複合キーが今でも活用されています。

Q. IPA試験で「代用キー」「代理キー」「代替キー」が混在して出ることはありますか?

あります。IPAの過去問では、サロゲートキーを「代用キー」と表記する回もあれば「代理キー」と表記する回もあります。DB H22春 午前II 問4ではサロゲートキー=代用キー、オルタネートキー=代理キーでしたが、DB R6秋 午前II 問5ではサロゲートキー=代理キーとなっていました。英語名(surrogate key / alternate key)で覚えるのが混乱を防ぐ最善策です。