解説
UMLのクラス図で表されたデータモデルを関係データベースに落とし込む際の解釈を問う問題です。図では、部品(部品番号、部品名…)と納入(納入日、数量…)が1対多、メーカ(メーカ番号、メーカ名…)と納入が1対多の関連をもちます。つまり納入は、部品とメーカの多対多の関連を解消する「連関エンティティ(中間表)」の役割を果たします。納入表には、どの部品をどのメーカから納入したかを表すため、部品番号とメーカ番号が外部キーとして含まれます。同一の部品を同一のメーカから別の日に複数回納入できるので、部品番号とメーカ番号だけでは行を一意に識別できず、納入日などを加えて候補キーを構成します。選択肢cは「部品番号とメーカ番号の組みを“納入”表の候補キーの一部にできる」とあり、納入表の主キー(候補キー)に部品番号・メーカ番号が外部キー兼キー属性として含まれうるという正しい解釈なので正解です。多対多を連関エンティティで解消する関係データベース設計の基本を押さえましょう。
なぜ他の選択肢は違うのか
- 選択肢 ア
- 「同一の部品を同一のメーカから複数回納入することは許されない」は誤りです。納入は納入日などをもつため、同じ部品を同じメーカから別の日に複数回納入することは表現可能です。部品番号とメーカ番号の組だけを主キーにすると複数回納入を表せませんが、納入日を加えれば許されるため、この制約は成り立ちません。納入は納入日をもつため、同じ部品を同じメーカから別の日に複数回納入することは表現可能です。部品番号とメーカ番号に納入日を加えれば許されるため、この制約は成り立ちません。
- 選択肢 イ
- 「“納入”表に外部キーは必要ない」は誤りです。納入表は部品表とメーカ表を結び付ける連関エンティティであり、どの部品・どのメーカに対応するかを表すために、部品番号とメーカ番号を外部キーとしてもつ必要があります。外部キーがなければ部品・メーカとの関連を表現できません。納入は部品とメーカを結ぶ連関エンティティであり、どの部品・どのメーカに対応するかを表すために部品番号とメーカ番号を外部キーとしてもつ必要があるため、外部キー不要は誤りです。
- 選択肢 エ
- 「“メーカ”表は、外部キーとして部品番号をもつことになる」は誤りです。1対多の関連では、外部キーは「多」側の表に置かれます。メーカと納入は1対多で納入が「多」側なので、外部キー(メーカ番号)は納入表に置かれます。メーカ表が部品番号を外部キーとしてもつことはありません。1対多の関連では外部キーは『多』側の表に置かれます。メーカと納入は1対多で納入が多側なので、外部キーは納入表に置かれ、メーカ表が部品番号を外部キーにもつことはありません。