データベーススペシャリスト 2011年 午前2 問01
問題文
社員と年の関連が次の条件を満たす場合を UML のクラス図で記述するとき、a, b に入る多重度の適切な組合せはどれか。ここで、年クラスのインスタンスは毎年存在する。
[条件]
(1) すべての社員は入社年を特定できる。
(2)年によっては社員が入社しないこともある。


選択肢
ア:
イ:(正解)
ウ:
エ:
🔒 解説は解答すると表示されます
UML関連の多重度【午前2解説】
正解の理由
条件(1)「すべての社員は入社年を特定できる」から、各社員に対して入社年が必ず1つ存在する必要があり、社員側から見て関連付けられる年の個数は正確に1つ、すなわち になります。一方、条件(2)「年によっては社員が入社しないこともある」から、ある年に紐づく社員はゼロ人であってもよく、逆に複数人であってもよいので、年から見た社員数は です。
UML の配置規則に従うと、クラス図の線上で「a」は年側から見た(=年に対応する社員数)多重度を、「b」は社員側から見た(=社員に対応する年の数)多重度を表します。したがって a = 、b = を示す選択肢、すなわち イ が条件を満たします。
解法ステップ
- 多重度の意味を確認する:線上のラベルは「そのラベルに近いクラスが、反対側クラスのインスタンスに対していくつ関係を持てるか」を示す。
- ラベルが「社員」側近くなら「その年に何人の社員がいるか(年→社員)」を示す。
- ラベルが「年」側近くなら「その社員に対して何年が対応するか(社員→年)」を示す。
- 条件を各視点に当てはめる:
- (1)「すべての社員は入社年を特定できる」→ 社員1人につき入社年は必ず1つ → 社員→年 は 。
- (2)「年によっては社員が入社しない」→ 年によっては社員数が0でよい → 年→社員 は 。
- ラベル a, b に対応付ける:図で a は社員側近傍(年→社員)、b は年側近傍(社員→年)なので a = 、b = → イ。
選択肢別の誤答解説
-
ア(a: 、b: )
b が は「社員が入社年を持たない(0)可能性」を許すため、条件(1)に反します。条件(1)は各社員に必ず入社年があることを要求するため不適。 -
ウ(a: 、b: )
a が は「どの年にも必ず最低1人は入社する」ことを意味するため、条件(2)(年によっては入社しないこともある)に矛盾します。さらに b の は条件(1)にも反します。従って不適。 -
エ(a: 、b: )
b = は条件(1)に合致しますが、a = は「すべての年に最低1人の入社がある」と読み取られるため条件(2)と矛盾します。したがって不適。 -
正しい組合せは a が「年から見た社員数(年→社員)」、b が「社員から見た年数(社員→年)」で考えた結果、a = 、b = を満たす イ です。
よくある誤解
- 多重度の方向を取り違える:ラベルがどちらのクラスに近いかで「何が何を表すか」が逆になる。多重度は「そこに書かれた方が、反対側のインスタンスをいくつ持てるか」を示す点を必ず確認すること。
- 「必ず存在する」という語感の混同:条件「社員は存在する」「年は毎年存在する」といった前提と、多重度で表す「ある年に何人の社員がいるか」などの数量的制約は別物。問題文の条件を「どの視点(年または社員)から見た制約か」で整理する。
補足コラム
- UML の多重度表記の意味(簡潔)
- または
*:ゼロ以上(任意の数) - :1以上(少なくとも1つ)
- または単に
1:ちょうど1つ - :最大1つ(オプション)
- または
- 実務的には「入社年」のように一対一で確定する属性は、関連を使う代わりに社員クラスの属性(hireYear: YearType)で表現する場合もありますが、年クラスに意味(統計や履歴管理など)があり年インスタンスが独立して扱われる設計なら関連+多重度で表すのが適切です。
FAQ
Q. ラベル a, b が線上でどちら側に寄っているか分かりにくいときは?
A. ラベルがどちらのクラスに近いかを基準にし、近い側のラベルは「そのクラスが反対側クラスのインスタンスをいくつ持てるか」を表す、と覚えてください。
A. ラベルがどちらのクラスに近いかを基準にし、近い側のラベルは「そのクラスが反対側クラスのインスタンスをいくつ持てるか」を表す、と覚えてください。
Q. 「年クラスのインスタンスは毎年存在する」が多重度にどう影響しますか?
A. これは「年というインスタンス自体は常にある(年が空になることはない)」という前提で、年側に社員が0人という許容()を矛盾させません。むしろ「年が存在するが入社がない年があり得る」ことを明示しています。
A. これは「年というインスタンス自体は常にある(年が空になることはない)」という前提で、年側に社員が0人という許容()を矛盾させません。むしろ「年が存在するが入社がない年があり得る」ことを明示しています。
Q. 社員が過去の複数年にまたがる入社情報を持つ場合は?
A. その場合は社員→年の多重度 b を や にする必要があります(仕様に応じて設計変更)。
A. その場合は社員→年の多重度 b を や にする必要があります(仕様に応じて設計変更)。
関連キーワード: 多重度、クラス図、UML、入社年、関連の方向性

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

