UMLを用いて表した図のデータモデルのa,bに入れる多重度はどれか。
〔条件〕
(1) 部門には1人以上の社員が所属する。
(2) 社員はいずれか一つの部門に所属する。
(3) 社員が部門に所属した履歴を所属履歴として記録する。
(図:部門-[a]-所属履歴-[b]-社員のクラス図。部門側1,社員側1)
正答4
解説
正解は4です。
図のクラス図では、部門と所属履歴の関連の部門側に1、所属履歴側に空欄a、所属履歴と社員の関連の所属履歴側に空欄b、社員側に1が書かれています。
多重度は「相手側のインスタンス1つに対して、こちら側がいくつ対応するか」を表します。
【空欄の考え方】
aは、部門1つに対応する所属履歴の数です。
条件(1)より部門には1人以上の社員が所属するので、所属履歴は少なくとも1件あり、a=1..*です。
bは、社員1人に対応する所属履歴の数です。
条件(2)より社員は必ずいずれかの部門に所属するので、所属履歴は少なくとも1件あります。
異動すれば履歴が増えるので、b=1..*です。
【選択肢別解説】
1:× a=0..*では所属社員のいない部門を認めてしまい、条件(1)に反します。
b=0..*も条件(2)に反します。
2:× b=1..*は正しいものの、a=0..*が条件(1)の「1人以上の社員が所属」に反します。
3:× a=1..*は正しいものの、b=0..*ではどの部門にも所属しない社員を認めてしまい、条件(2)に反します。
4:○ 部門にも社員にも所属履歴が必ず1件以上あり、複数件にもなり得るので、a、bともに1..*です。
【ポイント】
多重度の「0..*」は0以上、「1..*」は1以上を表します。
「必ず存在するか(下限が0か1か)」と「複数あり得るか(上限が1か*か)」を条件文から一つずつ読み取りましょう。