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

ITパスポート 2010年 秋期 79


問題文

関係データベースで管理された“業者”表、“仕入明細”表及び“商品”表がある。 新たな業者から新たな商品を仕入れた場合、表にデータを追加する順序のうち、適切なものはどれか。ここで、下線は主キーを示し、破線は外部キーを示す。解答群の→はデータを追加する表の順序を示す。
ITパスポート 2010年 秋期  問79の問題画像

選択肢

“業者”表→ “仕入明細”表→ “商品”表
“業者”表→ “商品”表→ “仕入明細”表(正解)
“仕入明細”表→ “商品”表→ “業者”表
“商品”表→ “業者”表→ “仕入明細”表

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

業者・仕入明細・商品 表へのデータ追加順序【ITパスポート 解説】

正解の理由

理由は次の通りです。
  • 主キー(primary key:各行を一意に識別する列)と外部キー(foreign key:他の表の主キーを参照する列)というルールがあるからです。
  • 図から、商品表の「業者コード」は業者表の主キーを参照する外部キーです。つまり「商品」を登録するとき、その業者が先に存在していなければなりません。
  • さらに、仕入明細表の「商品コード」は商品表の主キーを参照する外部キーです。したがって仕入明細を登録する前にその商品が登録されている必要があります。
    このため、まず業者 → 次に商品 → 最後に仕入明細、すなわち が正しい流れです。

解法ステップ

  1. 図で各表の下線を確認する。実線=主キー、点線=外部キーであることを確認する。
  2. 外部キーが参照している先(参照先の表)が存在するか考える。
    • 商品表の業者コード(点線)は業者表の業者コード(実線)を参照。
    • 仕入明細表の商品コード(点線)は商品表の商品コード(実線)を参照。
  3. 参照関係に従って「参照先 → 参照元」の順でデータを挿入する。
    • 業者表(参照先) → 商品表(中間) → 仕入明細表(参照元)
実務でのイメージ(短い例):
  • まず仕入先(会社A)を取引先台帳に登録する。
  • 次に会社Aから仕入れる商品を商品マスタに登録する(その商品は会社Aに属する)。
  • 最後に実際の仕入伝票を仕入明細に記録する(伝票は既に存在する商品を指定する)。

選択肢別の誤答解説

  • ア: “業者”表 → “仕入明細”表 → “商品”表
    • 誤り。仕入明細は商品コードで商品表を参照しているため、仕入明細を先に入れると参照先の商品が存在せず参照整合性違反(外部キー制約エラー)になります。
  • : “業者”表 → “商品”表 → “仕入明細”表
    • 正解。参照関係(業者 ← 商品 ← 仕入明細)に従っており、いつでも外部キーが参照先を満たします。
  • ウ: “仕入明細”表 → “商品”表 → “業者”表
    • 誤り。仕入明細を最初に入れると商品がまだないため外部キー制約でエラーになります。さらに商品を入れても、商品が参照する業者が未登録なら商品登録時にエラーになります。
  • エ: “商品”表 → “業者”表 → “仕入明細”表
    • 誤り。商品表は業者コードを参照するので、商品登録時に業者が未登録だと外部キー制約でエラーになります。したがって業者は商品より先に必要です。

よくある誤解

  • 外部キーは「必ず同じ値が存在しなければならない」と考えすぎる人がいます。
    • 実際には外部キーの設定により、NULLを許す場合や参照先が削除されたときに自動で値をNULLにする・削除する(ON DELETE SET NULL / CASCADE)などの動作を設定できます。ただし基本は「参照先が先に存在する」ことを想定します。
  • 「どの表を最初に登録しても後でまとめて整合性を取ればよい」と考える人がいます。
    • 通常のRDBMS(関係データベース)では外部キー制約は即時チェックされるため、順序を間違えると挿入時にエラーになります(ただし制約の遅延評価を設定できるDBもあります)。

補足コラム

  • 実務ではトランザクション(一連の処理をまとめて扱う仕組み)を使って安全に複数の表へデータを挿入します。途中でエラーが出たら全体を取り消して(ロールバックして)元に戻せます。
  • SQLでの挿入例(順序を示す):
-- 1. 業者を登録
INSERT INTO 業者 (業者コード, 業者名) VALUES ('A001', '株式会社A');

-- 2. 商品を登録(業者コードは業者表の値を参照)
INSERT INTO 商品 (商品コード, 商品名, 業者コード, 単価) VALUES ('P100', '商品X', 'A001', 1200);

-- 3. 仕入明細を登録(商品コードは商品表の値を参照)
INSERT INTO 仕入明細 (伝票番号, 枝番, 日付, 商品コード, 数量) VALUES ('D0001', 1, '2026-07-14', 'P100', 10);
  • もし「どうしても別順で登録したい」場合は、データベースの外部キー制約を一時的に無効にするか、参照整合性の遅延チェックを使う方法もあります。ただし試験や安全な運用を考えると推奨されません。

FAQ

Q1: 外部キーがあると必ず順番通りに入れないといけませんか?
A1: 通常はそうです。外部キー制約が有効だと参照先が存在しないと挿入でエラーになります。例外として、制約を無効化する、または遅延チェックを設定するDB機能がありますが、運用上は通常の順序を守るのが安全です。
Q2: 商品表の業者コードがNULLなら順序は関係ないですか?
A2: 商品の業者コード列がNULLを許す設定なら、業者を後から登録しても商品の登録は可能です。ただし、参照整合性や業務ルール上「商品には必ず業者が必要」ならNULLを許さない設計にします。
Q3: 問題の図で主キーと外部キーの見分け方は?
A3: 問題の説明どおり、実線の下線が主キー、点線の下線が外部キーを示しています。これを見て参照関係をたどれば順序が決まります。

関連キーワード: リレーショナルデータベース、主キー、外部キー、参照整合性、外部キー制約、トランザクション、SQL、正規化
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

ITパスポート
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

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

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