平成29年度 秋期 システムアーキテクト試験 午前Ⅱ 問21

UMLを用いて表した図のデータモデルを基にして設計したテーブルのうち,適切なものはどれか。ここで,“担当委員会ID”と“所属委員会ID”は“委員会ID”を参照する外部キーである。“役員ID”と“委員ID”は“生徒ID”を参照する外部キーである。実線の下線は主キー,破線の下線は外部キーを表す。

UMLクラス図によるデータモデル
図の説明テキスト

UMLクラス図によるデータモデル。

  • クラス「委員会」: 属性「委員会名」を持つ(左側に配置)。
  • クラス「生徒」: 属性「氏名」を持つ(右側に配置)。
  • 上部の関連「◀担当する」(生徒から委員会への向き):
    • 「委員会」側: 多重度「0..1」、役割名「担当委員会」
    • 「生徒」側: 多重度「1..*」、役割名「役員」
  • 下部の関連「◀所属する」(生徒から委員会への向き):
    • 「委員会」側: 多重度「0..*」、役割名「所属委員会」
    • 「生徒」側: 多重度「1..*」、役割名「委員」
解答・解説

正解: ア. 委員会 (委員会ID, 委員会名)
所属関連 (所属委員会ID, 委員ID)
生徒 (生徒ID, 氏名, 担当委員会ID)

正解は ア です。

データモデルの読み取りとテーブル設計

UMLのクラス図における多重度を確認し、それぞれの関連をどのようにテーブル(関係スキーマ)へ変換するかを考えます。

  1. 「担当する」関連(1対多の関連)

    • 「委員会(担当委員会)」側の多重度が 0..1、「生徒(役員)」側の多重度が 1..* です。
    • これは、1人の生徒(役員)が担当する委員会は0個または1個であり、1つの委員会には1人以上の生徒(役員)がいるという1対多の関係を表しています。
    • 1対多の関係をテーブルに変換する場合、「多」側である「生徒」テーブルに、「1」側である「委員会」の主キーを参照する外部キー(担当委員会ID)を持たせます(担当しない生徒の場合はNULLになります)。
  2. 「所属する」関連(多対多の関連)

    • 「委員会(所属委員会)」側の多重度が 0..*、「生徒(委員)」側の多重度が 1..* です。
    • これは、1人の生徒が0個以上の複数の委員会に所属でき、1つの委員会には1人以上の生徒(委員)が所属するという多対多の関係を表しています。
    • 多対多の関係は、一方のテーブルに外部キーを持たせるだけでは第1正規形(繰り返し項目を持たない)を満たせないため、両者の主キーを外部キーとして組み合わせた関連テーブル(中間テーブル / 連関エンティティ)を新たに設ける必要があります。
    • したがって、複合主キー(かつそれぞれが外部キー)として (所属委員会ID, 委員ID) を持つ「所属関連」テーブルを作成します。

以上より、以下の3つのテーブル構成となる ア が適切です。

  • 委員会 (主キー:委員会ID, 属性:委員会名)
  • 所属関連 (複合主キー・外部キー:所属委員会ID, 委員ID)
  • 生徒 (主キー:生徒ID, 属性:氏名, 外部キー:担当委員会ID)

各選択肢の解説

  • ア:正解です。「担当する(1対多)」を生徒テーブルの外部キーで表現し、「所属する(多対多)」を独立した関連テーブルで表現しています。
  • イ:1対多である「担当する」に中間テーブル(役員関連)を用い、多対多である「所属する」を生徒テーブルの単一の外部キー(所属委員会ID)で表現してしまっているため不適切です。これでは1人の生徒が複数の委員会に所属できません。
  • ウ・エ:多対多である「所属する」や、1つの委員会に複数存在する「委員ID」「役員ID」を関連テーブルを使わずに直接相手側のテーブルの外部キーとして持たせようとしており、多重度の制約(1つの委員会に複数の委員・役員がいること、1人の生徒が複数の委員会に所属できること)を表現できないため不適切です。

Spineチーム