問94
頻出度★★★
商品の仕入状況を管理している関係データベースの“仕入一覧”表を正規化して,“仕入”表と“商品”表に分割したい。分割後の二つの表に共通して必要なフィールドとして,最も適切なものはどれか。ここで,仕入れは一度に一つの商品だけを仕入れることとし,仕入番号で一意に識別できる。また,商品は商品番号で一意に識別できる。 仕入一覧
| 仕入番号 | 商品番号 | 商品名 | 個数 | 単価 | 支払方法 | 納品日 |
|---|
この問題の解説と、これまでの解答の記録です。
商品の仕入状況を管理している関係データベースの“仕入一覧”表を正規化して,“仕入”表と“商品”表に分割したい。分割後の二つの表に共通して必要なフィールドとして,最も適切なものはどれか。ここで,仕入れは一度に一つの商品だけを仕入れることとし,仕入番号で一意に識別できる。また,商品は商品番号で一意に識別できる。 仕入一覧
| 仕入番号 | 商品番号 | 商品名 | 個数 | 単価 | 支払方法 | 納品日 |
|---|
仕入番号は「仕入」表を一意に識別する主キーで、「仕入」表だけに属します。商品は商品番号で識別されるため「商品」表に仕入番号を置く意味はなく、両表の共通フィールドにはなりません。
支払方法は個々の仕入れに付随する情報(仕入番号に従属)で、「仕入」表だけに入ります。商品そのものの属性ではないので「商品」表には現れず、共通フィールドではありません。
正解 「仕入一覧」表を分割すると、商品番号で一意に定まる「商品」表(商品番号・商品名・単価)と、仕入番号で一意に定まる「仕入」表(仕入番号・個数・支払方法・納品日)になります。ただしこのままでは「どの仕入でどの商品を仕入れたか」の対応が失われ、元の表を復元できません。そこで「仕入」表側に商品番号を外部キーとして持たせます。すると商品番号は「商品」表では主キー、「仕入」表では外部キーとして両方の表に現れ、これを手掛かりに二つの表を結合して元の「仕入一覧」を再現できます。したがって両表に共通して必要なフィールドは商品番号(ウ)です。
商品名は商品番号に従属する商品固有の属性で、「商品」表だけに入ります。二つの表を結び付けるキーではないため、共通して持たせるフィールドとしては不適切です。