項目aの値が決まれば項目bの値が一意に定まることを,a→bで表す。
例えば,社員番号が決まれば社員名が一意に定まるという表現は,社員番号→社員名である。
この表記法に基づいて,図のような関係が成立している項目a〜jを,関係データベース上の三つのテーブルで定義する組合せとして,適切なものはどれか。
正答2
解説
正解は2です。
関数従属性を基に、項目を正規化したテーブルに分ける問題です。
図からは次の関数従属性が読み取れます。
aからb、c、d、eへ矢印が出ているので、aが決まればb、c、d、eが決まります。
bからf、g、hへ矢印が出ているので、bが決まればf、g、hが決まります。
eからi、jへ矢印が出ているので、eが決まればi、jが決まります。
【選択肢別解説】
1:× テーブル1がaだけで、テーブル2のb〜eにはそれらを決める項目aが含まれていません。
テーブル同士を結び付ける項目がなく、元の関係を再現できません。
2:○ テーブル1{a,b,c,d,e}はaを主キーとし、aで決まる項目を集めています。
テーブル2{b,f,g,h}はbを主キー、テーブル3{e,i,j}はeを主キーとしています。
テーブル1のbとeが外部キーとなってほかのテーブルと結び付くので、推移的な従属が取り除かれた第3正規形になっています。
3:× テーブル1にaとf、g、hが同居していますが、f、g、hはbを経由してaに従属する推移的従属です。
また、c、dはaで決まる項目なのに、テーブル2にaが含まれておらず、どのaの値かが分かりません。
4:× テーブル1{a,c,d}にbとeが含まれていません。
aとb、aとeの対応が失われるので、元の関係を再現できません。
【ポイント】
第3正規形では、主キー以外の項目に従属する項目(推移的従属)を別のテーブルに分けます。
分けたテーブルの主キーを元のテーブルに外部キーとして残すことで、結合して元の関係を復元できます。