システムアーキテクト試験 2012年 午後103


セミナ管理システムの構築に関する次の記述を読んで、設問1~3に答えよ。

 D社は、各種のソフトウェアパッケージを核としたソリューションを提供する大手ソフトウェアベンダである。D社は、営業拡大を目的としたソリューションセミナ(以下、セミナという)を全国で年間数回ずつ、ホテルやイベント会場を使って開催しており、セミナの申込管理をシステム化している。   〔現状と課題〕  D社のセミナは、営業担当が指定した顧客に招待状を出し、Webで参加申込みを受け付ける。また、顧客以外の受講希望者の参加申込みも受け付けている。  各セミナは、1日単位で開催され、午前10時から午後5時までを五つの時間帯(以下、時限という)に分け、それぞれの時限でセッションを開催する。1回のセミナでは、20~30個のセッションが開催され、申込者は申込時に1~5個のセッションを予約するが、同一時限に開催されるセッションを複数予約することはできない。各セッションに定員を設定し、予約人数が定員に達した場合は、当該セッションは満席扱いとし、それ以降は予約を受け付けない。申込者には、申込時に当該セミナで一意に付与する申込IDと予約したセッション名を記載した受講票を、システムで発行する。  当日、会場受付には、申込ID順の申込者リストを準備し、来場した申込者(以下、受講者という)に受講票を提示してもらうことで、来場チェックを行っている。各セッションの会議室の入口では、受講者が提示した受講票に当該セッション名が記載されていることを確認して入室を許可しているが、申込IDなどの受講者の情報は記録していない。受講者が、予約していないセッションの受講を希望した場合には、空席待ちの列に並んでもらい、セッション開始時刻に空席があれば受講可能としている。  営業担当及びセミナ事務局から、次の課題が挙げられ、改善を要望されている。  (1) 会場受付で誰が来場しているかは把握できるが、セッションの受講は記録されないので、受講者が予約したセッションを実際に受講したかは把握できない。  (2) 各セッションの会議室の入口では、当該セッションを予約した申込者が来場しているかを把握できないので、予約人数が定員に達している場合に、セッションの開始時刻前に空席待ちの受講者を入室させてよいか判断できない。  (3) 受講者が実際にどのセッションを受講したか把握できないので、有効なフォロー営業ができない。  (4) 各セッションの受講希望人数にばらつきがあり、満席で予約を断るセッションがある一方で、予約人数が定員に満たないセッションもある。受講希望が多いセッションは、事前に大きな会議室に振り替えられるようにしてほしい。   D社では、これらの課題を解決するために、現在の申込管理のシステムを拡充し、セミナ管理システム(以下、新システムという)を構築することにした。   〔新システムに対する要件〕  情報システム部のE課長が新システムの構築を担当することになり、次のとおりに要件を定め、セミナ事務局(以下、事務局という)の了解を得た。  (1) 申込受付時に、セッションの予約状況によって、予約希望が多いセッションに割り当てられた会議室を、より定員が多い会議室に変更することを可能にする。  (2) セミナの会場受付では、受講者が持参した受講票に基づき、申込IDを記録したICカード(以下、受講カードという)をその場で発行する。  (3) 各セッションの会議室の入口に設置したICカードリーダに、受講者が受講カードをかざすことによって、予約の有無の確認を行い、セッションの受講を記録する。これによって、入室人数をリアルタイムに把握し、会場の事務局控室にあるPCで参照できる。  (4) 各セッションの予約人数、当該会議室の定員、予約者の来場情報、予約者の当該セッションへの入室情報及び現在入室している人数を基に、受講見込人数の推定を行い、空席待ちの受講者の入室を段階的に効率よく行えるようにする。   〔新システムの設計〕  E課長は、〔新システムに対する要件〕に基づき、新システムの設計を行った。 新システムのE-R図を図1に、新システムの処理概要を表1に示す。  なお、セミナには一意にセミナ番号を付与する。また、セッションにはセミナ内で一意なセッションIDを付与し、時限は開始時刻順に1~5の値をとる。  “受講セッション”の主キーについては、セミナ番号、申込ID、セッションIDを設定する方法と、セミナ番号、申込ID、選択したセッションの時限を設定する方法が考えられたが、業務プログラムの作成負荷を軽減するために、後者を選択した。
システムアーキテクト試験(平成24年度 午後I 問3 図1)
システムアーキテクト試験(平成24年度 午後I 問3 表1)
 会議室変更の処理について、判断する条件と処理内容は次のとおりである。  あるセッションの予約人数が、そのセッションに割り当てられた会議室の定員の1.6倍に達したとき、当該セッションと、セミナ番号・時限が等しい全てのセッションについて処理を行う。  (1)各セッションの会議室の(a)が、当該セッションの会議室の(a)よりも(b)セッションを抽出する。  (2)抽出したセッションの中から、(c)が当該セッションの(c)よりも(d)セッションを選択する。  (3)選択したセッションの(c)を、選択したセッションの会議室の(a)割って倍率を求め、その倍率が最も低いセッションを選択する。  (4)選択したセッションの(e)と当該セッションの(e)を入れ替える。   〔営業担当役員からの追加要望〕  E課長が、役員会で新システムの概要を説明したところ、営業担当役員から次のような要望があった。
 ・セミナは営業拡大の絶好の機会であり、営業担当が総出で顧客対応を行っているが、受講者が多く目的の顧客がどこにいるのかが把握できず、うまく対応できていない。  ・セミナの開催場所と内容によって、重要顧客を選定する。重要顧客の来場時と各セッションへの入室時に、営業担当に連絡してほしい。  ・セミナ終了後、営業担当がフォロー営業を行えるように適切な情報を渡してほしい。
 E課長は、これらの要望に応えるために、重要顧客の来場及び入室情報を把握できるよう新システムの設計の変更を行うことにし、あるエンティティタイプに重要顧客区分の属性を追加した。あわせて、顧客招待、セミナ受付、セッション入室の各処理を変更することにし、それぞれの処理の追加点を表2にまとめた。
システムアーキテクト試験(平成24年度 午後I 問3 表2)

セミナ管理システムの構築に関する次の記述を読んで、設問1~3に答えよ。

設問1〔新システムの設計】について、(1)~(3)に答えよ。

(1)E課長は、業務プログラムの作成負荷を軽減するために“受講セッション”の主キーに、セミナ番号、申込ID、選択したセッションの時限を設定する方法を選択した。なぜ作成負荷が軽減できると考えたか。40字以内で述べよ。

模範解答

・同一時限の複数セッションのチェックをデータベースの一意制約で実現できるから ・ “受講申込”に対して同一時限の“受講セッション”が一つしか作れなくなるから

解説

解答の論理構成

  1. 要件確認
    【問題文】“同一時限に開催されるセッションを複数予約することはできない。”
    → 同一時限内での重複登録を防ぐ必要がある。
  2. 主キー候補
    【問題文】“セミナ番号、申込ID、選択したセッションの時限を設定する方法”
    → 時限を含めれば,申込者×時限で一意になる。
  3. 一意制約の効果
    主キーに含まれる列では重複行が登録できない。したがってプログラムで
    ・登録前に同時限の既存レコード検索
    ・重複時のエラー制御
    を実装する必要がなくなる。
  4. 作成負荷の軽減
    重複チェック用の SQL・例外処理・画面メッセージなどが不要となり,コーディング・テスト工数を削減できる。

誤りやすいポイント

  • 「時限」を主キーに入れると“セッションIDが不要になる”と誤解しやすいが,セッションそのものの識別には「セッションID」が別に存在する。
  • “プログラムがまったく不要”ではなく,登録以外の機能(表示・更新)は残ることを忘れがち。
  • 「1対多」の制約と「一意制約」を混同して記述してしまう。

FAQ

Q: 主キーに「時限」を入れない場合でもユニークインデックスを別に作ればよいのでは?
A: 可能だが,別インデックス設計・運用が追加され,設計書とプログラムの整合確認が増えるため作業負荷削減という趣旨に合わない。
Q: 時限以外にトランザクション分離レベルなど性能面の配慮は?
A: 制約検査はインデックスで行われるため性能への影響は軽微。むしろロジック削減によりアプリ側のオーバーヘッドが下がる。
Q: 将来,時限数が増えた場合でも問題ない?
A: 主キーに時限を含めているため拡張しても同一時限内重複禁止というビジネスルールは自動で維持できる。

関連キーワード: 主キー設計, 一意制約, 重複チェック, E-R図, 工数削減

設問1〔新システムの設計】について、(1)~(3)に答えよ。

(2)図1のE-R図について、破線で示した5か所のリレーションシップを凡例に倣って示せ。

模範解答

システムアーキテクト試験(平成24年 午後I 問3 設問01-02解答)

解説

解答の論理構成

  1. 「顧客」―「顧客招待」
    【問題文】「営業担当は…顧客を選び、その一覧を事務局に提出する。」
    → 招待側は必ず「顧客」に紐付く(●)、しかし全顧客が招待されるとは限らない(○)。招待は1顧客に複数可なので1対多。
  2. 「顧客招待」―「受講申込」
    【問題文】「顧客以外の受講希望者の参加申込みも受け付けている。」
    → 招待されても申込しない場合がある、招待されずに申込する場合もある。よって双方とも任意(○―○)、かつ1対1でなく多対多は設定されていないので1対1(0/1) で表現。
  3. 「受講申込」―「受講セッション」
    【問題文】「申込者は…1~5個のセッションを予約する。」
    → 申込が存在すれば必ず1件以上の受講セッション(●)、1申込に最大5件なので1対多。逆に受講セッションは申込なしに存在しないので受講セッション側は必須(●)だが、図では申込側に実線(1)・受講セッション側に○(多)。
  4. 「セミナ」―「セッション」
    【問題文】「各セミナは…20~30個のセッションが開催され。」
    → セミナが存在すれば必ずひとつ以上のセッション(●)、セッションは必ずどこかのセミナに属する(●)。1対多。
  5. 「セッション」―「受講セッション」
    【問題文】「各セッションに定員を設定し…予約人数が定員に達した場合…」
    → セッションは予約0件の可能性あり(○)、受講セッションは必ず対象セッションを持つ(●)。矢印で多側が受講セッション。

誤りやすいポイント

  • 「顧客招待」と「受講申込」を“招待がある=必ず申込する”と誤解し、○―●にしてしまう。
  • 「受講申込」はセッション選択必須という条件を見落とし、○―○で描くミス。
  • 矢印の向きを逆にして 1対多を取り違える。
  • 「セッション」は必ず1セミナに所属するが“セッションなしセミナ”はない点を見落とす。

FAQ

Q: 「○」「●」は何を表していますか?
A: 【図補足情報】凡例のとおり、○は“インスタンスが存在しないことがある(任意)”、●は“必ず存在する(必須)”を意味します。
Q: 「受講申込」側が必須なのに図で○になっているように見えるのですが?
A: 矢印の根元に縦線2本(| |)が描かれており、それが“1”を示します。説明文では黒丸2つと記載されていますが、意味は“必須で1”です。
Q: 受講セッションはなぜセッション側が○なのですか?
A: 開催直後など予約が0件のセッションも存在するため、セッションから見て受講セッションは“存在しないことがある”ためです。

関連キーワード: ER図, カーディナリティ, オプショナリティ, 1対多関係, リレーションシップ

設問1〔新システムの設計】について、(1)~(3)に答えよ。

(3)本文中の(a)~(e)に入れる適切な字句を答えよ。

模範解答

a:定員 b:多い c:予約人数 d:少ない e:会議室ID

解説

解答の論理構成

  1. 【問題文】引用
    「(1)各セッションの会議室の(a)が、当該セッションの会議室の(a)よりも(b)セッションを抽出する。」
    ここで比較対象は会議室そのものの属性で、後段の説明に「定員が多い会議室への変更を行う」とある。よって
    (a) = “定員”、(b) = “多い”。
  2. 次の段階
    「(2)抽出したセッションの中から、(c)が当該セッションの(c)よりも(d)セッションを選択する。」
    会場変更の目的は“より広い部屋へかつ使われ方が軽いセッション”への入替えです。セッション側の混雑度を示す値は「予約人数」であり、条件は“少ない”ほうが望ましい。したがって
    (c) = “予約人数”、(d) = “少ない”。
  3. 倍率計算で裏付け
    「(3)選択したセッションの(c)を、選択したセッションの会議室の(a)割って倍率を求め…」
    (c)/(a) は “予約人数/定員” という混雑率を示す式になり、整合が取れる。
  4. 最後の入替え対象
    「(4)選択したセッションの(e)と当該セッションの(e)を入れ替える。」
    会議室そのものを入れ替えるので、エンティティ「セッション」が保持する識別子 “会議室ID” を交換すると判断できる。よって
    (e) = “会議室ID”。

誤りやすいポイント

  • “予約人数が多いセッションを選ぶ”と逆に読んでしまう。実際は空いている方(少ない)を選びます。
  • (a) を“会議室ID”と誤解し、倍率計算が成り立たなくなる。
  • (e) を“定員”とすると物理的な部屋交換ができず矛盾します。

FAQ

Q: 倍率計算の目的は何ですか?
A: “予約人数 ÷ 定員” で混雑率を出し、広い部屋がどれだけ余裕を持って使われているかを比較するためです。最も混雑率が低いセッションと入れ替えることで空席を最大限利用できます。
Q: 予約人数が定員の 1.6 倍に達した時点で処理するのはなぜですか?
A: 【問題文】に「過去の実績から、実際に受講する人数は予約人数の50%から60%」とあり、1.6 倍を超えると満席でも座れないリスクが高まるため、会議室変更または満席扱いを判断する閾値になっています。
Q: なぜ“会議室名”ではなく“会議室ID”を入替えるのですか?
A: データベースでは識別子で結合が行われるため、ID を交換すれば関連する定員や所在地などの情報が一括して切り替わります。

関連キーワード: 定員管理, 予約人数, 混雑率, 部屋割当, 識別子

設問2

空席待ちの受講者の入室を段階的に効率よく行うために、当該セッションの予約人数及び当該会議室の定員の他に、リアルタイムで把握できる三つの情報を利用する。どのような情報か、図1中の属性名を用いて、それぞれ30字以内で述べよ。

模範解答

・当該セッションを受講する受講者のセミナへの来場日時 ・当該セッションを受講する受講者のセッションへの入室日時 ・当該セッションの入室人数

解説

設問2

(1)空席待ちの受講者の入室を段階的に効率よく行うために、当該セッションの予約人数及び当該会議室の定員の他に、リアルタイムで把握できる三つの情報を利用する。どのような情報か、図1中の属性名を用いて、それぞれ30字以内で述べよ。

模範解答

解説

設問3〔営業担当役員からの追加要望〕について、(1)~(3)に答えよ。

(1)重要顧客の来場及び入室情報を把握するために、あるエンティティタイプに属性として重要顧客区分を追加する。追加するエンティティタイプ名を挙げ、そのエンティティタイプに追加する理由を35字以内で述べよ。

模範解答

エンティティタイプ名:顧客招待 理由:重要顧客はセミナの開催場所と内容によって,招待時に選定されるから

解説

解答の論理構成

  1. 追加要件の理解
    【問題文】では「セミナの開催場所と内容によって、重要顧客を選定する。」と明言しています。つまり同じ顧客でもセミナごとに重要度が変動します。
  2. データが発生するタイミング
    • 営業担当が顧客を選定 → 「その一覧を事務局に提出する。」
    • 事務局は「『顧客招待』に顧客を登録する。」
      ここで初めて“顧客 × セミナ”の組が生成されます。
  3. 属性追加先の決定
    • 「顧客」…顧客固有の静的情報を保持。セミナ依存の属性を置くと重複。
    • 「受講申込」…来場時点で生成され、招待されていない一般参加も含む。招待段階の情報を持てない。
      よって「顧客招待」に“重要顧客区分”を付与するのが要件を最も自然に満たします。

誤りやすいポイント

  • 「顧客」に区分を付けると、セミナごとに重要度が変わる要件と矛盾する。
  • 「受講申込」を選ぶと、招待されない一般参加にまで属性が付与され無意味なNULLが増える。
  • “来場時に判定すればよい”と誤解し、動的判定ロジックで解決しようとしてしまう。

FAQ

Q: 重要顧客区分をサブタイプで表現する案は不適切ですか?
A: 重要かどうかは“セミナ × 顧客”で変化する可変属性です。サブタイプ化すると顧客実体がセミナ数だけ複製されるため不適切です。
Q: 区分を「受講セッション」に入れればセッション入室時の検索が速くなりませんか?
A: 検索効率より正規化が優先です。区分はセミナ単位で決まるため、「受講セッション」(セッション単位)に置くと多重更新が必要になり整合性を欠きます。

関連キーワード: ERモデル, 外部キー, ビジネスルール, トリガ, 正規化

設問3〔営業担当役員からの追加要望〕について、(1)~(3)に答えよ。

(2)表2中の(f)~(j)に入れる適切な字句を答えよ。

模範解答

f:受講票 g:申込ID h:受講申込 i:顧客ID j:受講カード

解説

解答の論理構成

  1. 受付時に参照する媒体の確認
    【問題文】「セミナ受付」には
    「受講者から受講票を提示してもらい、申込IDを記録した受講カードを発行し…」
    とあり,提示するのは紙の「受講票」。よって (f)=受講票。
  2. キーとなる属性
    同じ段落に「申込ID」が明示されているため (g)=申込ID。
  3. 参照するエンティティ
    「申込みの内容は『受講申込』『受講セッション』で登録される。」
    申込IDで検索すべきテーブルは “受講申込”。従って (h)=受講申込。
  4. 取得したい値
    重要顧客かどうかを判断するには顧客を特定する必要がある。エンティティ「受講申込」には「顧客ID」が含まれるので (i)=顧客ID。
  5. 入室時の媒体の違い
    【問題文】「各会議室の入口にICカードリーダを設置して、受講者は受講カードをかざして入室する。」
    入室処理で使うのはICカード=「受講カード」。よって (j)=受講カード。

誤りやすいポイント

  • “受講票” と “受講カード” を混同して (f),(j) を逆にするケース
  • 重要顧客判定には「会社名」などを想像し (i) に別属性を入れてしまうミス
  • 参照エンティティを「顧客」や「受講セッション」と誤認し (h) を誤答するパターン
  • 「申込ID」の位置付けを読み飛ばし,同一セミナ内で一意であることを忘れる失点

FAQ

Q: 受付と入室で媒体を変える理由は何ですか?
A: 受付では紙の「受講票」を持参しているため即時発行が容易ですが,入室時は高速・非接触での処理が求められるためICカード方式が適しています。
Q: なぜ「顧客ID」で重要顧客かどうかを判定できるのですか?
A: 重要顧客区分はエンティティ「顧客」に追加された属性で管理されるため,「顧客ID」で顧客を特定すれば区分を参照できます。
Q: 「受講セッション」を参照しなくても問題ないのでしょうか?
A: 重要顧客判定は顧客単位で行うため,「受講申込」で十分に顧客IDを取得できます。入室可否や予約チェックは別ロジックで「受講セッション」を用いますが,本設問の空欄箇所とは関係ありません。

関連キーワード: ICカード, 申込ID, エンティティ, 属性参照, 来場管理

設問3〔営業担当役員からの追加要望〕について、(1)~(3)に答えよ。

(3)セミナ終了後、フォロー営業に使用する情報を営業担当に渡すことになったが、新システムの稼働によって確実に渡すことができるようになった情報がある。その内容を25字以内で述べよ。

模範解答

受講者がどのセッションを受講したかという情報

解説

解答の論理構成

  1. 現行システムの課題
    【問題文】では、課題(1)として
    「受講者が予約したセッションを実際に受講したかは把握できない。」
    と明記されている。
    これはフォロー営業に必要な情報が不足していることを示す。
  2. 新システムの機能追加
    新システム要件(3)で
    「受講者が受講カードをかざすことによって、…セッションの受講を記録する。」
    とあり、入室実績をデータベースに残す設計が示されている。
  3. フォロー営業処理
    表1「フォロー営業」には
    「セミナ終了後、営業担当が受講者へフォロー営業ができるよう、受講者の一覧表を作成する。」
    とある。
    ここで作成される一覧表には、上記の入室記録が反映される。
  4. 帰結
    したがって、新システム稼働後に渡せる確実な情報は
    「受講者がどのセッションを受講したか」という実受講情報である。

誤りやすいポイント

  • 「予約セッション」と「実受講セッション」を混同しやすい。問われているのは後者。
  • 「来場有無」だけではフォロー営業に十分と考えてしまうが、入室実績まで記録して初めて改善点となる。
  • 重要顧客通知機能と混同し、重要顧客情報自体が答えだと思い込む。

FAQ

Q: 予約データだけでもフォロー営業は可能では?
A: 予約だけでは実際の関心度を測れません。新システムは入室を記録し、確実に受講したテーマを把握できます。
Q: ICカードリーダで記録する内容は入室時刻だけですか?
A: 入室時刻に加え、「どのセッションに入室したか」という受講実績も記録されます。
Q: 重要顧客区分の追加は解答に影響しますか?
A: 本問はフォロー営業用に「確実に渡せるようになった情報」を尋ねており、重要顧客区分は直接の答えではありません。

関連キーワード: ICカード認証, 入退室管理, データベース設計, フォロー営業
← 前の問題へ次の問題へ →

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