顧客名と住所,商品名と単価,顧客が注文した商品の個数と注文した日付を関係データベースで管理したい。正規化された表として,適切なものはどれか。ここで,下線は主キーを表し,顧客名や商品名には,それぞれ同一のものがあるとする。
- ア顧客 | 顧客番号 | 顧客名 | 住所 | |---|---|---| 商品 | 商品番号 | 商品名 | 単価 | |---|---|---| 注文 | 注文番号 | 顧客番号 | 商品番号 | 個数 | 日付 | |---|---|---|---|---| (下線は主キー:顧客番号,商品番号,注文番号)
- イ顧客 | 顧客番号 | 顧客名 | 住所 | |---|---|---| 商品 | 商品番号 | 商品名 | 単価 | |---|---|---| 注文 | 注文番号 | 顧客名 | 商品名 | 個数 | 日付 | |---|---|---|---|---| (下線は主キー:顧客番号,商品番号,注文番号)
- ウ顧客 | 顧客番号 | 顧客名 | 住所 | 日付 | |---|---|---|---| 注文 | 注文番号 | 顧客名 | 商品名 | 単価 | 個数 | |---|---|---|---|---| (下線は主キー:顧客番号,注文番号)
- エ商品 | 商品番号 | 商品名 | 単価 | 個数 | |---|---|---|---| 注文 | 注文番号 | 商品番号 | 顧客名 | 住所 | 日付 | |---|---|---|---|---| (下線は主キー:商品番号,注文番号)
正解と解説を見る
正解
ア 顧客 | 顧客番号 | 顧客名 | 住所 | |---|---|---| 商品 | 商品番号 | 商品名 | 単価 | |---|---|---| 注文 | 注文番号 | 顧客番号 | 商品番号 | 個数 | 日付 | |---|---|---|---|---| (下線は主キー:顧客番号,商品番号,注文番号)
正解は,顧客表(顧客番号,顧客名,住所),商品表(商品番号,商品名,単価),注文表(注文番号,顧客番号,商品番号,個数,日付)に分割し,それぞれ主キーで管理する構成である。この構成では顧客名や商品名を注文表に重複して持たせず,顧客番号・商品番号という代理キー(外部キー)で参照する正規化がなされており,同一の顧客名や商品名が存在しても矛盾なく管理できる。他の選択肢は,注文表に顧客名や商品名をそのまま格納していたり,顧客表に注文の日付を含めていたりするため,データの重複や更新時の不整合(更新異常)が生じ,正規化されているとはいえない。