戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2018年 秋期 午前(科目A)26


問題文

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

選択肢

(正解)

🔒 解説は解答すると表示されます

所属履歴のUML多重度【午前解説】

正解の理由

UMLの多重度は、線上で示された数値が近傍のクラス(すなわちそのクラスに対する多重度)を表します。図では、
  • 部門側近傍に「1」がある → 所属履歴から見た部門は必ず1つ(所属履歴レコードは1つの部門に属する)。
  • 社員側近傍に「1」がある → 所属履歴から見た社員は必ず1人(所属履歴レコードは1人の社員に属する)。 一方、部門に対しては複数の所属履歴(過去の履歴や複数社員分)が存在し得るため、部門→所属履歴の多重度 a は 1..、同様に社員→所属履歴の多重度 b も 1.. となります。したがって a:1..、b:1.. が正答です。

解法ステップ

  1. 図の各多重度表記がどのクラスに対するものかを確認する(近傍に置かれた数がそのクラスの多重度)。
  2. 条件文を「クラス間の1対多・多対1・必須か任意か」に翻訳する。
  3. 所属履歴が「履歴」を兼ねる点を考慮し、部門・社員それぞれに対して履歴が1件以上あるか検討する。
  4. 選択肢と照合して一致する多重度を選ぶ。

選択肢別の誤答解説

  • ア(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..* が適切です。

よくある誤解

  • 「線の近くの '1' が反対側の多重度を示す」と誤解して逆に読むミス。UMLでは文字が置かれた近傍のクラスに関する多重度です。
  • 履歴を「オプション(0件可)」と考えてしまう誤り。条件(2)の「社員はいずれか一つの部門に所属する」は少なくとも1件の履歴が存在することを意味します。
  • 履歴と「現在の所属」を混同すること。履歴テーブルは過去・現在の履歴を記録するので一人当たり複数レコードが存在し得ます。

補足コラム

所属履歴は「アソシエーションを表す独立したクラス(連結エンティティ)」として扱われており、履歴管理や時系列データの保存に適したモデリングです。UMLではこのような中間エンティティを用いることで、同一社員が過去に複数部門を渡り歩いた履歴や、部門ごとの複数社員を自然に表現できます。実装時は「開始日」「終了日」をキーに時点検索や現在所属の抽出(終了日がNULLまたは未来日)を行います。

FAQ

Q1: 所属履歴が1件もない社員は許されますか?
A1: 問題の条件では許されません。条件(2)により「社員は必ずいずれか一つの部門に所属する」ため、少なくとも1件の所属履歴が必要です。
Q2: 「現在の所属」だけを管理する場合、多重度は変わりますか?
A2: 現在の所属のみを1対1で保持する属性にするならば別設計になりますが、履歴として扱うなら過去分を含めて1..*が妥当です。
Q3: UMLで「0..」と「」は同義ですか?
A3: はい。省略形で「」は「0..」と同じ意味です。

関連キーワード: UML、多重度、所属履歴、アソシエーション、履歴管理、リレーショナルモデリング、正規化
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について