基本情報技術者 2017年 春期 午前(科目A) 問25
問題文
属性aの値が決まれば属性bの値が一意に定まることを、a → bで表す。例えば、社員番号が決まれば社員名が一意に定まるということの表現は、社員番号→社員名である。この表記法に基づいて、図の関係が成立している属性a〜jを、関係データベース上の三つのテーブルで定義する組合せとして、適切なものはどれか。

選択肢
ア:テーブル1 (a)
テーブル2 (b, c, d, e)
テーブル3 (f, g, h, i, j)
イ:テーブル1 (a, b, c, d, e)
テーブル2 (b, f, g, h)
テーブル3 (e, i, j)(正解)
ウ:テーブル1 (a, b, f, g, h)
テーブル2 (c, d)
テーブル3 (e, i, j)
エ:テーブル1 (a, c, d)
テーブル2 (b, f, g, h)
テーブル3 (e, i, j)
🔒 解説は解答すると表示されます
関係分解と関数従属性の保存【午前解説】
正解の理由
図の矢印は関数従属性(FD)を表します。図から読み取れる従属は次のとおりです。
- a→b, a→c, a→d, a→e
- b→f, b→g, b→h
- e→i, e→j
(c と d から出る矢印はありません)
イ(テーブル1: (a,b,c,d,e)、テーブル2: (b,f,g,h)、テーブル3: (e,i,j))は、決定項ごとに属性をまとめた分解です。
- テーブル1は a を主キーとし、a に直接従属する b,c,d,e をもつ。
- テーブル2は b を主キーとし、b に従属する f,g,h をもつ。
- テーブル3は e を主キーとし、e に従属する i,j をもつ。
推移的な従属(a→b→f など)が別のテーブルに分かれているので、どのテーブルでも非キー属性は主キーだけに直接従属しており、第3正規形になっています。すべてのFDがどれかのテーブルの中で完結している(依存性が保存されている)うえ、テーブル1の b・e でテーブル2・3と結合すれば元の情報を復元できる(無損失)ため、イ が適切です。
解法ステップ
- 図から全てのFDを列挙する(上の一覧)。c と d は他の項目を決定しない点に注意する。
- 決定項(矢印の出発点)ごとにグループを作る:a→{b,c,d,e}、b→{f,g,h}、e→{i,j}。
- 各グループを「決定項を主キーとするテーブル」にする。決定項 b・e はテーブル1にも残し、結合の手がかりにする。
- 選択肢と照合し、3つのグループどおりに分かれているものを選ぶ → イ。
選択肢別の誤答解説
- ア: テーブル1 (a)、テーブル2 (b,c,d,e)、テーブル3 (f,g,h,i,j)。
- a と、a で決まる b,c,d,e が別テーブルに分かれ、共通の項目がないので結合できません。f〜j も、決定項 b・e がないテーブルに入っており、どの値がどの b・e に対応するかが分からなくなります。
- ウ: テーブル1 (a,b,f,g,h)、テーブル2 (c,d)、テーブル3 (e,i,j)。
- a→c, a→d, a→e なのに、c,d,e が a と別のテーブルに置かれ、a との対応が失われます。また、テーブル1では f,g,h が主キー a に推移的に従属(a→b→f)しており、第3正規形になっていません。
- エ: テーブル1 (a,c,d)、テーブル2 (b,f,g,h)、テーブル3 (e,i,j)。
- テーブル2・3はイと同じですが、テーブル1に b と e がないため、a→b、a→e の関係が表せず、テーブル1とテーブル2・3を結合できません。
よくある誤解
- 「矢印が出ていない項目(c, d)も別テーブルにする」
- c と d は a に従属するだけで、他を決定しません。a を主キーとするテーブルに置けばよく、独立したテーブルにすると a との対応が失われます(ウ)。
- 「決定項を元のテーブルから取り除いてよい」
- b と e はテーブル2・3の主キーですが、テーブル1にも残さないと a との結び付きがなくなります(エ)。
- 「推移的従属をそのまま1つの表に入れてもよい」
- a→b→f のような推移的従属を同じ表に残すと第3正規形にならず、更新時異状の原因になります。
補足コラム
- 第3正規形への分解の基本は「決定項ごとに、その決定項を主キーとする表を作る」ことです。本問の3つの決定項 a・b・e がそのまま3つのテーブルの主キーになります。
- 無損失分解の簡便な確認:分解したテーブル同士が、どちらかのテーブルの主キーとなる共通項目で結合できれば、元の関係を復元できます。イでは b(テーブル2の主キー)と e(テーブル3の主キー)がテーブル1に含まれています。
FAQ
Q1: テーブル1に b と e が残っているのは冗長ではないのですか?
A1: 冗長ではありません。b と e はテーブル2・3を参照するための外部キーで、これがないと a とテーブル2・3の情報を結び付けられません。 Q2: この分解で依存性は保存されていますか?
A2: はい。a→b,c,d,e はテーブル1、b→f,g,h はテーブル2、e→i,j はテーブル3の中でそれぞれ完結しているので、すべてのFDを各テーブルで検査できます。
A1: 冗長ではありません。b と e はテーブル2・3を参照するための外部キーで、これがないと a とテーブル2・3の情報を結び付けられません。 Q2: この分解で依存性は保存されていますか?
A2: はい。a→b,c,d,e はテーブル1、b→f,g,h はテーブル2、e→i,j はテーブル3の中でそれぞれ完結しているので、すべてのFDを各テーブルで検査できます。
関連キーワード: 関数従属性、第3正規形、推移的関数従属、無損失分解、依存性保存、主キー、外部キー

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

