応用情報技術者 2009年 春期 午前2 問32
問題文
次の概念データモデルの解釈として、適切なものはどれか。ここで、モデルの記法としてUMLを用いる。

選択肢
ア:従業員が所属していない部署の存在は許されない。
イ:従業員が所属している部署を削除しても、参照整合性は保証される。
ウ:従業員は、同時に複数の部署に所属してもよい。(正解)
エ:どの部署にも所属しない従業員が存在してもよい。
🔒 解説は解答すると表示されます
UML多重度の解釈【午前2解説】
正解の理由
図における多重度は「多重度が書かれた端に隣接するクラスが、相手の1インスタンスに対して何個あり得るか」を示します。今回、部署側(左)に「1..」があり、これは「従業員1人に対して少なくとも1つの部署が対応し得る(=従業員は最低1つの部署に所属する)」ことを意味します。一方、従業員側(右)に「0..」があるのは「部署1つに対して0個以上の従業員が対応し得る(=部署は従業員を持たないこともある)」という意味です。したがって「従業員は同時に複数の部署に所属してもよい」という記述が当てはまり、選択肢ウが正しいです。
矢印(塗りつぶし三角)はナビゲーション(参照方向)を示し、従業員側から部署側へ参照可能であることを表しますが、削除時の参照整合性(カスケード削除や参照禁止など)はこの図だけでは指定されません。
解法ステップ
- 多重度の定義を確認する(「その端に隣接するクラスが、相手の1インスタンスに対して何個あり得るか」)。
- 各端の多重度を「相手クラス1つに対する自クラスの個数」として読み替える。
- 部署側の「1..*」 → 「従業員1人に対して、1個以上の部署」=従業員は少なくとも1部署に所属。
- 従業員側の「0..*」 → 「部署1つに対して、0個以上の従業員」=部署は従業員がゼロでもよい。
- 矢印はナビゲーションを示すだけで、制約(削除時の挙動等)は別に明示されるか設計で決めることを確認する。
- 各選択肢を上の解釈に照らして正誤を判断する。
選択肢別の誤答解説
-
ア: 従業員が所属していない部署の存在は許されない。
誤り。部署側に隣接する多重度は従業員側(相手)に対する値であり、従業員側の多重度が「0..*」であるため、ある部署に従業員がいなくてもよい(部署は従業員0で存在可能)。 -
イ: 従業員が所属している部署を削除しても、参照整合性は保証される。
誤り。図はナビゲーション(参照方向)と多重度を示すが、削除時の参照整合性(参照禁止、NULL化、カスケード削除など)のルールはこのモデルだけでは指定されない。したがって「保証される」と断定できない。 -
ウ: 従業員は、同時に複数の部署に所属してもよい。
正しい。部署側の多重度「1..*」は、従業員1人に対して1個以上の部署が対応し得ることを示すため、複数所属が許される。 -
エ: どの部署にも所属しない従業員が存在してもよい。
誤り。従業員に隣接する多重度が「1..*」であれば、従業員は最低1つの部署に所属する必要があるため、無所属の従業員は許されない。
よくある誤解
- 「多重度はそのクラスが相手に対して何個持てるか」を示すと思い込み、多重度の向き(どの端に書かれているか)を誤読する。実際は「その端に隣接するクラスが、相手の1インスタンスに対して何個あり得るか」を読む必要がある。
- 矢印(ナビゲーション)を見て「参照整合性や削除ルールまで決まる」と誤解する。ナビゲーションは参照可能性を示すのみで、物理的な削除振る舞いは別途指定される場合が多い。
- 「0..* がある側は必ず任意参加(無所属可)」と単純化してしまう。0許容が書かれた側は、相手1つに対して0以上の自クラスがあり得ることを意味するだけで、当該クラス自身の必須性は相手側の多重度で決まる。
補足コラム
- UMLにおける多重度の読み方は設計の基本です。読み違えるとエンティティの必須性(必ず関連を持つか)や最大数の制約を逆に理解してしまい、データベース設計やAPI設計で致命的な実装ミスにつながります。
- ナビゲーション(矢印)は「どちらから参照可能か」を表すため、クラス間の依存方向性を示す際に有用です。永続化層ではこのナビゲーションに基づいて外部キーを持たせることが多いですが、外部キーのON DELETE動作(CASCADE/SET NULL/RESTRICT)は別途設計で決定します。
- 実務上の注意点:UML図をリレーショナルスキーマに落とすとき、各多重度を外部キーのNULL許可や中間テーブルの有無(多対多は中間テーブル)に正しく反映させること。
FAQ
Q. 矢印があると片方向しか関連できないのですか?
A. 矢印はナビゲーション可能な方向を示しますが、設計次第では両方向にアクセス可能に実装できます。UML上で矢印が片方だけなら、少なくとも矢印の向きの参照は明示されています。
A. 矢印はナビゲーション可能な方向を示しますが、設計次第では両方向にアクセス可能に実装できます。UML上で矢印が片方だけなら、少なくとも矢印の向きの参照は明示されています。
Q. 多重度「1..*」は何を強制しますか?
A. 相手の1インスタンスに対して、最低1個以上の対応するインスタンスが存在することを示します。つまり、関連を必須とします(ゼロは許さない)。
A. 相手の1インスタンスに対して、最低1個以上の対応するインスタンスが存在することを示します。つまり、関連を必須とします(ゼロは許さない)。
Q. 多対多の表現はどう読みますか?
A. ある端に「0..」、反対端にも「0..」があれば、相手1つに対して自クラスが0以上複数対応するため多対多になります。実際のDB設計では中間テーブルが必要です。
A. ある端に「0..」、反対端にも「0..」があれば、相手1つに対して自クラスが0以上複数対応するため多対多になります。実際のDB設計では中間テーブルが必要です。
関連キーワード: UML、多重度、ナビゲーション、関係性、概念データモデリング

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

