基本情報技術者 2018年 秋期 午前(科目A) 問26
問題文
UMLを用いて表した図のデータモデルのa, bに入れる多重度はどれか。
〔条件〕
(1) 部門には1人以上の社員が所属する。
(2) 社員はいずれか一つの部門に所属する。
(3) 社員が部門に所属した履歴を所属履歴として記録する。


選択肢
ア:
イ:
ウ:
エ:(正解)
UMLを用いて表した図のデータモデルのa, bに入れる多重度はどれか。【午前2 解説】
要点まとめ
- 結論:a, b はともに 1..* である(各部門・各社員に対して所属履歴が一件以上存在するため)。
- 根拠:条件(1)で部門は少なくとも一人の社員を持ち、条件(2)で社員は必ず一つの部門に所属するので履歴は双方に1件以上紐づく。
- 差がつくポイント:線上の「1」がどちらのクラスに対する多重度を示すかを誤読せず、履歴(履歴テーブル)の役割を踏まえて読み取ること。
正解の理由
UMLの多重度は、線上で示された数値が近傍のクラス(すなわちそのクラスに対する多重度)を表します。図では、
- 部門側近傍に「1」がある → 所属履歴から見た部門は必ず1つ(所属履歴レコードは1つの部門に属する)。
- 社員側近傍に「1」がある → 所属履歴から見た社員は必ず1人(所属履歴レコードは1人の社員に属する)。 一方、部門に対しては複数の所属履歴(過去の履歴や複数社員分)が存在し得るため、部門→所属履歴の多重度 a は 1..、同様に社員→所属履歴の多重度 b も 1.. となります。したがって a:1..、b:1.. が正答です。
よくある誤解
- 「線の近くの '1' が反対側の多重度を示す」と誤解して逆に読むミス。UMLでは文字が置かれた近傍のクラスに関する多重度です。
- 履歴を「オプション(0件可)」と考えてしまう誤り。条件(2)の「社員はいずれか一つの部門に所属する」は少なくとも1件の履歴が存在することを意味します。
- 履歴と「現在の所属」を混同すること。履歴テーブルは過去・現在の履歴を記録するので一人当たり複数レコードが存在し得ます。
解法ステップ
- 図の各多重度表記がどのクラスに対するものかを確認する(近傍に置かれた数がそのクラスの多重度)。
- 条件文を「クラス間の1対多・多対1・必須か任意か」に翻訳する。
- 所属履歴が「履歴」を兼ねる点を考慮し、部門・社員それぞれに対して履歴が1件以上あるか検討する。
- 選択肢と照合して一致する多重度を選ぶ。
選択肢別の誤答解説
- ア(a:0..、b:0..)
→ 誤り。部門・社員いずれも「少なくとも1件の所属」が条件であるため、0..*(ゼロ許容)は条件に反します。 - イ(a:0..、b:1..)
→ 誤り。社員側は1..*と合うが、部門側が0..*となっており、条件(1)「部門には1人以上の社員が所属する」に反します。 - ウ(a:1..、b:0..)
→ 誤り。部門側は1..*で合っているが、社員側が0..*であり、条件(2)「社員はいずれか一つの部門に所属する」を満たしません。 - エ(a:1..、b:1..)
→ 正解。部門も社員も少なくとも1件の所属履歴が存在するため、双方とも 1..* が適切です。
補足コラム
所属履歴は「アソシエーションを表す独立したクラス(連結エンティティ)」として扱われており、履歴管理や時系列データの保存に適したモデリングです。UMLではこのような中間エンティティを用いることで、同一社員が過去に複数部門を渡り歩いた履歴や、部門ごとの複数社員を自然に表現できます。実装時は「開始日」「終了日」をキーに時点検索や現在所属の抽出(終了日がNULLまたは未来日)を行います。
FAQ
Q1: 所属履歴が1件もない社員は許されますか?
A1: 問題の条件では許されません。条件(2)により「社員は必ずいずれか一つの部門に所属する」ため、少なくとも1件の所属履歴が必要です。
A1: 問題の条件では許されません。条件(2)により「社員は必ずいずれか一つの部門に所属する」ため、少なくとも1件の所属履歴が必要です。
Q2: 「現在の所属」だけを管理する場合、多重度は変わりますか?
A2: 現在の所属のみを1対1で保持する属性にするならば別設計になりますが、履歴として扱うなら過去分を含めて1..*が妥当です。
A2: 現在の所属のみを1対1で保持する属性にするならば別設計になりますが、履歴として扱うなら過去分を含めて1..*が妥当です。
Q3: UMLで「0..」と「」は同義ですか?
A3: はい。省略形で「」は「0..」と同じ意味です。
A3: はい。省略形で「」は「0..」と同じ意味です。
関連キーワード: UML、多重度、所属履歴、アソシエーション、履歴管理、リレーショナルモデリング、正規化

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

