平成29年度 秋期 午前Ⅱ 問21
データベース
外部キーに関する問題
UMLを用いて表した図のデータモデルを基にして設計したテーブルのうち,適切なものはどれか。ここで,“担当委員会ID”と“所属委員会ID”は“委員会ID”を参照する外部キーである。“役員ID”と“委員ID”は“生徒ID”を参照する外部キーである。実線の下線は主キー,破線の下線は外部キーを表す。
データモデル(UMLのクラス図):
[委員会]属性:委員会名 [生徒] 属性:氏名 関連「担当する」(◀の向き=生徒から委員会へ読む) 委員会側:多重度 0..1,関連端名 担当委員会 生徒側 :多重度 1..*,関連端名 役員 関連「所属する」(◀の向き=生徒から委員会へ読む) 委員会側:多重度 0..*,関連端名 所属委員会 生徒側 :多重度 1..*,関連端名 委員
選択肢の下線(下線):
- ア委員会(委員会ID,委員会名) 所属関連(所属委員会ID,委員ID) 生徒(生徒ID,氏名,担当委員会ID〔破線の下線〕)
- イ委員会(委員会ID,委員会名) 役員関連(担当委員会ID,役員ID) 生徒(生徒ID,氏名,所属委員会ID〔破線の下線〕)
- ウ委員会(委員会ID,委員会名,委員ID〔破線の下線〕) 生徒(生徒ID,氏名,所属委員会ID〔破線の下線〕,担当委員会ID〔破線の下線〕)
- エ委員会(委員会ID,委員会名,役員ID〔破線の下線〕) 生徒(生徒ID,氏名,所属委員会ID〔破線の下線〕)
答えと解説を見る
✓ これが正解ア委員会(委員会ID,委員会名) 所属関連(所属委員会ID,委員ID) 生徒(生徒ID,氏名,担当委員会ID〔破線の下線〕)
解説
一対多は生徒に外部キー、多対多は所属関連テーブルに分けます。
関連の多重度からテーブルの分け方を決めます。担当するの関連は、生徒側が 1..*、委員会側が 0..1 なので、一人の生徒が担当する委員会は多くても一つです。このような一対多の関連は、多の側である生徒テーブルに、相手を指す外部キーとして担当委員会ID を持たせれば表せます。一方、所属するの関連は委員会側が 0..*、生徒側が 1..* の多対多なので、どちらかのテーブルに外部キーを一つ置くだけでは表せません。そこで、所属委員会ID と委員ID を組にして主キーとする所属関連テーブルを別に設けます。見分けるときは、多重度の上限が両側とも * になる関連は関連用のテーブルに分ける、と覚えておきます。
ほかの選択肢はなぜ違うのか
- イ委員会(委員会ID,委員会名) 役員関連…:役員関連テーブルを別に設けていますが、担当するの関連は一人の生徒が多くても一つの委員会しか担当しない関係なので、別の表は必要ありません。逆に所属するの関連を生徒の外部キー一つで表しており、複数の委員会への所属を記録できません。
- ウ委員会(委員会ID,委員会名,委員ID〔…:生徒テーブルの所属委員会ID 一つでは、一人の生徒が複数の委員会に所属することを記録できません。委員会テーブルの委員ID 一つでも、一つの委員会に複数の委員がいることを記録できず、多対多を表の分割なしで扱おうとしています。
- エ委員会(委員会ID,委員会名,役員ID〔…:委員会テーブルに役員ID を置くと、一つの委員会に役員を一人しか記録できず、生徒側の多重度 1..* を満たせません。さらに所属するの関連を生徒の外部キー一つで表しているので、複数の委員会への所属も記録できません。
出典:平成29年度 秋期 システムアーキテクト試験 午前Ⅱ 問21
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)