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

基本情報技術者 2010年 春期 午前(科目A)30


問題文

“発注伝票”表を第3正規形に書き換えたものはどれか。ここで、下線部は主キーを表す。
発注伝票(注文番号商品番号、 商品名、 注文数量)

選択肢

発注(注文番号、 注文数量) 商品(商品番号、 商品名)
発注(注文番号、 注文数量) 商品(注文番号商品番号、 商品名)
発注(注文番号商品番号、 注文数量) 商品(商品番号、 商品名)(正解)
発注(注文番号商品番号、 注文数量) 商品(商品番号、 商品名、 注文数量)

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

第3正規形へのテーブル分割【午前解説】

正解の理由

元のテーブル 発注伝票(注文番号, 商品番号, 商品名, 注文数量)は主キーが(注文番号, 商品番号)の複合キーです。商品名は商品番号だけで決まるため、非キー属性が複合キーの一部にのみ依存する「部分関数従属」が発生します。第2正規形(2NF)では部分関数従属を排除する必要があり、さらに第3正規形(3NF)では推移的従属も排除します。したがって商品名を商品番号に基づく独立したテーブル(商品)に移し、発注は行単位(注文番号+商品番号+注文数量)を保持する設計が正解になります。これが選択肢のです。

解法ステップ

  1. 与えられたテーブルの主キーを確認する(ここでは(注文番号, 商品番号))。
  2. 各非キー属性が主キー全体に依存しているかを確認する(商品名は商品番号のみに依存)。
  3. 部分依存があれば、その非キー属性を独立したテーブルに移す(商品テーブルを作成)。
  4. 移行後も主キーや外部キーでリレーションを維持してデータの整合性を確保する。
  5. さらに推移的従属がないか確認し、3NFの条件を満たすか検証する。

選択肢別の誤答解説

  • ア: 発注(注文番号、注文数量) 商品(商品番号、商品名)
    • 誤り理由:発注テーブルから商品番号を除くと、どの商品に対する注文数量かを示す情報が失われ、行(明細)レベルの粒度が維持できません。
  • イ: 発注(注文番号、注文数量) 商品(注文番号、商品番号、商品名)
    • 誤り理由:商品テーブルに注文番号が入っており商品情報が注文ごとに重複してしまう。商品は商品番号だけで一意に定義されるべきです。
  • : 発注(注文番号、商品番号、注文数量) 商品(商品番号、商品名)
    • 正解理由:行明細を表す発注テーブルは(注文番号+商品番号)で注文行を一意に保持し、商品名は商品番号に依存するため商品テーブルに分離して部分従属を解消しています。
  • エ: 発注(注文番号、商品番号、注文数量) 商品(商品番号、商品名、注文数量)
    • 誤り理由:注文数量は商品ごと・注文ごとの属性であり商品テーブルに置くべきではない。商品テーブルに注文数量が入ると意味が変わりデータの整合性が壊れます。

よくある誤解

  • 「注文数量は注文に属する属性だから発注テーブルだけでよい」と考え、商品番号を切り離してしまうと行(明細)の粒度を失いデータが正しく表現できません。
  • 「商品名は冗長だから発注から削ればよい」として商品名をどこにも保持しない設計にし、商品情報を参照できなくなるミス。
  • 複合主キーを見落として単純な主キー扱いにすると、部分従属や推移的従属の判定を誤ります。

補足コラム

  • 第1正規形(1NF):各セルが原子値(単一値)であること。
  • 第2正規形(2NF):1NFかつ、非キー属性が主キーの全体に完全関数従属していること(部分従属の排除)。
  • 第3正規形(3NF):2NFかつ、非キー属性が他の非キー属性に依存していないこと(推移的従属の排除)。
    今回の事例は商品名が複合キーの一部にのみ依存しているため、まず2NFを満たしていない点が本質的問題で、分割により3NFも満たせます。

FAQ

Q1. 商品名が重複しても構わないのでは?
A1. 表面的には重複しても動作する場合がありますが、商品情報(価格や説明)が変更された際に整合性を保てず更新異常が発生します。正規化で冗長性を減らすのが望ましいです。
Q2. 複合主キーを単一主キーに変更して対処してもよいか?
A2. 単一の代理キー(サロゲートキー)を導入することは可能ですが、部分従属の判断は属性間の従属性に基づくため、属性の依存関係が解消されるわけではありません。適切にテーブル分割することが基本です。
Q3. 3NF と BCNF はどう違う?
A3. 3NFは推移的従属を排除する条件ですが、BCNFは候補キーでない属性から候補キーへの関数従属も許さないより厳格な形です。教科書問題ではまず3NFを目安にします。

関連キーワード: 第3正規形, 第2正規形, 正規化, 主キー, 関数従属, 部分関数従属, テーブル分割, リレーショナルデータベース
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する

すぐに利用可能!

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

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