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

応用情報技術者 2021年 秋期 午後08


データ中心設計に関する次の記述を読んで、設問1~4に答えよ。

 X社は、30店舗をもつスーパーマーケットチェーンである。X社の店舗は、地域の顧客ニーズに合わせた商品選定、販売戦略によって、売上げを伸ばしている。  X社では、Webサイトで購入した商品を自宅に配送するサービス(以下、ネットスーパーという)を3年前から開始している。近年、他社も同様のサービスを開始し、競争が加熱している。  X社のネットスーパーを支える情報システム(以下、現行システムという)は、システム機能の追加や変更(以下、機能変更という)が多く、ソフトウェアが肥大化、複雑化している。そこで、X社では、顧客や店舗スタッフからの機能変更の要求に迅速に対応することを目的に、新しいネットスーパーシステム(以下、新システムという)を構築することにした。新システムの開発は、システム部門のY君が担当することになった。   〔システム設計方法の調査〕  Y君は、機能変更を繰り返しても、ソフトウェアの構造が複雑になりにくく、変更容易性の高いシステムが構築可能なデータ中心設計について調査した。  X社がこれまで採用してきたa中心設計は、データの設計に先行して機能を設計し、機能に合わせて必要なデータを設計する手法である。この手法を用いると、業務要件が変わると機能もデータも変更が必要となる。  一方で、データ中心設計は、データの構造は機能と比較して変わりにくいという点に注目し、機能の設計に先行してデータの設計を行う手法である。データを中心に設計することで、機能変更時にもデータの変更を少なくできる。
〔現行システム機能の調査〕  Y君は、現行システムの三つの機能と機能変更の頻度について調査した。
(1) 顧客管理機能  顧客情報を登録、更新するための機能。顧客には、顧客種別として、個人顧客と法人顧客があり、個人顧客には一般個人顧客と✕社電子マネーをもつ会員個人顧客がある。この機能は、過去3年間に顧客種別の追加に関する機能変更が1回だけあ (2) 商品表示機能  顧客へ商品を表示する機能。商品には、商品種別として、通常商品のほか、通常商品を束ねたセット商品、特売商品、タイムセール商品、事前に予約することによって通常商品を割引価格で購入できる事前予約商品、及び顧客の購入履歴から算出したお勧め商品がある。商品種別ごとに画面の表示方法が異なる。この機能は、顧客にX社のネットスーパーを選択してもらうための重要な機能であり、商品種別の追加に関する機能変更が多い。 (3) 購入機能  顧客が商品を購入し、料金を支払う機能。料金支払には、X社電子マネー、クレジットカード、銀行振込、3種類の他社の電子マネーが利用できる。この機能への機能変更は多くない。   〔概念データモデルの設計〕  Y君は、現行システム機能の調査及び現行システムの関係者に対するヒアリングを行い、新システムが管理するデータの概念データモデルを設計した。図1にY君が設計した概念データモデル(抜粋)を示す。
応用情報技術者試験(令和3年度 秋期 午後 問08 図01)
 この概念データモデルのうち、通常商品と事前予約商品はc関係、通常商品とお勧め商品はd関係である。   〔顧客管理機能の設計〕  Y君は、顧客管理機能については、システム性能に重点を置きつつ、顧客管理機能への変更が他機能に与える影響を小さくする設計とした。図2にY君が設計した顧客管理機能の論理テーブルとソフトウェアのクラス図(抜粋)を示す。
応用情報技術者試験(令和3年度 秋期 午後 問08 図02)
 Y君は、顧客管理機能の論理テーブルとして、①顧客種別、顧客、個人顧客、法人顧客の四つのテーブルを設計した。また、ソフトウェアの設計として、②ソフトウェアの肥大化を防止するために顧客クラスを定義し、顧客クラスを継承するクラスとして一般個人顧客、会員個人顧客、法人顧客の三つのクラスを設計した。   〔商品表示機能の設計〕  Y君は、商品表示機能は機能変更の頻度が高いことを考慮し、システム性能よりも変更容易性に重点をおいた設計とした。図3にY君が設計した商品表示機能の論理テーブルとソフトウェアのクラス図(抜粋)を示す。
応用情報技術者試験(令和3年度 秋期 午後 問08 図03)
 Y君は、商品表示機能の論理テーブルとして、③特売商品テーブル、セット商品テーブルなど商品種別ごとに多数のテーブルを作成するのではなく、商品種別と商品の二つのテーブルを作成し、運用環境へのリリース時の作業量を低減する設計とした。また、ソフトウェア設計としては商品クラスを定義するとともに、④商品種別ごとに個別のクラスを設計した。  その後Y君は、新システムの設計及び構築を完了させ、X社は新システムを用いたネットスーパーのサービスを開始した。

設問1

本文中のaに入れる、データ中心設計と対比される適切な字句を答えよ。

模範解答

a:プロセス

解説

解答の論理構成

  1. 問題文では、データ中心設計と対比される設計手法について
    「“X社がこれまで採用してきたa中心設計は、データの設計に先行して機能を設計し、機能に合わせて必要なデータを設計する手法である。”」
    と述べています。
  2. キーワードは「機能を設計」→業務処理や処理手順(プロセス)から先に決めることを指します。
  3. 伝統的に、データ中心設計の対概念は “プロセス中心設計” と呼ばれ、処理(プロセス)を起点にシステムを組み立てます。
  4. よって a に入るのは「プロセス」であり、解答は
    a:プロセス
    となります。

誤りやすいポイント

  • 「機能中心」「機能指向」と答えてしまう
    └ 設問は用語を “中心設計” という枠組みで対比しているため、「プロセス中心設計」という正式呼称が求められます。
  • 「手続き」「アルゴリズム」など細部に引きずられる
    └ 機能の定義=処理手順=プロセスという一般的な整理を押さえると迷いません。
  • “データ駆動” と“データ中心”を混同
    └ データ駆動は実装寄りの概念、ここでは上流設計手法の名称が問われています。

FAQ

Q: 「機能中心設計」では不正解になるのでしょうか?
A: 試験では一般的に「データ中心設計」と対で使われる正式名称「プロセス中心設計」を解答としています。
Q: “プロセス” と “機能” の違いは?
A: 業務を流れる一連の処理手順を抽象化したものを “プロセス” と呼びます。設計工程でそのプロセスを先に決める手法がプロセス中心設計です。
Q: データ中心設計の利点は何ですか?
A: 「機能の設計に先行してデータの設計を行う」ため、機能変更があってもデータ構造は変わりにくく、保守性が高まります。

関連キーワード: データ中心設計、プロセス中心設計、概念データモデル、変更容易性

設問2〔概念データモデルの設計〕について、(1)~(3)に答えよ。

(1)図1中のbの字句を使って答えよ。に入れる適切な字句を〔現行システム機能の調査]内の字句を使って答えよ。

模範解答

b:購入

解説

解答の論理構成

  1. 図1では「顧客──〈←→〉──b──〈→〉──商品」という関連が描かれています。
    • 「顧客」と「商品」の間に多対多が存在し、その解消用に中間エンティティ b が置かれていることが分かります。
  2. 中間エンティティの名称は【現行システム機能の調査】にある業務用語から選ぶよう指示されています。
    • 同箇所には「(3) 購入機能 顧客が商品を購入し、料金を支払う機能。」という記述があります。
  3. 顧客と商品を結び付ける業務行為は「購入」に相当し、しかも「購入」はエンティティとして実体(購入日時、数量、金額など)を持つのが自然です。
  4. さらに図1では b と商品の間が「1対多」となっています。
    • 1つの購入に対し複数の「商品」が紐付く=1回の購入で複数商品を買う、という実態を表しています。
  5. 以上より、中間エンティティ b に入る適切な字句は【現行システム機能の調査】内の「購入」であることが論理的に導けます。

誤りやすいポイント

  • 「支払」や「注文」と混同しやすい
    「支払」は決済手段との関連性が強く、図1では別途「支払」サブタイプが示されているため不適切です。
  • cardinality の読み違え
    「1対多」を「多対多」と誤認すると「購入明細」など別名を考えてしまいがちです。
  • 【問題文】以外の造語を入れてしまう
    設問は「〔現行システム機能の調査〕内の字句を使って答えよ」と明示しているため、そこに掲載されていない語を選ぶと失点します。

FAQ

Q: 「購入」と「注文」はどう違うのですか?
A: 本問の文脈では「顧客が商品を購入し、料金を支払う機能」と記述され、実際の決済まで完了する行為を「購入」と呼んでいます。単にカートに入れた段階の「注文」とは範囲が異なります。
Q: もし複数決済がある場合、b の後ろにさらにエンティティを設けるべきですか?
A: 決済手段は図1右側の「支払」サブタイプ群で別エンティティ化されています。購入と支払は1対1または1対多で関連付ける設計が一般的です。
Q: 多対多を解消する中間エンティティは必ず実体を持つのですか?
A: 構造上はキーだけでもよい場合がありますが、業務的に属性(購入日時、合計金額など)が必要なら実体エンティティとして扱うのが望ましいです。

関連キーワード: エンティティ関連図、多対多解消、中間エンティティ、概念データモデル、データ中心設計

設問2〔概念データモデルの設計〕について、(1)~(3)に答えよ。

(2)図1中の通常商品を始点とし通常商品を終点とする1対多の関連は何を意味するか〔現行システム機能の調査〕内の字句を使って答えよ。

模範解答

セット商品

解説

解答の論理構成

  1. 図1には、エンティティ「通常商品」から同じ「通常商品」へ向かう 1対多 の自己関連が描かれています。
  2. この自己関連が何を示すかは、【現行システム機能の調査】の(2) 商品表示機能に記載された商品種別の説明から読み取ります。
  3. 同説明には、商品種別として
    「通常商品のほか、通常商品を束ねたセット商品、特売商品、…」
    とあります。
  4. 「通常商品を束ねた」という表現は、1つの“束ね役”となるエンティティ(親の通常商品)が複数の“束ねられる”エンティティ(子の通常商品)を持つ構造を示唆します。これはまさに1対多の自己関連の意味です。
  5. よって、該当する関連が表す概念は 「セット商品」 です。

誤りやすいポイント

  • 自己関連を「お勧め商品」や「事前予約商品」と取り違える
  • 矢印の方向に着目せず、多対多や1対1と混同する
  • 【現行システム機能の調査】以外の文章を根拠にしてしまい、指定どおりの字句を使えない
  • 「セット商品」を「バンドル商品」など別表現に置き換えてしまう

FAQ

Q: 自己関連なのに「セット商品」という別エンティティ名を答えるのは矛盾しませんか?
A: 図1では“束ね役”も“束ねられる側”も同じ「通常商品」エンティティですが、その構造が現実世界で意味するのが「通常商品を束ねたセット商品」だからです。
Q: なぜ多対多ではなく1対多なのですか?
A: 1つのセット商品(親)に含まれる通常商品(子)は複数あり得ますが、子の通常商品が複数のセットに同時所属する要件は示されていないため1対多と判断します。
Q: 「セット商品」はエンティティではなく商品種別なのでは?
A: 図1の自己関連はエンティティ間の関係を示し、その背後にある業務概念が商品種別「セット商品」という意味合いになります。

関連キーワード: 自己関連、1対多、商品種別、抽象化

設問2〔概念データモデルの設計〕について、(1)~(3)に答えよ。

(3)本文中のcdに入れる適切な字句を、解答群の中から選び、記号で答えよ。
解答群  ア:共存  イ:排他  ウ:包含

模範解答

c:ウ d:ア

解説

解答の論理構成

  1. 問題は、概念データモデルにおけるサブタイプ間の集合関係を問うています。選択肢は「ア:共存」「イ:排他」「ウ:包含」の三つです。
  2. まず「通常商品」と「事前予約商品」の関係を確認します。本文には
    「事前に予約することによって通常商品を割引価格で購入できる事前予約商品
    とあります。ここから「事前予約商品」は「通常商品」を基に派生した下位集合であり、全ての事前予約商品は必ず通常商品に含まれます。よって集合関係は“包含”となり、c=「ウ:包含」と判断できます。
  3. 次に「通常商品」と「お勧め商品」の関係を確認します。本文には
    「顧客の購入履歴から算出したお勧め商品
    とあり、算出結果として任意の通常商品が「お勧め商品」に選ばれるだけで、両者は相互に重複してもよい関係です。片方が必ず他方を含むわけでも、排他的でもありません。したがって“共存”関係となり、d=「ア:共存」と決定されます。

誤りやすいポイント

  • 「事前予約商品」が図上で「特売商品」の下位に描かれているため、通常商品とは無関係と誤解しやすいです。本文に書かれた定義を優先しましょう。
  • 「お勧め商品」は機械的に算出されるため“特別な別物”と考え「排他」としてしまうミスが多いです。実際には通常商品ラベルを付けたまま“お勧め”ラベルが重畳するイメージです。
  • “包含”と“共存”の違いを「サブタイプ階層か否か」で短絡的に判断しがちですが、集合論的に読み取ることが必要です。

FAQ

Q: 「包含」と「共存」を素早く見分けるコツはありますか?
A: ある集合Aのメンバーが必ず集合Bにも属するなら「包含」です。両集合に重複は許されるが必ずしも片方が他方へ完全に含まれない場合は「共存」です。
Q: 「排他」になる典型例は何でしょうか?
A: 「未成年顧客」と「成年顧客」のように、同一時点で同じエンティティが両方に属することが論理的にありえない場合が排他に当たります。
Q: 図のサブタイプ三角形だけで関係を決めてもよいですか?
A: 図だけでは不十分です。本文の業務定義が優先されるため、必ず文章を読んで集合関係を確定させてください。

関連キーワード: ER図、サブタイプ、包含関係、共存関係、データ中心設計

設問3〔顧客管理機能の設計〕について、(1)、(2)に答えよ。

(1)本文中の下線①について、一般個人顧客と会員個人顧客を二つのテーブルに分けるのではなく個人顧客というテーブルとした理由として、ふさわしくないものを解答群の中から選び、記号で答えよ。
解答群  ア:一般個人顧客と会員個人顧客で属性に大きな差がないから  イ:顧客種別には、多くの変更が入らないことが予想されるから  ウ:テーブルへの列追加時に顧客管理機能のソフトウェアの影響調査の範囲が小さくなるから  エ:販売実績の集計などを行う場合に、二つのテーブルではテーブル結合が多くなり、データベースサーバの負荷が大きいから

模範解答

解説

解答の論理構成

  1. 変更頻度の確認
    【問題文】では顧客管理機能について「過去3年間に顧客種別の追加に関する機能変更が1回だけ」と述べられています。したがって顧客種別に関する変更は少なく、テーブル構造を複雑化させる必要性は高くありません。
    → 選択肢「イ」は妥当な理由です。
  2. 属性差異の有無
    一般個人顧客と会員個人顧客は、会員かどうかを除けば共通項目がほぼ同一です。
    → 「属性に大きな差がない」ので一つのテーブルで管理する設計は合理的です。
    → 選択肢「ア」は妥当な理由です。
  3. 集計・分析クエリの効率
    販売実績集計など全個人顧客を横串で扱う処理では、テーブルが分かれていると JOIN や UNION が増えます。単一テーブルなら単純な集計で済むのでデータベース負荷を抑えられます。
    → 選択肢「エ」は妥当な理由です。
  4. 列追加時の影響範囲
    個別テーブル方式なら、例えば会員属性を追加しても一般個人顧客テーブルには影響しません。逆に単一テーブルでは列追加が全レコードに及び、ソフトウェアの影響調査範囲は広がります。
    → 「テーブルへの列追加時に…影響調査の範囲が小さくなる」という説明は実際とは逆で、不適切です。
    → 選択肢「ウ」がふさわしくない理由となります。
よって、答えは【ウ】です。

誤りやすいポイント

  • 「列追加=影響縮小」と早合点する
    単一テーブル設計では列追加・変更が全行・全画面に及ぶため、実際には影響調査が増えます。
  • 「変更が少ない=別テーブルにすべき」と誤解
    変更頻度が低いものは安定しているため、設計を簡潔にまとめた方が保守性が高まるケースが多いです。
  • 集計性能と正規化のバランスを取り違える
    正規化だけに注目して細分化し過ぎると、読み取り主体のシステムでは集計クエリが複雑化し性能を損なう恐れがあります。

FAQ

Q: 個人顧客テーブルをさらに正規化しても問題ありませんか?
A: 正規化は冗長性排除が目的ですが、アクセス頻度や集計要件を無視すると性能が低下します。本問のように「変更容易性」と「性能」を両立させるため、必要最小限の正規化にとどめています。
Q: テーブル統合で NULL が増えるのは問題になりませんか?
A: NULL 列の存在自体は許容できますが、頻繁に検索条件に使われる場合はインデックス設計で工夫が必要です。今回の設計では属性差が小さいため NULL 列が大量に発生する想定ではありません。
Q: 「顧客種別コード」があるなら個人顧客と法人顧客も一つのテーブルにできませんか?
A: 可能ですが、法人顧客専用列(担当者名など)が多く存在し、NULL 列が増え過ぎるため分割しています。属性量・利用頻度・将来拡張を考慮して二層構造(顧客+個人/法人)としています。

関連キーワード: データ中心設計、正規化、テーブル分割、集計性能、影響分析

設問3〔顧客管理機能の設計〕について、(1)、(2)に答えよ。

(2)本文中の下線②について、顧客クラスを定義することでソフトウェアの肥大化が防止できるのはなぜか、30字以内で述べよ。

模範解答

顧客種別によらない共通な処理を一か所で定義できるから

解説

解答の論理構成

  • 【問題文】には「“②ソフトウェアの肥大化を防止するために顧客クラスを定義し、顧客クラスを継承するクラスとして一般個人顧客、会員個人顧客、法人顧客の三つのクラスを設計した。”」とある。
  • 「顧客」クラスには【図02】に示される「顧客番号」「顧客種別コード」「配送先住所」「配送先氏名」「配送先電話番号」など、顧客種別に関係なく共通する属性・メソッドがまとめられている。
  • サブクラス(一般個人顧客、会員個人顧客、法人顧客)は、自分に固有の要素だけを追加し、共通要素は親クラスを継承して利用する。
  • したがって、同じコードや処理を複数クラスに重複して持つ必要がなくなり、実装量の増加を抑制できる。
  • よって「顧客種別によらない共通な処理を一か所で定義できるから」という結論になる。

誤りやすいポイント

  • 「共通処理が一か所」と言及せず「継承を使うから」とだけ述べてしまい、理由が曖昧になる。
  • 「属性をまとめたから」と属性面だけを書き、メソッド(処理)を統合した意義に触れない。
  • 「コード量が減る」と効果だけを書き、なぜ減るのか(重複排除)を示さない。

FAQ

Q: 継承ではなくインタフェース実装でも肥大化防止は可能ですか?
A: 共通実装を一か所に集約する点では、具象クラスの継承の方がコード共有量が多く、今回の目的に合っています。インタフェースだけでは実装共有ができず肥大化抑止効果は限定的です。
Q: もし顧客種別がさらに増えた場合、追加作業はどこが楽になりますか?
A: 新しい顧客種別のサブクラスを作成し、固有部分のみ実装すればよいので、既存の共通処理を修正する必要が原則ありません。
Q: データベース側のテーブル数を減らすこととクラス継承は独立ですか?
A: はい。テーブルは論理データ設計、クラス継承はソフトウェア設計の話で、目的は同じ変更容易性でも適用層が異なります。

関連キーワード: データ中心設計、継承、再利用性、共通処理、重複排除

設問4〔商品表示機能の設計〕について、(1)、(2)に答えよ。

(1)本文中の下線③の設計とすることで、商品種別を追加した際に、運用環境へのリリース時にどのような作業を任減できるか、20字以内で述べよ。

模範解答

データベースへのテーブル追加作業

解説

解答の論理構成

  • 本文には「③特売商品テーブル、セット商品テーブルなど商品種別ごとに多数のテーブルを作成するのではなく、商品種別と商品の二つのテーブルを作成し、運用環境へのリリース時の作業量を低減する設計」と記載されています。
  • この設計方針により、商品種別を追加しても既存の二つのテーブルに行やデータを追加するだけで済み、新しい物理テーブルは不要になります。
  • 運用環境へリリースする際に最も手間が掛かるのはスキーマ変更に伴う DDL 実行・権限設定・バックアップ調整などのデータベース作業です。
  • したがって、商品種別追加時に「テーブルを増やさなくて済む」ことこそが“作業量を低減”の中核であり、答えは「データベースへのテーブル追加作業」となります。

誤りやすいポイント

  • 「画面やクラスの追加作業」と誤解し、データベース作業ではないと答えてしまう。
  • 「列追加」と混同し、テーブル構造そのものを増やさない設計だと読み取れない。
  • 「運用環境=本番サーバー全体のデプロイ」と広く捉え、具体的な作業名を書かずに抽象的に答えて減点される。

FAQ

Q: 商品種別追加時にプログラム改修は本当に不要なのですか?
A: クラス図では「④商品種別ごとに個別のクラス」を用意しているため、画面表示仕様が異なる場合はプログラム側のクラス追加が必要です。ただしデータベースに新テーブルは不要です。
Q: 二つのテーブルだけで性能は問題ないのでしょうか?
A: 本設計は変更容易性を優先しており、必要に応じてインデックスやパーティショニングで性能を補います。高頻度の変更が予想される領域では、テーブル乱立より保守性を重視するのが一般的です。
Q: 将来さらに複雑な商品種別が増えた場合の拡張方法は?
A: 共通項目は「商品」テーブルに、種別固有項目は可変長 JSON 列や別サブテーブルで保持する方法があります。いずれもスキーマの大幅変更を防ぐ点がメリットです。

関連キーワード: データ中心設計、概念データモデル、正規化、リリース作業、拡張性

設問4〔商品表示機能の設計〕について、(1)、(2)に答えよ。

(2)本文中の下線④について、Y君が商品種別ごとにクラスを定義した理由を、商品表示機能の特徴の観点から20字以内で述べよ。

模範解答

画面の表示方法が異なるから

解説

解答の論理構成

  • 商品表示機能の要件として、問題文は「商品種別ごとに画面の表示方法が異なる」と明示しています。
  • 表示ロジックが種別ごとに異なる場合、共通部分(商品共通属性)と差分(種別固有の表示処理)を切り分けると保守性が高まります。
  • そこで Y 君は「商品クラス」を上位に置き、下線部④で「商品種別ごとに個別のクラス」を設計しました。
  • こうすることで、異なる表示処理をそれぞれの下位クラスに実装でき、「機能変更の頻度が高い」商品表示機能でも変更の局所化が可能になります。
  • 以上から、クラス分割の直接的な理由は「画面の表示方法が異なるから」となります。

誤りやすいポイント

  • 「商品種別が多い」こと自体を理由に挙げてしまい、表示方法の違いに触れない。
  • データベース設計(テーブルを2つにまとめた点)と混同し、テーブル構造の簡素化を理由に書いてしまう。
  • 「変更容易性」だけを抽象的に述べ、具体的に何が変わるのかを示さない。

FAQ

Q: なぜ共通の 画面表示() を上位クラスに置かず、下位クラスでオーバーライドするのですか?
A: 種別ごとに表示内容・レイアウトが異なるため、ポリモーフィズムで個別実装したほうが保守が容易になるからです。
Q: テーブルを2つにしたのにクラスは増やすのは矛盾しませんか?
A: テーブルは運用リリース作業を軽減するためにまとめ、クラスは表示ロジックの差分を吸収するために分けるという、目的の異なる設計判断です。
Q: 商品種別が追加された場合、どの部分を修正すればよいですか?
A: 新しい下位クラスを1つ追加し、そのクラスに固有の表示処理を実装すれば、既存クラスやテーブル定義を変更せずに対応できます。

関連キーワード: ポリモーフィズム、継承、表示ロジック、変更容易性
戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する

すぐに利用可能!

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

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