一つの表で管理されていた受注データを,受注に関する情報と商品に関する情報に分割して,正規化を行った上で関係データベースの表で管理する。
正規化を行った結果の表の組合せとして,最も適切なものはどれか。
ここで,同一商品で単価が異なるときは商品番号も異なるものとする。
また,発注者名には同姓同名はいないものとする。
正答4
解説
正解は4です。
一つの表で管理されていた受注データを、受注の表と商品の表に分けて正規化した結果を選ぶ問題です。
図の受注データには、受注番号、発注者名、商品番号、商品名、個数、単価の6項目があります。
データは、T0001(試験花子、M0001、商品1、5個、3,000)の行を含む3件です。
ほかに、T0002(情報太郎、M0002、商品2、3個、4,000)と、T0003(高度秋子、M0001、商品1、2個、3,000)があります。
各項目が何によって決まるかを考えると、正しい分け方がわかります。
【記述別解説】
受注番号が決まれば、発注者名、商品番号、個数が一つに決まります。
図でも、同じ商品M0001でも受注T0001は5個、T0003は2個であり、個数は受注ごとに決まる項目です。
商品番号が決まれば、商品名と単価が一つに決まります。
問題文に「同一商品で単価が異なるときは商品番号も異なる」とあり、図でもM0001の単価はどちらも3,000です。
したがって、単価は商品の表に置き、受注の表には商品番号を置いて商品の表と結び付けます。
【選択肢別解説】
1:× 受注の表に商品番号がないため、どの受注でどの商品を注文したかがわからなくなります。
また、個数は受注ごとに決まるので、商品の表に置くのは誤りです。
2:× 個数を商品の表に置いている点が誤りです。
同じ商品M0001でも受注によって5個と2個に分かれるため、商品番号だけでは個数が決まりません。
3:× 単価を受注の表に置いている点が誤りです。
単価は商品番号によって決まるため、受注の表に置くと同じ単価が繰り返し記録されます。
これは、正規化で取り除くべき推移的な関数従属が残った状態です。
4:○ 受注の表に受注番号、発注者名、商品番号、個数を置き、商品の表に商品番号、商品名、単価を置いています。
各項目が、それを決める項目と同じ表に配置されており、適切に正規化されています。
【ポイント】
正規化では「その項目は何が決まれば一つに決まるか」を考えます。
決まる元の項目ごとに表を分けると、データの重複や更新時の矛盾を防げます。