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

応用情報技術者 2017年 秋期 午後06


青果卸売業の取引システム改修に関する次の記述を読んで、設問1~3に答えよ。

   U社は、卸売市場で青果物を取り扱う卸売業者である。生産者に対して青果物の販路を提供し、仲卸業者に対して迅速かつ安定的に青果物を供給している。生産者からは複数のパレット(運搬用の荷台)に積まれた青果物を一括で仕入れ、仲卸業者にはパレット単位で販売する。仲卸業者に販売された青果物は、箱単位に小分けされ、小売業者に販売される。青果物の取引の流れを図1に示す。
応用情報技術者試験(平成29年度 秋期 午後 問06 図01)
 U社では、青果物の仕入と販売を管理するための取引システム、青果物の入荷や出荷を管理するための物流システム、仲卸業者への代金の請求や生産者への代金の支払、卸売手数料の精算を管理するための売掛・買掛システムなどが稼働している。  U社では、更なる安定価格・安定供給を実現するために、新たに予約相対売りという販売方法を行えるように取引システムを改修することにした。   〔現行の取引システムの概要〕  現行の取引システムのE-R図(抜粋)を図2に示す。U社の仕入担当者が生産者から青果物を仕入れ、U社の販売担当者が仲卸業者に販売している。仕入方法は、生産者から委託された商品を販売し、その代金から卸売手数料を差し引いた金額を生産者に支払う委託仕入が主である。近年はU社が自ら商品を購入する買付仕入も増加している。販売方法には、複数の仲卸業者が互いに価格を競い合い、最も高い価格を付けた仲卸業者に販売する競りと、一人の販売担当者と一人の仲卸業者が話合いで価格を決める相対売りの二つがある。仕入方法は仕入区分として管理され、販売方法は販売区分として管理される。仕入金額は仕入明細のパレット数と単価との積の総和であり、仕入伝票の入力時に取引システムによって算出される。販売金額も仕入金額と同様の方法で求める。青果物は毎日売り切ることが原則となっており、在庫はもたない。販売した青果物が傷んでいた場合は、販売日の取引時間内だけ仲卸業者からの返品を受け付ける。
応用情報技術者試験(平成29年度 秋期 午後 問06 図02)
 現行のデータベースでは、E-R図のエンティティ名を表名にし、属性名を列名にして、適切なデータ型で表定義した関係データベースによって、データを管理している。   〔取引システムの改修〕  予約相対売りとは、卸売業者と仲卸業者との間において、あらかじめ締結した契約に基づき青果物を仕入・販売する取引である。仲卸業者は複数の品目、複数の産地、複数の販売予定日の青果物を一括で予約できる。このとき、生産者の指定はできない。販売担当者が仲卸業者の希望する品目、産地、パレット数、単価、販売予定日を予約日と仲卸業者の組合せを軸に取りまとめ、それが予約情報として取引システムに入力される。予約情報を取りまとめる軸は今後変更される可能性がある。予約情報は品目や産地に応じて各仕入担当者に割り当てられ、その情報も取引システムに入力される。仕入担当者は予約情報に基づいて必要な青果物を生産者から仕入れる。  予約情報を管理するために、図2のE-R図に、図3に示す予約エンティティ、予約明細エンティティ及び予約仕入対応エンティティを追加する。また、販売明細がどの予約明細に対応しているかを後から確認できるようにするために、予約明細エンティティの主キーを販売明細エンティティに外部キーとして加える。
応用情報技術者試験(平成29年度 秋期 午後 問06 図03)
〔販売伝票及び返品伝票の入力〕  取引時間は毎日午前3~11時である。販売担当者は毎日一人当たり300件以上の取引を行っている。取引を迅速に行うために、取引の現場では販売担当者と仲卸業者が合意した販売条件を紙の販売伝票に記録している。販売伝票のヘッダ部には販売日、販売区分、仲卸業者、販売担当者が記載され、明細部には販売した青果物の仕入番号、仕入明細番号、パレット数、単価が複数記載される。販売伝票は事務員が当日の日中にまとめて取引システムに入力している。  返品が発生した場合には、販売担当者が返品伝票に返品内容の詳細を記録し、それが販売伝票と同様の流れで取引システムに入力される。   〔取引日報の出力〕  各営業日の販売実績は取引日報としてまとめられ、販売部門長に報告される。取引日報は、各営業日の全伝票の入力が完了した後、当日中に出力する。販売部門長から各営業日の返品実績も報告するよう指示があり、新たに合計返品金額と合計返品数量を取引日報に出力することになった。出力結果は品目ごとに産地別に当日中に集計する。合計返品金額と合計返品数量を算出するためのSQL文を図4に示す。ここで、USING旬は名前付き列結合を示し、USING旬内の列名は内部結合における等比較結合の結合条件に用いられる。
応用情報技術者試験(平成29年度 秋期 午後 問06 図04)

設問1現行の取引システムのE-R図について、(1)、(2)に答えよ。

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

模範解答

a:→ b:↓ c:販売区分コード

解説

解答の論理構成

  • 【問題文】のエンティティ一覧によると、販売明細エンティティには
    仕入番号仕入明細番号
    が外部キーとして存在します。これは 1 行の販売明細が必ず 1 行の仕入明細を参照することを示すため、 仕入明細 ― 1 対 多 → 販売明細 となり、a は「→」です。
  • 「販売 → 販売明細」のリレーションは 1 対 多ですが、図2では販売エンティティが上、販売明細が下にレイアウトされています。よって矢印の向きは縦方向に下へ延びる形で描かれ、b は「↓」になります。
  • 【問題文】には
    「仕入方法は仕入区分として管理され、販売方法は販売区分として管理される。」
    とあります。さらに販売区分エンティティには主キーとして
    販売区分コード
    が定義されています。販売エンティティ側に販売方法を示す外部キーが必要なので、c に入るのは
    販売区分コード
    です。
以上から模範解答の
a:→
b:↓
c:販売区分コード
が導かれます。

誤りやすいポイント

  • 仕入明細と販売明細を「多対多」と誤認し、矢印を「←→」にしてしまう。外部キーの有無を確認すれば 1 対 多であることが分かります。
  • 矢印の向き(水平か垂直か)を問われていると気付かず、b に単に「→」と書いてしまう。図面上のレイアウトもヒントになります。
  • 販売エンティティに何の外部キーが必要かを読み飛ばし、c に「販売方法」や「販売区分名」を書いて失点する。外部キーは必ずコード項目になる点に注意が必要です。

FAQ

Q: 矢印の向きまで採点対象になるのですか?
A: はい。図2の凡例では「→」「↓」などの向きでリレーションシップを表すと明記されているため、向きが違うと誤答になります。
Q: 「販売区分コード」は主キーではなく外部キーだから破線下線なのですか?
A: その通りです。図2の注記には「属性名の破線下線は外部キーを示す」とありますので、販売エンティティ側では破線下線で表記します。
Q: もし販売方法が将来増えてもリレーションは変わりますか?
A: 販売区分エンティティにレコードを追加するだけで対応できます。リレーションシップ構造自体は 1 対 多のまま変わりません。

関連キーワード: 外部キー、1対多関係、カーディナリティ、エンティティ関係図、主キー

設問1現行の取引システムのE-R図について、(1)、(2)に答えよ。

(2)図2中で、他の属性から求めることが可能であるが、処理性能を改善するために追加されている属性の属性名を全て答えよ。

模範解答

仕入金額、販売金額

解説

解答の論理構成

  1. 設問は「他の属性から求めることが可能であるが、処理性能を改善するために追加されている属性」を問うています。つまり
    ①計算で導出できる ②あえて物理列として保持している
    という 2 点を同時に満たす属性を探します。
  2. 【問題文】には次の記述があります。
    • 「仕入金額は仕入明細のパレット数と単価との積の総和であり、仕入伝票の入力時に取引システムによって算出される。」
    • 「販売金額も仕入金額と同様の方法で求める。」
      ここで両者は “算出される” と明言されており、計算で求められる属性であることが分かります。
  3. 図2のエンティティ「仕入」には属性「仕入金額」、エンティティ「販売」には属性「販売金額」がそれぞれ存在します。これらは
    • 仕入明細の「パレット数 × 単価」の合計
    • 販売明細の「パレット数 × 単価」の合計
      という集計結果であり、別に保持しなくても導出可能です。
  4. しかし大量データを毎回集計すると販売伝票 300 件 / 日 × 多明細の計算負荷が高くなるため、トランザクション入力時に確定値を保存し読み取りを高速化しています。
  5. よって「処理性能を改善するために追加されている」導出属性は
    仕入金額、販売金額
    であると結論付けられます。

誤りやすいポイント

  • “パレット数” や “単価” を選んでしまう
    いずれも入力値であって導出項目ではありません。
  • 図2のリレーションシップに気を取られ、図3の新規エンティティを調べてしまう
    設問対象は「図2中」であり、改修後の予約系は関係ありません。
  • 「販売金額は販売明細から算出できるのでは?」という疑念
    その疑念こそが設問の狙いで、だからこそ “追加されている” 属性と判断できます。

FAQ

Q: なぜ正規化の観点から冗長属性を残してもよいのですか?
A: トランザクション量が多く読み取り性能が最優先だからです。設計では正規化と性能のトレードオフを考慮し、更新タイミングが明確で再計算コストが大きい場合は冗長属性を許容します。
Q: もし「仕入金額」を保持しなかった場合の影響は?
A: 仕入明細テーブルを毎回 SUM(パレット数×単価) 集計する必要があり、伝票 1 件につき複数行を読みに行くため I/O と CPU への負荷が増大します。
Q: “追加されている” という表現は何を示していますか?
A: 本来の論理モデル(正規形)には不要だが、物理実装時にパフォーマンス目的で列を増やす「派生属性」「集計カラム」を意味します。

関連キーワード: 派生属性、正規化、冗長化、集計処理、性能チューニング

設問2〔取引システムの改修〕について(1)、(2)に答えよ。

(1)図3中のdeに入れる適切な属性名を、図2中の用語を用いて、全て答えよ。属性名の表記は図2の凡例及び注記に倣うこと。

模範解答

d:仲卸業者コード e:品目コード産地コード、パレット数、単価、仕入担当者コード

解説

解答の論理構成

  1. まず、予約エンティティがどの相手と紐付くかを確認します。問題文には
     「仲卸業者は複数の品目、複数の産地、複数の販売予定日の青果物を一括で予約できる。」
     とあり、予約は “仲卸業者” との契約情報であることが明示されています。したがって、予約エンティティには仲卸業者を識別する属性が必須です。図2で仲卸業者を一意に識別するのは「仲卸業者コード」なので、d には
     仲卸業者コード
     を設定します。外部キーであることを示す破線下線も忘れません。
  2. 次に予約明細エンティティに格納すべき項目を整理します。問題文には
     「販売担当者が仲卸業者の希望する品目、産地、パレット数、単価、販売予定日を予約日と仲卸業者の組合せを軸に取りまとめ…」
     とあります。また、  「予約情報は品目や産地に応じて各仕入担当者に割り当てられ…」
     とも記載されています。ここから、各予約明細行には少なくとも以下が必要になります。
     ・品目を識別するコード
     ・産地を識別するコード
     ・パレット数
     ・単価
     ・どの仕入担当者に割り当てたかを示すコード
 これらはすべて既存エンティティ(品目、産地、従業員)に対応しているため、コード属性には破線下線を付けます。よって e が示す属性一覧は
 品目コード産地コード、パレット数、単価、仕入担当者コード
 となります。
  1. 以上より、模範解答のとおり
     d:仲卸業者コード
     e:品目コード産地コード、パレット数、単価、仕入担当者コード
     が導けます。

誤りやすいポイント

  • 予約エンティティと予約明細エンティティを混同し、〈仲卸業者コード〉を明細側に入れてしまう。予約単位で1社に対応するため、仲卸業者コードは親エンティティに置くのが自然です。
  • 「仕入担当者は予約情報に基づいて…」という記述を読み落とし、〈仕入担当者コード〉を明細属性に含めない。仕入担当者の割当ては品目・産地ごとに異なる可能性があるため明細側に必要です。
  • パレット数・単価を数値属性ではなくコード扱いにして破線下線を付けてしまう。これらはマスタ参照ではないので外部キーにはなりません。

FAQ

Q: 予約エンティティに〈販売担当者コード〉がすでにあるのに、仲卸業者コードも必要ですか?
A: 必要です。〈販売担当者コード〉は社内の担当者、〈仲卸業者コード〉は取引先を表すため役割が異なります。両方があって初めて「誰が」「どの仲卸と」契約した予約かを特定できます。
Q: 仕入担当者コードを予約エンティティに置いてはいけませんか?
A: 適切ではありません。仕入担当者の割当ては品目・産地ごとに決まるので、明細粒度で管理する方が現実の業務フローに合致します。
Q: 明細に単価があるのに、予約エンティティにも予約金額があります。重複しませんか?
A: 重複ではなく集計用です。予約金額は明細の「パレット数×単価」の総和を管理し、検索や帳票出力を高速化するために保持しています。

関連キーワード: エンティティ関係、外部キー、多重度、正規化、モデリング

設問2〔取引システムの改修〕について(1)、(2)に答えよ。

(2)図3中の予約エンティティにおいて、主キーに代用キーとして予約番号を用いる理由を、本文中の用語を用いて、35字以内で述べよ。

模範解答

予約情報を取りまとめる軸は今後変更される可能性があるから

解説

解答の論理構成

  1. 取引システム改修では、図3に新しく追加する「予約」エンティティの主キーを決める必要があります。
  2. 本文には、予約情報の集約単位について「予約情報を取りまとめる軸は今後変更される可能性がある」と明示されています。
  3. 集約軸(品目や産地、販売予定日など)が変わると、自然キー(項目の組合せ)では一意性が保証できなくなる恐れがあります。
  4. 変更影響を最小化し、常に一意性を保てるよう、業務とは独立した人工的なキー=代用キー(予約番号)を採用するのが合理的です。
  5. 以上より、主キーに代用キーとして予約番号を用いる理由は「予約情報を取りまとめる軸は今後変更される可能性があるから」となります。

誤りやすいポイント

  • 自然キー(品目+産地+販売予定日など)でも一意になると早合点し、後から軸が変わるリスクを見落とす。
  • 「代用キー=オートナンバー」という単純な暗記で理由を答えられない。背景として“変更に強い設計”を説明できないと部分点を失う。
  • 「将来の追加属性に備える」といった漠然とした回答で、本文のキーワード「予約情報を取りまとめる軸」を引用し忘れる。

FAQ

Q: 代用キーとサロゲートキーは同じ意味ですか?
A: 本試験ではほぼ同義で扱われます。業務属性とは無関係な人工的な主キーを指す点が共通です。
Q: 自然キーをやめても、業務上の検索は大丈夫でしょうか?
A: 検索には品目コードや産地コードを普通に使えます。主キーを代用キーにしたからといって検索条件に制限はありません。
Q: 主キー変更はどのくらい影響が大きいのですか?
A: 主キーは外部キーとして他表にも参照されます。自然キーが変わるたびに関連テーブル全体を更新することになり、運用コストとリスクが高まります。

関連キーワード: 代用キー、自然キー、ER図設計、一意性制約、データベース正規化

設問3

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

模範解答

f:SUM(t2.単価 * t1.パレット数) g:INNER JOIN 仕入明細 USING (仕入番号、仕入明細番号) h:「品目コード、品目名、産地コード、産地名」   又は   「品目コード、産地コード」

解説

解答の論理構成

  1. 返品金額を算出する列 f
    • 返品伝票には単価が存在せず、金額を求めるには別表から単価を取得する必要があります。
    • 【問題文】では「販売伝票の明細部には…パレット数、単価が複数記載される。」と述べられ、さらに「返品が発生した場合には…返品伝票に返品内容の詳細を記録」するとあります。したがって単価は“販売明細”側にあり、数量(パレット数)は“返品”側にあります。
    • 金額集計には単価 × パレット数 を合計する SUM(t2.単価 * t1.パレット数) が適切です。
  2. 品目・産地情報を得る結合句 g
    • 返品→販売明細の結合は SQL 4 行目で済んでいますが、品目コードと産地コードは販売明細に直接はありません。
    • 【問題文】で「販売明細 → 仕入明細」は“多対多”のリレーションシップが示され、販売明細が保持する 仕入番号、仕入明細番号 で“仕入明細”にたどれます。
    • よって、品目・産地を取得するために “仕入明細” を追加結合します。キーは両表に共通する 仕入番号、仕入明細番号 なので
      sql INNER JOIN 仕入明細 USING (仕入番号、仕入明細番号)
  3. 集計対象列 h
    • SELECT 句に列挙した4列(品目コード、品目名、産地コード、産地名)はグループ化対象にするか、別途集約関数で処理する必要があります。
    • これら4列は“品目”と“産地”から得た「コード」「名称」のセットであり、どちらも同一キーでグループ化できるので、試験では
      • 品目コード、品目名、産地コード、産地名
      あるいは冗長性を避けて名称列を省き
      • 品目コード、産地コード
      のいずれも正答とされています。

誤りやすいポイント

  • 返品金額計算に t1.単価 を用いる誤り
    (返品表に単価は無い)。
  • g で“販売”や“品目”と結合してしまうミス
    (品目コードは“仕入明細”にある)。
  • GROUP BY に数量や集計列を含めてしまう
    (集約関数の結果列は GROUP BY 不要)。
  • USING 句の列を書き忘れ、ON 句で冗長に指定してしまう。

FAQ

Q: INNER JOIN 仕入 を経由しても品目コードは取得できますか?
A: 直接は取得できません。“仕入” には品目単位の情報がなく、詳細は “仕入明細” に保持されています。
Q: GROUP BY 品目コード、産地コード だけで名称列を SELECT しても良いのですか?
A: 多くの DB では非集約列はすべて GROUP BY に含める必要があります。名称列を省けば整合性が保たれるため、許容解として提示されています。
Q: SUM(t2.単価 * t1.パレット数) を SUM(t2.単価) * SUM(t1.パレット数) にしてはいけませんか?
A: いけません。後者は単価と数量を別々に加算して掛け合わせるため、実際の総金額と一致しなくなります。

関連キーワード: SQL集計、内部結合、外部キー、集約関数、GROUP BY
戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する

すぐに利用可能!

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

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