次の“受注台帳”表を“注文”表と“顧客”表に分解し,第3正規形にしたとき,両方に必要な属性はどれか。
ここで,送付先と支払方法は注文ごとに決めるものとする。
また,表の下線は主キーを表す。
受注台帳(注文番号_,注文年月日,顧客ID,顧客名,顧客住所,品目,数量,送付先,支払方法,受注金額)
正答1
解説
正解は1です。
第3正規形では、主キー以外の属性が、主キー以外の属性に従属する関係(推移的関数従属)を取り除きます。
受注台帳では、顧客名と顧客住所は注文番号ではなく顧客IDによって決まるので、顧客表に分けます。
【選択肢別解説】
1:○ 分解後は、注文表(注文番号、注文年月日、顧客ID、品目、数量、送付先、支払方法、受注金額)と顧客表(顧客ID、顧客名、顧客住所)になります。
注文表の顧客IDは顧客表を参照する外部キーなので、両方の表に必要です。
2:× 顧客名は顧客IDによって決まる属性なので、顧客表だけに置きます。
注文表に残すと、同じ顧客の名前が重複して管理されます。
3:× 問題文に、支払方法は注文ごとに決めるとあります。
注文番号によって決まる属性なので、注文表だけに置きます。
4:× 注文番号は注文表の主キーです。
顧客の情報は注文番号に依存しないので、顧客表には不要です。
【ポイント】
表を分解したとき、両方に残す属性は、表どうしを結び付けるための主キーと外部キーです。
「何によって値が決まるか」を考えて、属性を各表に振り分けます。