基本情報技術者 2014年 春期 午前(科目A) 問26
問題文
項目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)を表します。図から取り出せる基本的なFD群は以下です。
- a→b, a→c, a→d, a→e
- b→f, b→g
- c→g, c→h
- d→i
- e→i, e→j
選択肢のうち、イ(テーブル1: (a,b,c,d,e)、テーブル2: (b,f,g,h)、テーブル3: (e,i,j))は次の二点を満たすため適切です。
-
無損失分解(lossless):元の関係の候補キーが a であることを示せるため、テーブル1 がそのキー a を含んでおり、全体の分解は無損失となる。具体的に を計算すると全属性を含むため は候補キーです。したがってテーブル1 を含む分解は結合して元に戻せます。
-
可能な限りの従属性を各テーブルに局所的に保持している:b→f,b→g はテーブル2 に、e→i,e→j はテーブル3 に、a→b,c,d,e はテーブル1 に含まれ、直接検査できるようになっています。
ただし、c→g,c→h および d→i については、左辺と右辺が別テーブルに分かれているためテーブル単体では直接検査できません(依存性保存がされない)。それでも無損失であるため情報は失われない(結合すれば元の従属性が復元可能)点から、運用上は許容される構成として本問の正答は イ です。
解法ステップ
- 図から全ての基本FDを列挙する(上に示した一覧)。
- 候補キーを求める: の閉包を計算する。
- は a→b,c,d,e により {a,b,c,d,e} を含む。
- さらに b→f,g、c→h、d→i、e→i,j を順に適用すると最終的に全属性 {a…j} を含む。よって が候補キーである。
- 表現: 。
- 各選択肢について、いずれかのテーブルが原関係の候補キーを含むか(無損失の簡便条件)、および各FDの左右が同一テーブルに含まれるか(依存性保存の観点)を確認する。
- 無損失かつ実務上妥当な依存性配置を満たす組合せを選ぶ。
選択肢別の誤答解説
- ア: テーブル1 に a 単独、テーブル2 に (b,c,d,e)、テーブル3 に (f,g,h,i,j)。
- 問題点:原関係の候補キー a を含むテーブルが a 単独では派生属性(b,c,d,e)を保持しないため、a による全属性の復元ができない。無損失条件を満たさない(少なくとも容易に示せるキー包含がない)。
- ウ: テーブル1 (a,b,f,g,h)、テーブル2 (c,d)、テーブル3 (e,i,j)。
- 問題点:a→c,d,e のうち c,d,e が分散している。特に a が原関係の候補キーであるにもかかわらず、候補キーを含むテーブルが完全ではなく、無損失性の簡便条件が満たされない。また c→g,h を保持する配置になっていない。
- エ: テーブル1 (a,c,d)、テーブル2 (b,f,g,h)、テーブル3 (e,i,j)。
- 問題点:a→b が満たされない(b が別テーブル)。結果として a が候補キーであることを利用できず、無損失の確認ができない。さらに b→f,g はテーブル2 で良いが a に関する従属性の分散が大きい。
以上より、無損失かつ実装上妥当な選択は イ。
よくある誤解
- 無損失分解=依存性保存だと誤解する
- 無損失(結合で元に戻せる)と依存性保存(各 FD を個々の分解表で検査可能)は別概念です。分解は無損失でも一部の FD がテーブル単位では検査できないことがあります(本問では c→g,c→h,d→i が該当)。
- トランジティブに左辺が変わると自動的に FD が保存されると考える誤り
- a→b と b→g があっても、それが c→g を導出するわけではありません。導出可能かは属性間の関係で決まります。
- 「左右が別テーブルなら必ずダメ」との短絡判断
- 別テーブルに分かれていても分解が無損失であれば情報は失われず、結合して検査すれば元の従属性を確認できます。運用上はトレードオフ(性能/制約チェックの場所)を検討します。
補足コラム
- 依存性の投影(projection):あるテーブルスキーマに対して元の FD 群からそのスキーマ上で成立する FD を求める操作を「投影」と言います。本問では投影結果をテーブルごとに列挙すると保存される従属性が明確になります。
- テーブル1 (a,b,c,d,e) に投影される FD: a→b,c,d,e(およびその派生)
- テーブル2 (b,f,g,h) に投影される FD: b→f,g
- テーブル3 (e,i,j) に投影される FD: e→i,j
これらの合併が元の FD 群と一致しない場合、依存性は保存されていないことになります。
- 無損失の簡便チェック:分解のうちどれか一つの分割部が原関係のスーパーキー(候補キー)を含むなら、その分解は無損失になります。本問では a が原関係の候補キーであり、テーブル1 に a が含まれるため条件を満たします。
FAQ
Q1: c→g や d→i が保存されないと実務で問題になるか?
A1: 保存されないとテーブル単体でその制約をデータベースに任せて検査できません。運用上は(1)結合して検査する、(2)トリガ/アプリケーションで検査する、(3)設計を変えて依存性保存を優先する——のいずれかを選びます。無損失であるためデータの再構成は可能です。
A1: 保存されないとテーブル単体でその制約をデータベースに任せて検査できません。運用上は(1)結合して検査する、(2)トリガ/アプリケーションで検査する、(3)設計を変えて依存性保存を優先する——のいずれかを選びます。無損失であるためデータの再構成は可能です。
Q2: 依存性保存を優先すべきか無損失を優先すべきか?
A2: 原則は両方を満たすことが望ましいですが、トレードオフがあります。実務では無損失は必須に近く、依存性保存は性能や運用負荷と照らして判断します。試験的には「無損失を満たす選択」を重視する設問が多いです。
A2: 原則は両方を満たすことが望ましいですが、トレードオフがあります。実務では無損失は必須に近く、依存性保存は性能や運用負荷と照らして判断します。試験的には「無損失を満たす選択」を重視する設問が多いです。
関連キーワード: 関数従属性、無損失分解、依存性保存、正規化、候補キー

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

