問題 No.1773
関係データベースの正規化の文脈において、第3正規化の定義として最も適切なものはどれか。
【正解の解説】
第2正規化を満たしているリレーションにおいて、非キー属性から他の非キー属性への推移的な関数従属を取り除き、別テーブルに分離すること。
これは会社組織で「社員番号から部署名がわかり、さらに部署名から部署の電話番号がわかる」という芋づる式の依存関係を整理する作業に似ています。Aくんのデータを変えたのに部署の電話番号まで連鎖的に変わってしまうような不自然な矛盾を防ぐため、情報をスッキリ小分けにして管理するプロの技です。
スポンサーリンク
【その他の選択肢の解説】
第1正規化を満たしているリレーションにおいて、部分関数従属を取り除き、属性の原子性を満たすように別テーブルに分割すること。
初学者が最も混同しやすい第2正規化の定義とごちゃ混ぜにするための罠です。第2正規化は「主キーの一部に依存する項目(部分関数従属)」を外すのに対し、第3正規化はその次のステップとして「キー以外の項目同士の連鎖(推移的関数従属)」を断ち切る点が決定的な違いです。
第3正規化を満たしているリレーションにおいて、すべての非キー属性が候補キーに対して完全に依存するように別テーブルに分解すること。
第3正規化の定義を説明しているように見せかけて、実は第2正規化の要件を述べた引っ掛け選択肢です。複合主キーの一部分だけに依存している甘えた関係を正すのが第2正規化であり、今回の問題が求める「非キー間のドミノ倒し的な依存関係を断つ第3正規化」とはステージが異なります。
主キー以外のすべての属性が重複を持たないように定義し、すべてのレコードが一意に識別できるようにリレーションを整理すること。
正規化のゴール全体や主キーの存在意義としては正しいものの、第3正規化という特定の段階の定義を聞かれている文脈ではピントが外れています。データの重複をなくすのは正規化全体の目的ですが、今回は「推移的関数従属の排除」という具体的なルールに注目する必要があります。