平成29年度 秋期 システムアーキテクト試験 午前Ⅱ 問21
UMLを用いて表した図のデータモデルを基にして設計したテーブルのうち,適切なものはどれか。ここで,“担当委員会ID”と“所属委員会ID”は“委員会ID”を参照する外部キーである。“役員ID”と“委員ID”は“生徒ID”を参照する外部キーである。実線の下線は主キー,破線の下線は外部キーを表す。

図の説明テキスト
UMLクラス図によるデータモデル。
- クラス「委員会」: 属性「委員会名」を持つ(左側に配置)。
- クラス「生徒」: 属性「氏名」を持つ(右側に配置)。
- 上部の関連「◀担当する」(生徒から委員会への向き):
- 「委員会」側: 多重度「0..1」、役割名「担当委員会」
- 「生徒」側: 多重度「1..*」、役割名「役員」
- 下部の関連「◀所属する」(生徒から委員会への向き):
- 「委員会」側: 多重度「0..*」、役割名「所属委員会」
- 「生徒」側: 多重度「1..*」、役割名「委員」
解答・解説
正解: ア. 委員会 (委員会ID, 委員会名)
所属関連 (所属委員会ID, 委員ID)
生徒 (生徒ID, 氏名, 担当委員会ID)
正解は ア です。
データモデルの読み取りとテーブル設計
UMLのクラス図における多重度を確認し、それぞれの関連をどのようにテーブル(関係スキーマ)へ変換するかを考えます。
「担当する」関連(1対多の関連)
- 「委員会(担当委員会)」側の多重度が
0..1、「生徒(役員)」側の多重度が1..*です。 - これは、1人の生徒(役員)が担当する委員会は0個または1個であり、1つの委員会には1人以上の生徒(役員)がいるという1対多の関係を表しています。
- 1対多の関係をテーブルに変換する場合、「多」側である「生徒」テーブルに、「1」側である「委員会」の主キーを参照する外部キー(担当委員会ID)を持たせます(担当しない生徒の場合はNULLになります)。
- 「委員会(担当委員会)」側の多重度が
「所属する」関連(多対多の関連)
- 「委員会(所属委員会)」側の多重度が
0..*、「生徒(委員)」側の多重度が1..*です。 - これは、1人の生徒が0個以上の複数の委員会に所属でき、1つの委員会には1人以上の生徒(委員)が所属するという多対多の関係を表しています。
- 多対多の関係は、一方のテーブルに外部キーを持たせるだけでは第1正規形(繰り返し項目を持たない)を満たせないため、両者の主キーを外部キーとして組み合わせた関連テーブル(中間テーブル / 連関エンティティ)を新たに設ける必要があります。
- したがって、複合主キー(かつそれぞれが外部キー)として
(所属委員会ID, 委員ID)を持つ「所属関連」テーブルを作成します。
- 「委員会(所属委員会)」側の多重度が
以上より、以下の3つのテーブル構成となる ア が適切です。
- 委員会 (主キー:委員会ID, 属性:委員会名)
- 所属関連 (複合主キー・外部キー:所属委員会ID, 委員ID)
- 生徒 (主キー:生徒ID, 属性:氏名, 外部キー:担当委員会ID)
各選択肢の解説
- ア:正解です。「担当する(1対多)」を生徒テーブルの外部キーで表現し、「所属する(多対多)」を独立した関連テーブルで表現しています。
- イ:1対多である「担当する」に中間テーブル(役員関連)を用い、多対多である「所属する」を生徒テーブルの単一の外部キー(所属委員会ID)で表現してしまっているため不適切です。これでは1人の生徒が複数の委員会に所属できません。
- ウ・エ:多対多である「所属する」や、1つの委員会に複数存在する「委員ID」「役員ID」を関連テーブルを使わずに直接相手側のテーブルの外部キーとして持たせようとしており、多重度の制約(1つの委員会に複数の委員・役員がいること、1人の生徒が複数の委員会に所属できること)を表現できないため不適切です。