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

応用情報技術者 2024年 春期 午後06


人事評価システムの設計と実装に関する次の記述を読んで、設問に答えよ。

 K社は、人事評価システムを中心に企業に提供するSaaS事業者である。現在は、契約している会社ごとに仮想サーバを作成して、その中にデータベースを個別に作成している。現在のシステムのOSやフレームワークのサポート期限が迫ってきたのを機に、機能は変更せずにサーバリソース最適化を目的として、システムを再構築することにした。   〔人事評価システムの機能概要〕  人事評価システムの機能概要を表1に示す。
応用情報技術者試験(令和6年度 午後 問06 表01)
〔単一データベース・単一スキーマ方式の検討〕  データベースのリソースを最適化するために、会社ごとに個別に作成していたデータベース及びスキーマを一つにまとめることを考える。検討したE-R図を図1に示す。  なお、再構築するシステムでは、E-R図のエンティティ名を表名にし、属性名を列名にして、適切なデータ型で表定義した関係データベースにおいて、データを管理する。
応用情報技術者試験(令和6年度 午後 問06 図01)
 図1を関係データベースに実装した際のSQL文を考える。  (1) 指定された会社と年度における、国民の祝日と会社記念日の一覧を日付の昇順に出力するSqL文を図2に示す。ここで“:会社番号”は指定された会社の会社番号を、“:年度開始日”、“:年度終了日”は、それぞれ指定された年度の開始日、終了日を表す埋込み変数である
応用情報技術者試験(令和6年度 午後 問06 図02)
 (2) 指定された管理者が評価する対象の従業員の一覧を部署番号、従業員番号の昇順に出力する SQL 文を図3に示す。ここで、“会社番号”と“管理者番号”は、それぞれ指定された管理者の会社番号と従業員番号を表す埋込変数である。
応用情報技術者試験(令和6年度 午後 問06 図03)
〔単一データベース・単一スキーマ方式のレビュー〕  検討した単一データベース・単一スキーマ方式のレビューを受けたところ、次の指摘とアドバイスを受けた。  ・指摘   この検討案は、サーバリソース最適化を実現することができるが、SQL インジェクションの脆弱性が見つかってしまった場合、多くの情報が漏えいしてしまうおそれがある。  ・アドバイス   データベースは一つのまま、システム全体で共有するデータだけを格納する共有用のスキーマと、①システム利用者の会社ごとのスキーマに分ける方式にするとよい。共有用のスキーマに作成した表は、会社ごとのスキーマに対象の表と同じ名前のビューを作成して照会できるようにすると、現在のシステムの SQL 文への修正を少なくすることができる。   〔単一データベース・個別スキーマ方式の検討〕  〔単一データベース・単一スキーマ方式のレビュー〕のアドバイスを受け、複数のスキーマを作成して各スキーマに表とビューを配置する。検討したスキーマを整理した結果を表2に示す。
応用情報技術者試験(令和6年度 午後 問06 表02)
 次に、ビューを作成するSQL文について考える。  スキーマC001に国民の祝日ビューを作成するSQL文を図4に示す。
応用情報技術者試験(令和6年度 午後 問06 図04)
〔単一データベース・個別スキーマ方式のレビュー〕  検討した単一データベース・個別スキーマ方式のレビューを受けたところ、次の指摘を受けた。  ・システム利用者ごとに、利用するスキーマを指定するために、g表にh列を追加する必要がある。  ・表2の表とビューの配置のままでは②利用できない機能があるので、③配置を一部見直す必要がある。    レビューで受けた指摘に全て対応することで、システムを再構築することができた。

設問1〔単一データベース・単一スキーマ方式の検討〕について答えよ。

(1)図1中の a に入れる適切なエンティティ間の関連を答え、E-R図を完成させよ。 なお、エンティティ間の関連の表記は、図1の凡例に倣うこと。

模範解答

a:→

解説

解答の論理構成

  1. 【問題文】の「入社」の説明には「従業員が入社した際、…配属先の部署及び入社年月日を登録する。」とあります。ここから、1人の従業員は必ず1つの部署に所属することが読み取れます。
  2. 一方、部門には複数の従業員が存在し得ることは、一般的な組織構造だけでなく【問題文】「評価者管理」の「部署の管理者を評価者として登録する。」という記載からも裏付けられます。部署に管理者が設定されるということは、部署が従業員を多数抱える前提です。
  3. よって「部署」側が 1、「従業員」側が 多 の関係になります。図1の凡例に従い、1 対 多 を示す表記は「→」です。
  4. 以上より、a には「→」を入れることで E-R 図が整合します。

誤りやすいポイント

  • 「従業員が複数部署を兼務する可能性があるのでは」と考え、多対多を選んでしまう。今回の要件には兼務を許容する記述がなく、従業員は1部署と読み取れる点に注意が必要です。
  • 矢印の向きを逆にしてしまう。矢印の根元(1側)が「部署」、矢印の先(多側)が「従業員」となることを ER図の凡例で再確認するとミスを防げます。
  • 「評価」や「目標」といった他のエンティティとの関係と混同する。入社時の登録内容に着目すれば、本問で問われているのは部署と従業員の関係であると判断できます。

FAQ

Q: 部署が存在しない従業員(例えば入社前の内定者)は考慮しなくてよいのですか?
A: 本システムの機能概要は「従業員が入社した際」に部署を登録すると明記しており、入社前データは扱わない想定です。したがって従業員は必ずいずれかの部署に所属します。
Q: 兼務や組織改編に対応するには多対多にした方が拡張性が高いのでは?
A: 要件範囲外の仕様を先取りして ER図を変更すると、現在の機能要求との齟齬が生じます。拡張が必要になった段階でリレーションを見直すのが一般的です。
Q: 矢印「→」はデータベース実装時にどのような形になりますか?
A: 「部署」表の主キーを参照する外部キー列(部署番号など)が「従業員」表に追加され、1対多関係が具体化されます。

関連キーワード: ER図, 1対多, エンティティ, 外部キー, 正規化

設問1〔単一データベース・単一スキーマ方式の検討〕について答えよ。

(2)図2中の b 、図2及び図3中の c に入れる適切な字句を答えよ。

模範解答

b:BETWEEN :年度開始日AND :年度終了日 c:ORDER BY

解説

解答の論理構成

  1. 抽出条件を設定する句の確認
    【問題文】「国民の祝日と会社記念日の一覧を日付の昇順に出力するSqL文を図2に示す。ここで“:年度開始日”、“:年度終了日”は、それぞれ指定された年度の開始日、終了日を表す埋込み変数である」
    → 指定された期間内の日付を取り出す必要があるため、両端を含む範囲検索を行う BETWEEN 句を使用するのが自然です。よって b には
    BETWEEN :年度開始日AND :年度終了日
    が入ります(変数の前後は原文どおり、空白を挟まない表記)。
  2. 並べ替えを指示する句の確認
    【問題文】「国民の祝日と会社記念日の一覧を日付の昇順に出力する」
    【問題文】「従業員の一覧を部署番号、従業員番号の昇順に出力する」
    → いずれも「昇順に出力」と明示されているため、昇順ソートを行う句は ORDER BY です。
    ・図2では ORDER BY 日付
    ・図3では ORDER BY DEP.部署番号, EMP.従業員番号
    共通の字句なので c
    ORDER BY
    で両図に同じものが入ります。
  3. 以上より正解
    b:BETWEEN :年度開始日AND :年度終了日
    c:ORDER BY

誤りやすいポイント

  • 範囲指定に >= と <= を二重に書いてしまう。BETWEEN を使えば1文で済むので記述ミスが減ります。
  • ORDER BY に昇順キーワード ASC を義務づけと誤解する。SQL 標準では省略時 ASC 扱いです。
  • 図3の ORDER BY で EMP.部署番号 と書くミス。並べ替え対象は結合先の DEP.部署番号。

FAQ

Q: BETWEEN で両端を含める仕様が不安です。
A: SQL の BETWEEN は「以上」「以下」を意味するため、:年度開始日 と :年度終了日 そのものが該当日に含まれます。
Q: ORDER BY と同時に GROUP BY を使う必要はありませんか。
A: 今回は集計ではなく一覧表示が目的なので GROUP BY は不要です。ORDER BY だけで並べ替えられます。
Q: 変数の前後に空白が無い書式はエラーになりませんか。
A: 多くの実装で空白可否は柔軟ですが、設問は【数字・固有名詞は必ず原文を正確に引用】と指示しているため、解答では原文表記を保つのが鉄則です。

関連キーワード: BETWEEN, ORDER BY, 結合, 昇順ソート, 範囲検索

設問1〔単一データベース・単一スキーマ方式の検討〕について答えよ。

(3)図3中の d に入れる適切な字句を答えよ。

模範解答

d:EMP.部署番号 = DEP.部署番号

解説

解答の論理構成

  1. 図3の INNER JOIN 句
    FROM 従業員 EMP INNER JOIN 部署 DEP
    ON EMP.会社番号 = DEP.会社番号
    AND d
    では、従業員表と部署表を結合しています。
  2. 会社番号だけで結合すると「同じ会社に属している従業員と全部署」が混ざり、1 対 多の冗長な Cartesian 結合が発生します。部署単位に絞る追加条件が欠かせません。
  3. 図1(E-R図)には「従業員―部署」は部署番号で結び付く 1 対 多 関係であることが示されています。したがって結合キーは次のとおりです。
    EMP.部署番号 = DEP.部署番号
  4. これを d に入れれば、会社番号と部署番号の2つのキーで正しく等価結合が成立し、「指定管理者が管轄する部署に所属する従業員一覧」が取得できます。

誤りやすいポイント

  • 会社番号だけで結合してしまい、部署ごとの絞り込みを忘れる。これでは同一会社内の全従業員が戻り、意図しない結果になります。
  • WHERE 句に部署番号条件を書いて ON 句を省略するケース。INNER JOIN では結合条件は ON に書くのが可読性・保守性に優れます。
  • 別名を忘れて 部署.部署番号 などプレフィックスなしで記述し、曖昧列エラーになる。エイリアスと列名はセットで記述しましょう。

FAQ

Q: ON 句に複数条件を書くのと、ON で会社番号を結合し WHERE で部署番号を絞る方法に違いはありますか?
A: 等価結合の意味は同じですが、一般的に結合キーは ON にまとめる方が読みやすく、外部結合では結果も変わるためベストプラクティスとされています。
Q: EMP.部署番号 IS NULL のような条件を追加して外れ値をチェックしたいのですが?
A: INNER JOIN では結合条件に合致しない行はそもそも戻らないため、部門未所属の従業員も取得したい場合は LEFT JOIN を使用し、WHERE DEP.部署番号 IS NULL などの条件を付与してください。

関連キーワード: INNER JOIN, 等価結合, 外部キー, カーティジアン結合, ビュー

設問2

本文中の下線①の方式にするとき利点は何か。20字以内で答えよ。

模範解答

漏れる情報を会社単位に制限できる。

解説

解答の論理構成

  1. レビュー段階で指摘されたリスク
    引用:
    ・指摘
     「SQL インジェクションの脆弱性が見つかってしまった場合、多くの情報が漏えいしてしまうおそれがある。」
    単一スキーマでは全社のデータが同一空間にあるため、攻撃成功時の被害範囲が広いことが問題になっています。
  2. アドバイスとして提示された対策
    引用:
    「共有用のスキーマと、①システム利用者の会社ごとのスキーマに分ける方式」
    会社ごとにスキーマを分離し、各社利用者には自社スキーマへの参照権限のみを与える運用を想定しています。
  3. 分離の効果
    ・スキーマ単位のアクセス制御により、ある会社の利用者(または攻撃者)が別会社の表へ直接アクセスすることは権限上不可能になります。
    ・仮に SQL インジェクションが発生しても、被害はそのスキーマ=その会社のデータに限定されます。
  4. 以上より、方式①の利点は
    「漏れる情報を会社単位に制限できる。」
    となります。

誤りやすいポイント

  • 単一データベース=単一スキーマと誤解し、スキーマ分割でもインジェクション被害は変わらないと思い込む。
  • 「共有用スキーマ」が存在する点を失念し、そこで漏えいが起こる可能性を考慮しない。
  • 「マルチテナント化=性能向上」のみを利点として挙げ、セキュリティ観点を回答に含め忘れる。

FAQ

Q: スキーマを分けても同一 DB 上なら完全な隔離にはならないのでは?
A: OS レベルのサンドボックスほど強固ではありませんが、権限設定で SQL 実行可能範囲を論理的に分離できます。インジェクション発生時も他社スキーマへの SELECT や UPDATE 権限がなければアクセスできません。
Q: 各社スキーマに同名ビューを置く理由は?
A: 引用:
「現在のシステムの SQL 文への修正を少なくすることができる。」
既存 SQL が表名を前提にしているため、スキーマだけ切替えても動作するようにするためです。
Q: 共有用スキーマには何を置くべきですか?
A: 表2より、全社共通で参照される「会社」「国民の祝日」を配置し、各社スキーマにビューで公開します。

関連キーワード: スキーマ分割, 権限管理, SQLインジェクション, 最小権限, マルチテナント

設問3

図4中の ef に入れる適切な字句を答えよ。

模範解答

e:C001.国民の祝日 f:PUB.国民の祝日

解説

解答の論理構成

  1. 共有用スキーマと会社ごとのスキーマ
    • 問題文には「共有用のスキーマに作成した表は、会社ごとのスキーマに対象の表と同じ名前のビューを作成して照会できる」とあります。
    • 表2では共有用スキーマ名が“PUB”、個別会社用スキーマ名が“Cxxx(xxx は任意の英数字)”であると示されています。
  2. ビューを作成する目的
    • 会社ごとのスキーマ側からは、共有用スキーマにある“国民の祝日”表をあたかも自分のスキーマに存在するかのように利用できるようにするため、同名のビューを作成する必要があります。
  3. 図4の読み取り
    • 図4には「CREATE VIEW e (祝日, 祝日名) AS SELECT 祝日, 祝日名 FROM f」と提示されています。
    • ここで e には“ビュー名(スキーマ名.ビュー名)”を、 f には“基となる表名(スキーマ名.表名)”を入れます。
  4. 字句を決定
    ① ビューを置くスキーマは「スキーマC001」と明示されているため、C001. が先頭に付きます。ビュー名は共有用表と同じ“国民の祝日”。
    ② 基となる表は共有用スキーマ“PUB”に存在する“国民の祝日”。
    以上より
    • e → C001.国民の祝日
    • f → PUB.国民の祝日

誤りやすいポイント

  • ビュー名を単に“国民の祝日”と書き、スキーマ名を付け忘れる。アクセス権が会社スキーマに限定されるため必須です。
  • 共有用スキーマ名を“PUB”ではなく“PUBLIC”などと誤記する。問題文で指定されている正確な名称を用いる必要があります。
  • CREATE VIEW の列リストを省略できると誤解し、列名の並びを共有用表と変えてしまう。ビュー列名は表と一致させておく方が既存SQLの修正を最小化できます。

FAQ

Q: 共有用スキーマに直接アクセスさせればビューは不要ですか?
A: 各社のアプリケーションが自社スキーマだけを検索対象にしている想定なので、ビューを介してスキーマ透過を実現する方が既存SQLを変更せずに済みます。
Q: ビューを作るとパフォーマンスが落ちませんか?
A: 通常の単純ビューであればオプティマイザが透過的に展開し、物理的な負荷増はわずかです。索引も共有用表に対して有効に機能します。
Q: スキーマ名に数字を含めても問題ありませんか?
A: 多くのRDBMSは英数字を許容しますが、命名規約に従ってプレフィックス“C”を付けることで識別性と可読性を確保しています。

関連キーワード: スキーマ分割, ビュー透過, SQLインジェクション対策, マルチテナント, データベース権限

設問4〔単一データベース・個別スキーマ方式のレビュー〕について答えよ。

(1)本文中の gh に入れる適切な字句を答えよ。

模範解答

g:会社 h:スキーマ名

解説

解答の論理構成

  1. 単一データベース・個別スキーマ方式では、各会社専用スキーマを用意し、利用者が自社スキーマ内の表・ビューだけを参照できるようにします。本文には「システム利用者ごとに、利用するスキーマを指定するために、g表にh列を追加する必要がある。」と記載されています。
  2. どの会社がどのスキーマを使うかを管理できる表は「会社、国民の祝日」を持つ共有用スキーマ PUB に存在する「会社」表です。ここへスキーマ識別子を登録すれば、ログイン後にその値で SET search_path などを行うだけで参照先を自社スキーマへ限定できます。
  3. したがって g に入るのは「会社」です。
  4. 次に追加する列名は会社とスキーマを 1 対 1 で結び付ける情報です。本文のアドバイスでは「会社ごとのスキーマ」と繰り返し説明されているため、列名にはスキーマそのものを示す語を置くのが自然です。
  5. 以上より h に入るのは「スキーマ名」です。
  6. まとめると、g=「会社」、h=「スキーマ名」となります。

誤りやすいポイント

・「利用するスキーマを指定」とあるため従業員や部署表を選びがちですが、一社に一つのスキーマを割り当てるため、キーとなるのは会社情報です。
・列名に「スキーマID」「スキーマコード」など別表記を入れると減点対象です。設問は字句を問うため「スキーマ名」を正確に書く必要があります。
・スキーマの切替はアプリケーション側設定とも読めるため、列追加の必要性を見落としがちです。

FAQ

Q: なぜ部署や従業員表ではなく「会社」表に列を追加するのですか?
A: スキーマは会社単位で用意されるため、会社キーと紐付けるのが最もシンプルです。部署や従業員は会社に従属するため、冗長な管理になります。
Q: 列名が「スキーマ名」である理由は?
A: 設計レビューの目的は「利用するスキーマを指定」することです。列の内容がスキーマそのものを示すとすぐ分かる命名として「スキーマ名」が最適です。
Q: 既存 SQL を極力直さないメリットは何ですか?
A: 各社スキーマに同名ビューを置けば、従来の表名参照を変更せずに多テナント化でき、テスト工数とリスクを抑えられます。

関連キーワード: マルチテナント, スキーマ分割, アクセス制御, SQLインジェクション, ビューリダイレクト

設問4〔単一データベース・個別スキーマ方式のレビュー〕について答えよ。

(2)本文中の下線②の機能を、表1の機能名から答えよ。

模範解答

退職分析

解説

解答の論理構成

  1. 表2では、個別会社用スキーマ Cxxx に配置される表として
    「会社記念日、従業員、部署、目標、実績、評価、退職」
    が列挙されています。したがって、表「退職」は会社ごとに分割され、他社のデータを直接参照できません。
    (引用)「表2 スキーマを整理した結果」
  2. 一方、機能一覧には次の説明があります。
    (引用)「退職分析:人事部の管理者が自社及び同じ業種の退職者について、在籍期間と退職理由を分析する。」
    ― 自社だけでなく “同じ業種の退職者” = 他社の退職データを横断的に集計・分析する要件です。
  3. よって、退職データが会社ごとに隔離されたままでは横断集計が不可能になり、機能要件を満たせません。
  4. 以上より、下線②「利用できない機能」は「退職分析」であると論理的に導けます。

誤りやすいポイント

  • 「退職」機能と混同する
    “退職” は各社内の登録処理で完結するため隔離しても問題なし。横断分析を行う“退職分析”と要件が異なることに注意。
  • 「国民の祝日」「会社記念日」を想定する
    いずれもビューで全社共通参照が可能。スキーマ配置上の制約は受けにくい。
  • “同じ業種” の読み落とし
    要件文にある “同じ業種の退職者” を見逃すと、他社データが不要と誤解してしまう。

FAQ

Q: 個別スキーマ間でもビューを作れば分析できるのでは?
A: 権限制御・所有権の問題から、ほかの会社の Cxxx スキーマに直接アクセスさせる設計は現実的でなく、共有スキーマに集約するかビュー配置を見直す必要があります。
Q: 退職分析を実装する最小限の修正は?
A: 「退職」表を共有用スキーマへ移動し、各社スキーマには同名ビューを置くことで現行 SQL 修正量を抑えつつ横断集計を可能にできます。
Q: 横断分析が必要な別機能が将来増える場合の指針は?
A: “共有対象データか否か” を機能単位で整理し、集計・比較要件がある表は最初から共有スキーマに置くのが望ましいです。

関連キーワード: スキーマ分割, ビュー活用, 権限制御, 集計要件, データ共有

設問4〔単一データベース・個別スキーマ方式のレビュー〕について答えよ。

(3)本文中の下線③の見直した内容を、20字以内で答えよ。

模範解答

退職表を共有スキーマに配置する。

解説

解答の論理構成

  1. 機能要件の確認
    表1の機能概要には「退職分析」に関して
    “自社及び同じ業種の退職者について、在籍期間と退職理由を分析する。”
    と明記されています。分析対象が “自社” だけでなく “同じ業種” の他社にまで及ぶため、退職データは会社横断で参照できる必要があります。
  2. 表配置案の問題点
    表2では “退職” が “個別会社用” スキーマ Cxxx に入っています。これではスキーマを切り替えない限り他社の退職データを参照できず、前述の「退職分析」は実行不可能です。
  3. レビュー指摘との合致
    レビューで “表2の表とビューの配置のままでは②利用できない機能がある” と指摘されています。利用できない機能=「退職分析」と判断できます。
  4. 見直し内容の導出
    横断分析を可能にする最小限の修正は、退職データを全社共通で見える場所に移すことです。すでに共有スキーマ “PUB” が用意されているため、
    “退職表を共有スキーマに配置する。”
    が最も自然な対処となります。

誤りやすいポイント

  • 退職分析を「自社限定の集計」と誤読し、退職を個別スキーマのままにしてしまう。
  • 「会社記念日」や「国民の祝日」を移動対象と勘違いし、分析要件との整合を崩す。
  • ビューを用いればどこに表があっても良いと思い込み、根本の配置要件を無視する。

FAQ

Q: なぜ退職だけを共有スキーマへ移すのですか?
A: 「退職分析」は複数社の退職者を横断的に扱います。他の表は会社内で完結するため、全社共有にする必要はありません。
Q: ビューで UNION すれば個別配置でも良いのでは?
A: 各社スキーマを毎回 UNION するビューは追加保守が大きく、スキーマ増加に比例して性能も低下します。共有スキーマへ移動した方が単純で安全です。
Q: 共有スキーマに置くと他社に退職情報が漏れませんか?
A: スキーマは共通ですが、会社番号をキーにアクセス制御を掛ければ漏えいは防げます。ビューで会社番号をフィルタすれば従来 SQL の修正も最小です。

関連キーワード: スキーマ分割, ビュー設計, 多テナント, 権限制御, 横断分析
戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する

すぐに利用可能!

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

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