データベーススペシャリスト 2023年 午前2 問06
問題文
関係モデルにおいて、情報無損失分解ができ、かつ、関数従属性保存が成り立つ変換が必ず存在するものはどれか。ここで、情報無損失分解とは自然結合によって元の関係が復元できる分解をいう。
選択肢
ア:第2正規形から第3正規形への変換(正解)
イ:第3正規形からボイス・コッド正規形への変換
ウ:非正規形から第1正規形への変換
エ:ボイス・コッド正規形から第4正規形への変換
🔒 解説は解答すると表示されます
第2正規形から第3正規形の変換【午前2解説】
正解の理由
関数従属性の保存(FD保存)と情報無損失分解(自然結合で元に戻ること)を両立する3NF分解は、標準的な合成(synthesis)アルゴリズムを用すれば常に構成可能です。したがって、選択肢のうちその「存在」が必ず成り立つのは ア(第2正規形から第3正規形への変換)です。ポイントは「3NFという正規形自体が常にFD保存を強制する」のではなく、「FD保存かつ情報無損失を満たす3NF分解を構成する手順が存在する」ことです。この点を押さえれば、問題の正しさが理解できます。
解法ステップ
- 正規化に関する基本定理を思い出す:3NFへは合成アルゴリズムでFD保存かつ情報無損失な分解が作れる。
- 各選択肢について「常に(必ず)FD保存かつ情報無損失が両立するか」を検討する。
- BCNFや4NFへの分解は情報無損失は保証できてもFD保存が失われる場合があるため「常に」は成り立たない。非正規→1NFについてはモデリングに依存し、一般的な保証はできない。
- したがって合成アルゴリズムの存在に基づいて ア を選ぶ。
選択肢別の誤答解説
-
ア(第2正規形から第3正規形への変換)
正答。2NFであっても関係とその関数従属性を入力として、最小被覆(最小限のFD集合)を作り,各FDに対応する属性集合で表の候補を作成し、さらに候補キーを含む表を加える合成アルゴリズムにより、3NFでかつFD保存・情報無損失の分解を得られる。従って「必ず存在する」と言える。 -
イ(第3正規形からボイス・コッド正規形への変換)
誤り。BCNFは3NFより厳格で、BCNF化のために分解すると元のFD群を個々の分解後の関係へ投影しても元のFDが保存されない(依存関係が失われる)ことがある。例えば、ある関係RとFD集合に対して、BCNF分解は情報無損失を保てるがFD保存が成り立たない例が教科書的に示される。したがって「必ずFD保存かつ情報無損失の変換が存在する」とは言えない。 -
ウ(非正規形から第1正規形への変換)
誤り。非正規形(nested relationや繰返しグループを含む)を1NFに直す方法は設計者の選択や展開方法に依存し、必ずしも与えられた関数従属性を保存しつつ情報無損失に変換できるという一般的な定理はない。実装や正規化の方針によってFDが失われる場合もある。 -
エ(ボイス・コッド正規形から第4正規形への変換)
誤り。4NFは多値従属性(MVD)を扱うための正規形で、BCNFとの関係は別軸の問題になる。BCNFから4NFへ分解する際にMVDとFDの関係で依存関係保存が保証されるとは限らない。一般には「BCNF → 4NFで常にFD保存かつ情報無損失が両立する」とは言えない。
よくある誤解
- 「3NFであれば必ず関数従属性が保存される」
誤解。3NFの定義自体はFD保存を必須としない。重要なのは「FD保存かつ情報無損失な3NF分解を構成するアルゴリズムが存在する」こと。 - 「BCNFは常に3NFより優れている(より正しい)」
BCNFは冗長性排除の観点で厳しいが、FD保存を犠牲にすることがあるため実運用では3NFの方が実用的な場合がある。 - 「正規化の結果は一意である」
誤り。分解の仕方や最小被覆の取り方によって得られる分解スキーマは複数存在し得る。
補足コラム:3NF合成アルゴリズムの要点
合成アルゴリズムの概略手順は次の通りです。これにより「FD保存かつ情報無損失」の3NF分解が得られます。
- 与えられたFD集合の最小被覆(各FDの右辺は単属性、左辺最小化、冗長FD削除)を作る。
- 各FD X→A(最小被覆の要素)に対して関係スキーマ R_X = X ∪ {A} を作る。
- 既に作成したスキーマ群の中に候補キーを含むものがなければ、元の関係の候補キーを属性集合として持つスキーマを追加する(これが情報無損失を担保する)。
- 生成されたスキーマ群を統合・不要なものは取り除く(包含されるスキーマの削除など)。
この手順で得られる分解は3NFであり、作り方の性質上FD保存と情報無損失が満たされる点が重要です。
FAQ
Q. 「3NFにすれば必ず更新異常が消えるか?」
A. 3NFにすることで多くの冗長性は排除され更新異常が軽減されるが、設計やビジネス要件によっては性能上の理由で意図的に正規化を緩めることもあるため「必ず消える」とは言えません。
A. 3NFにすることで多くの冗長性は排除され更新異常が軽減されるが、設計やビジネス要件によっては性能上の理由で意図的に正規化を緩めることもあるため「必ず消える」とは言えません。
Q. 「BCNFがFD保存しない場合はどうする?」
A. 実務ではFD保存を重視して3NFに留めるか、BCNFへ分解した上で失われたFDをアプリケーションロジックやビューで補う運用を検討します。どちらを選ぶかはトレードオフの判断です。
A. 実務ではFD保存を重視して3NFに留めるか、BCNFへ分解した上で失われたFDをアプリケーションロジックやビューで補う運用を検討します。どちらを選ぶかはトレードオフの判断です。
Q. 「4NFへの分解はいつ必要か?」
A. 同一のキーに対して独立に複数値が存在する場合(多値従属性が存在する場合)に4NF分解を検討します。これもFD保存とのトレードオフを検討する必要があります。
A. 同一のキーに対して独立に複数値が存在する場合(多値従属性が存在する場合)に4NF分解を検討します。これもFD保存とのトレードオフを検討する必要があります。
関連キーワード: 正規化、3NF、合成アルゴリズム、最小被覆、情報無損失分解、関数従属性保存、BCNF、4NF、多値従属性

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

