スポンサーリンク

問題の解答・解説ページ

このページは解説の閲覧モードです。
実力試しをしたい方は、下のボタンからクイズに挑戦してください!

この問題をクイズ形式で解く
問題 No.5790
ある企業では、社員ごとの保有スキルと、プロジェクトごとの必要スキルを管理するリレーショナルデータベースを設計している。このデータベースにおいて、社員番号、プロジェクトコード、および保有スキルの3つの属性間に、社員番号とプロジェクトコードの組み合わせに対して保有スキルが一意に決まる関係と、プロジェクトコードに対して保有スキルが一意に決まる関係、さらに社員番号に対して保有スキルが一意に決まる関係が複数存在し、これらが原因でデータの冗長性や更新異常が発生している。この関係を排除し、値の重複や依存関係を適切に分離してデータの整合性を保つために適用すべき正規化として、最も適切なものはどれか。

【正解の解説】

第5正規化

これは巨大なパズルを綺麗にピース分けする作業に例えられます。社員とプロジェクト、そしてスキルのような複雑に絡み合った関係性を、それぞれ独立したシンプルな表へと分解します。日常で言えば、複数の担当者と複数の仕事内容が複雑に交差するスケジュール表を、誰が見ても矛盾が起きないよう綺麗に整理整頓する感覚です。これにより、データの二重登録や消去ミスなどの面倒な更新異常を根本からシャットアウトできるのです。

スポンサーリンク

【その他の選択肢の解説】

第2正規化

第2正規化は、複合主キーの一部分だけに依存している甘えん坊な列を見つけて別表に追い出すステップです。例えば「社員番号とプロジェクトコードが主キーなのに、社員名が社員番号だけで決まるから追い出そう」というレベルの話です。本問のように3つの属性が複雑に絡み合う多値従属のケースでは歯が立たず、試験で出題される「部分関数従属と多値従属の混同を狙う典型的なひっかけパターン」なので注意してください。

第3正規化

第3正規化は「AならばB、BならばC」というドミノ倒しのような依存関係を断ち切るためのものです。例えば「社員番号から部署コードがわかり、部署コードから部署名がわかる」という無駄な連鎖を解消します。本問で問われているのは、主キーと複数の属性間に生じているもっと複雑な「結びつきの絡まり」であり、推移的関数従属の解消を目的とする第3正規化では対応しきれない領域となります。

ボイスコッド正規化

ボイスコッド正規化は、第3正規化よりもさらに厳しく「矢印の左側(決定子)は必ず候補キーでなければならない」というルールを適用します。関数従属の複雑な絡みには有効ですが、本問の核心である「3つ以上の属性間に生じる多値従属(データが独立して複数存在してしまう現象)」を解消するためには不十分であり、より高次の第5正規化の出番となります。初学者がアルファベットの響きや難解さから選びがちな、出題者の罠となりやすい選択肢です。