戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

応用情報技術者 2010年 春期 午前229


問題文

顧客は一般に複数の銀行に預金するものとして、顧客と銀行の関連を、E-R 図で次のように表現する。このモデルを関係データベース上に “銀行” 表、“口座” 表、“顧客”表として実装する場合の記述として、適切なものはどれか。
応用情報技術者 2010年 春期 午前2 問29の問題画像

選択肢

“銀行”表から “口座”表へのカーディナリティは多対1である。
“銀行”表中に参照制約を課した外部キーがある。
“口座”表から “顧客”表へのカーディナリティは1対多である。
“口座”表には二つ以上の外部キーがある。(正解)

🔒 解説は解答すると表示されます

口座テーブルの外部キー【午前2解説】

正解の理由

ER図では「口座」が銀行と顧客を結ぶ関係(リレーションシップ)を表しています。関係を関係データベース上に実装する際、関係(多対多や関係に属性がある場合)は独立した表として作成し、その表に関係先の各エンティティを参照する外部キーを持たせます。したがって、口座表には銀行表と顧客表を参照する二つ以上の外部キーが含まれるため、選択肢 が妥当です。

解法ステップ

  1. 図の要素を識別する:長方形はエンティティ(銀行、顧客)、菱形はリレーションシップ(口座)であると確認する。
  2. カーディナリティを読み取る:一般的に「顧客は複数の銀行に預金する」などの文脈から関係は多対多(ある顧客が複数の銀行に口座を持ち、ある銀行が複数の顧客を持つ)である可能性を考える。
  3. 実装ルールを適用する:多対多の関係は中間表(関係表)で実装し、その中間表に両側のエンティティを参照する外部キーを設定する。
  4. 選択肢と照合する:上記の実装から「口座表には二つ以上の外部キーがある」が成立するため選ぶ。

選択肢別の誤答解説

  • ア: “銀行”表から “口座”表へのカーディナリティは多対1である。
    解説:方向を明確にすると、銀行→口座は「1対多」です(1つの銀行に複数の口座が属する)。選択肢アは「多対1」としており、方向が逆になっているため誤りです。
  • イ: “銀行”表中に参照制約を課した外部キーがある。
    解説:参照制約(外部キー)は通常、他テーブルを参照する側の表に置かれます。銀行が親(参照される側)であるため、銀行表に口座を参照する外部キーを持つ必要はなく、この記述は誤りです。
  • ウ: “口座”表から “顧客”表へのカーディナリティは1対多である。
    解説:口座→顧客の向きで読むと、1つの口座は通常1人(または1つ)の顧客に属します。つまり「口座→顧客」は多対1(多くの口座が1人の顧客に属する)であり、選択肢ウの「1対多」は方向を取り違えた誤りです。
  • エ: “口座”表には二つ以上の外部キーがある。
    解説:口座が銀行と顧客をつなぐ関係(あるいはアソシエイティブエンティティ)で実装されるため、銀行表と顧客表それぞれを参照する外部キーを持つことになり、この記述は正しい(したがって正答は )。

よくある誤解

  • 「A→Bのカーディナリティ」を表現するときに方向を取り違える:例えば「銀行表から口座表へのカーディナリティ」と書くときは必ず「銀行1に対して口座が多い=1対多」であることを確認する。
  • 外部キーは親テーブルに置くと誤解する:外部キーは参照する側(子)に置くのが原則で、参照される側(親)は通常外部キーを持たない。
  • 多対多の関係をそのまま2つのテーブルで表現できると考える:多対多は中間表(関係表)が必要で、そこに両側の外部キーが入る。

補足コラム

  • 口座(関係)に属性(口座番号、開設日、残高など)があれば、口座は独立した表として実装されるのが普通です。中間表に属性がない場合でも、多対多を解消するため中間表を置く設計が標準です。
  • 中間表の主キー設計は2方式がある:両外部キーの組み合わせを主キーとする複合主キー方式、あるいは surrogate key(口座IDなどの単一主キー)を設けておく方式。どちらを選ぶかは運用上の要件(口座の一意性、検索負荷、将来の拡張性など)で決めます。
SQLの実装例(参考)
CREATE TABLE bank (
  bank_id   INT PRIMARY KEY,
  name      VARCHAR(100)
);

CREATE TABLE customer (
  customer_id INT PRIMARY KEY,
  name        VARCHAR(100)
);

CREATE TABLE account (
  account_id  INT PRIMARY KEY,           -- サロゲートキー方式
  bank_id     INT NOT NULL,
  customer_id INT NOT NULL,
  balance     DECIMAL(12,2),
  opened_at   DATE,
  FOREIGN KEY (bank_id) REFERENCES bank(bank_id),
  FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
);

FAQ

Q. 口座表に外部キーが2つ必要なのはなぜですか?
A. 口座表は銀行と顧客を結ぶ関係(多対多や関係に属性がある場合の関係)を実装する表であり、両側のエンティティを識別するためにそれぞれを参照する外部キーが必要になります。
Q. 中間表の主キーは必ず複合キーでなければなりませんか?
A. 必須ではありません。複合主キー(bank_id, customer_id)にする方法と、口座IDのようなサロゲートキーを設ける方法のどちらも採用されます。それぞれ一長一短があるため要件に合わせて選択します。

関連キーワード: E-R図、カーディナリティ、外部キー、関係テーブル、アソシエイティブエンティティ、正規化、リレーショナルモデル
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

応用情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について