H22 AM2   問9 解説に誤り

Nさん  
(No.1)
下記が正しいと思います。


第1、第2、第3正規形を満たすための条件は下記の通り。

第1正規形   すべての属性が単一値でなければならない。
第2正規形   第1正規形であり、全ての非キー属性は、全ての候補キーに部分関数従属していない。
第3正規形   第2正規形であり、全ての非キー属性は、全ての候補キーに推移的関数従属していない。

顧客は1回の注文で一つ以上の商品を注文できるのであり、注文毎に同じ商品の行はできないので、
候補キーは、{受注番号, 商品番号}、{受注番号, 商品名} である事が分かる。

全ての属性は単一値であるので、第1正規形の条件を満たしている。

部分関数従属性があるか考える。
非キー属性である {商品名, 単価 } が、候補キーの一部である商品番号に部分関数従属している。
また、非キー属性である {顧客コード, 顧客名, 受注日} が、
候補キーの一部である受注番号に部分関数従属している。
従って、第2正規形ではない。

部分関数従属している部分を分解する事で、第2正規形にする事ができる。
分解後のテーブルは、下記の通りです。

受注(受注番号(PK), 顧客コード, 顧客名, 受注日)
受注伝票(受注番号(PK), 商品コード(PK), 受注数, 受注金額)
商品(商品コード(PK), 商品名, 単価)

推移的関数従属性があるか考える。
新しく作成したテーブル"受注"に、受注番号→顧客コード→顧客名という推移的関数従属がある事が分かる。
従って、第3正規形ではない。

推移的関数従属している部分を分解する事で、第3正規形にする事ができる。
分解後のテーブルは、下記の通りです。

受注(受注番号(PK), 顧客コード(FK), 受注日)
受注伝票(受注番号(PK), 商品コード(PK), 受注数, 受注金額)
商品(商品コード(PK), 商品名, 単価)
顧客(顧客コード(PK), 顧客名)

これで、第3正規形にする事ができました。
全てのテーブルの属性は単一値であり、
部分関数従属性、推移的関数従属性はありません。

テーブルは、4つの表に分解される。
2023.10.07 15:24
ピノッキさん 
(No.2)
問題と解説みてきましたが、スレ主さんのおっしゃっている解説文もあっていると思いますし、
該当の解説文もあってるかと思いました。


具体的に、どこが誤りだと思ったんですか?
2023.10.07 15:48

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop