問題プレビューID: 8439e5e9

問 27

関係 “注文記録” の属性間に ①〜⑥ の関数従属性があり,それに基づいて第 3 正規形まで正規化を行って,“商品”,“顧客”,“注文”,“注文明細” の各関係に分解した。関係 “注文明細” として,適切なものはどれか。ここで,{X,Y}\{X, Y\} は,属性 XX と YY の組みを表し,X→YX \rightarrow Y は,XX が YY を関数的に決定することを表す。また,実線の下線は主キーを表す。

注文記録 (注文番号‾\underline{\text{注文番号}}, 注文日, 顧客番号, 顧客名, 商品番号, 商品名, 数量, 販売単価)

〔関数従属性〕 ① 注文番号 →\rightarrow 注文日 ② 注文番号 →\rightarrow 顧客番号 ③ 顧客番号 →\rightarrow 顧客名 ④ {注文番号, 商品番号} →\rightarrow 数量 ⑤ {注文番号, 商品番号} →\rightarrow 販売単価 ⑥ 商品番号 →\rightarrow 商品名

解説

正規化の手順は以下の通りです。

  1. 第 1 正規形: 繰り返し項目を排除する(既に満たしていると仮定)。
  2. 第 2 正規形: 部分関数従属を排除する(主キーの一部に依存する項目を別表に分ける)。 主キー候補は {注文番号, 商品番号} です。
    • 注文番号にのみ依存する項目: 注文日, 顧客番号, 顧客名(①②)→\rightarrow 「注文」関係へ
    • 商品番号にのみ依存する項目: 商品名(⑥)→\rightarrow 「商品」関係へ
    • {注文番号, 商品番号} の両方に依存する項目: 数量, 販売単価(④⑤)→\rightarrow 「注文明細」関係へ
  3. 第 3 正規形: 推移的関数従属を排除する。
    • 「注文」関係において、注文番号 →\rightarrow 顧客番号 →\rightarrow 顧客名(②③)となっているため、顧客情報を「顧客」関係に分けます。

結果としての関係は以下の通りです。

  • 顧客 (顧客番号‾\underline{\text{顧客番号}}, 顧客名)
  • 注文 (注文番号‾\underline{\text{注文番号}}, 注文日, 顧客番号)
  • 商品 (商品番号‾\underline{\text{商品番号}}, 商品名)
  • 注文明細 (注文番号,商品番号‾\underline{\text{注文番号}, \text{商品番号}}, 数量, 販売単価)

したがって、正解は「エ」です。