データベース設計 (全65問中39問目)
No.39
部品在庫管理台帳における,部品,仕入先,在庫の三つのエンティティの関係をデータモデルとして記述した。エンティティa~cの組合せとして,適切なものはどれか。ここで,1 *は1対多の関連を表す。
出典:平成21年秋期 問30
- [出題歴]
- ソフトウェア開発技術者 H19秋期 問65
分類
テクノロジ系 » データベース » データベース設計
正解
エ
解説
部品在庫管理台帳を見ると、A商会からは少なくともR部品とS部品の2つの部品を仕入れていることがわかります。1つの仕入先が複数の部品に関連しているので、仕入先エンティティから見た部品エンティティの多重度は「多」となります。
また、T部品については少なくともB商店とC商店の2ヶ所から仕入れていることがわかります。1つの部品が複数の仕入先に関連しているので、部品エンティティから見た仕入先エンティティの多重度も「多」となります。
つまり、部品エンティティと仕入先エンティティは「多対多」の関係を持ちます。
多対多の関係は関係データベースとして実装することができない(非正規形になる)ので、連関エンティティという項目を新たに設け、「1対多」の関係2つに分解します。本問では、在庫エンティティが連関エンティティに該当します。したがって、bが在庫エンティティになっている「エ」が正解です。
【別解】
部品在庫管理台帳のレコードを一意に特定するためには {部品コード,仕入先コード,仕入日付} の複合主キーが必要です。第2正規化で主キーの一部について決まる関係 {部品コード→部品名} と {仕入先コード→仕入先名} を別表に分離すると、次の3つの表になります。
部品表(部品コード, 部品名)
在庫表(部品コード, 仕入先コード, 仕入日付, 仕入価格, 在庫数)
仕入先表(仕入先コード, 仕入先名)
主キー側エンティティと外部キー側エンティティ=1対多の関係により、部品表と在庫表=1対多、仕入先表と在庫表=1対多なので、在庫表を介して部品表と仕入先表が関連する形になります。在庫表を間に入れることで、多対多の関係が1対多の関係になり関係データベースで表現することができるようになります。
また、T部品については少なくともB商店とC商店の2ヶ所から仕入れていることがわかります。1つの部品が複数の仕入先に関連しているので、部品エンティティから見た仕入先エンティティの多重度も「多」となります。
つまり、部品エンティティと仕入先エンティティは「多対多」の関係を持ちます。
多対多の関係は関係データベースとして実装することができない(非正規形になる)ので、連関エンティティという項目を新たに設け、「1対多」の関係2つに分解します。本問では、在庫エンティティが連関エンティティに該当します。したがって、bが在庫エンティティになっている「エ」が正解です。
【別解】
部品在庫管理台帳のレコードを一意に特定するためには {部品コード,仕入先コード,仕入日付} の複合主キーが必要です。第2正規化で主キーの一部について決まる関係 {部品コード→部品名} と {仕入先コード→仕入先名} を別表に分離すると、次の3つの表になります。
部品表(部品コード, 部品名)
在庫表(部品コード, 仕入先コード, 仕入日付, 仕入価格, 在庫数)
仕入先表(仕入先コード, 仕入先名)
主キー側エンティティと外部キー側エンティティ=1対多の関係により、部品表と在庫表=1対多、仕入先表と在庫表=1対多なので、在庫表を介して部品表と仕入先表が関連する形になります。在庫表を間に入れることで、多対多の関係が1対多の関係になり関係データベースで表現することができるようになります。