DBデータベーススペシャリスト試験 午後Ⅱ
令和5年度秋期 データベーススペシャリスト 午後Ⅱ 問1
事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。
問題















解き方のヒントを見る
前提の意味を一貫して捉える
検討を進める際は、同じ言葉や情報を途中で別の意味として扱っていないかに注目しましょう。与えられた条件に戻り、最初に置いた前提と、その後の判断で用いる前提が一貫しているかを確かめることが大切です。
この問題で問われていること
この問題では、検討の各段階で前提の意味が保たれているかという一点に着目してください。判断に迷った箇所は、与えられた条件と自分が補った想定を区別し、同じ意味のまま考えを進められているかを振り返りましょう。
視点
前提は、考えを進めるための土台です。途中で言葉の意味や条件の受け止め方が変わると、判断の根拠を追いにくくなります。考え始めたときと迷ったときに、同じ前提を用いているかを確認しましょう。
確認ポイント
- 同じ言葉を一貫した意味で扱っているか
- 途中で条件の受け止め方が変わっていないか
- 自分で補った想定によって前提を変えていないか
正解と解説を見る
解説
在庫管理の概念データモデルを業務ルールとして読み取り、Zチャートとヒートマップの問合せを設計する問題です。さらに、先入先出法による在庫評価、非同期処理での訂正と検証、金額の異常値、外部キーの参照関係を一貫して理解することが求められます。
問題の全体像
D社の在庫管理システムから、出荷量のZチャート、棚別の出庫頻度を示すヒートマップ、在庫回転率とその根拠となる計数を提供する事例です。既存の概念データモデルを理解し、分析用の問合せとテーブル、訂正を反映する処理を設計します。出題趣旨では、論理データモデルの理解、物理データモデルの設計、問合せの設計、データの意味と特性を説明する能力が挙げられています。分析値の精度と鮮度を、業務上の意味に結び付けて考えることが全体の軸です。
設問1(1)
図1の生産拠点と商品のリレーションシップ、商品がもつ拠点#に着目します。一つの商品に対応する生産拠点は一つですが、一つの生産拠点には複数の商品が対応します。公式解答例では、この両方向の読み方が示されています。25字以内の答案では、例えば公式解答例の「一つの商品は一つの生産拠点だけで生産する。」と、商品側から見た対応を簡潔に表します。
設問1(2)(b)
公式解答例では「①、④」です。在庫は物流拠点と商品に対応し、主キーは拠点#と商品#の組なので、物流拠点の商品別に在庫数量と引当済数量を記録します。全拠点を合計した在庫を別に記録する構造はなく、②は合致しません。また、商品のすべてについて各拠点に在庫行を作る関係ではないので、③も合致しません。記録の単位と、行の存在が必須かどうかを分けて読み取ります。
設問1(2)(c)
公式解答例では「②、③」です。商品と棚別在庫の関係から、一つの商品が複数の棚に対応できるので②が合致します。棚は拠点#と棚#の組で識別されるため、異なる拠点で同じ棚#を使えることから③も合致します。一方、図1の棚と棚別在庫の関係は、一つの棚に複数の商品を対応させる形ではありません。また、棚自体に保管商品を固定する属性もないので、①と④は合致しません。
設問1(2)(d)
公式解答例では「③」です。出荷先の請求先取引先#が、一つの請求先を指定するので③が合致します。表2には、一つの取引先が請求先と出荷先の両方に該当することもあると明記されており、④は合致しません。取引先には出荷先以外も含まれるので①も誤りで、請求先から見た出荷先が一つに限定されるわけでもないので②も誤りです。採点講評でも、スーパータイプと排他的ではないサブタイプの関係の理解が重点として挙げられています。
設問1(2)(e)
公式解答例では「②、④」です。入庫の主キーは拠点#と入庫#なので、入庫の実施単位をこの組で識別する②が合致します。入庫明細には入荷#、入荷明細#、棚#があり、一つの入荷明細を棚ごとに分けて記録する④も合致します。入荷ごとに一つの入庫#を直接対応させる構造ではないので①は合致しません。また、図1の入荷明細と入庫明細の関係は、入庫せずに出荷する③を表すものではありません。
設問1(2)(f)
公式解答例では「①、③、④」です。図1では出荷と出庫が一対一に対応し、出庫に出荷#を記録するので①が合致します。ただし、出荷に対応する出庫が存在しない場合も認められているので③も合致します。出荷明細と出庫明細を直接対応付ける明細番号はなく、②は合致しません。また、商品別の出荷数量と出庫数量の一致を強制する制約は表されていないので④が合致します。ヘッダ間の対応と明細間の対応を区別して読みます。
設問2(1)(累計出荷数量)
表1では、累計出荷数量を表示範囲の最初の年月から各年月までの月間出荷数量の合計と定義しています。このグラフが一定の傾きの直線なら、月ごとの増加分、すなわち月間出荷数量が一定だと読み取れます。公式解答例では「直近1年は毎月の出荷数量の増減がない。」です。30字以内では、対象が直近1年であることと、毎月の出荷数量が一定であることを押さえます。
設問2(1)(移動累計出荷数量)
移動累計出荷数量は、各月を終点とする12か月分の合計です。一月進むと前年同月の数量が集計範囲から外れ、当月の数量が加わります。そのため、右肩下がりなら、加わる当月の数量が外れる前年同月の数量を下回ると読み取れます。公式解答例では「各月の出荷数量が前年同月比で全て減少している。」が示されています。30字以内では、この前年同月との比較を表します。表示期間内の月間出荷数量そのものが減り続ける、と取り違えないことが重要です。
設問2(2)(ア)
公式解答例では「22」です。表示する最初の月は指定年月の11か月前ですが、その月の移動累計を求めるには、さらに11か月前までの月間出荷数量が必要です。したがって、T1の取得開始は指定年月の22か月前となり、指定年月を含めて計23か月分を取得します。採点講評でも、表示する12か月だけを考えて11と答えた誤りが指摘されています。表示範囲と、その計算に必要な入力範囲を区別します。
設問2(2)(イ)
公式解答例では「11行前の行」です。T2は年月の昇順に並べた月間出荷数量から、各月を終点とする12か月分の合計を求めます。現在の行を含めて12行にするため、開始位置は現在から11行前です。12か月分だから12行前とすると、現在の行を合わせて13行になる点に注意します。
設問2(2)(ウ)
公式解答例では「現在の行」です。移動累計出荷数量は、各年月とその11か月前までの数量を合計するため、集計範囲の終点は現在の年月を表す行です。イの11行前の行からウの現在の行までで、現在の月を含む12か月分になります。後続の月まで含めると、当該月時点の移動累計ではなくなります。
設問2(2)(エ)
公式解答例では「最初の行」です。T3は指定年月の11か月前から指定年月までの行を選択し、その表示範囲内で累計出荷数量を求めます。累計の開始位置は、選択された表示期間の最初の行です。T2で移動累計のために取得した過去の月まで、累計出荷数量に含めないように読み取ります。
設問2(2)(オ)
公式解答例では「現在の行」です。累計出荷数量は、表示期間の最初の月から各月までを合計した値なので、集計の終点は現在の行になります。エの最初の行とオの現在の行を組み合わせることで、月が進むたびに集計対象が増えます。最後の行まで合計すると全期間の合計になり、各月までの累計を表せません。
設問2(2)(カ)
公式解答例では「11」です。T3で表示対象に残すのは、指定年月と、その11か月前までを合わせた12か月分です。T1の22か月前という範囲は移動累計の計算に必要な入力範囲であり、T3では最終的なグラフの表示範囲まで絞り込みます。取得、計算、表示という各段階の対象期間を分けることが解答の根拠です。
設問2(3)(キ)
公式解答例では「T.棚#、 COUNT(S1.棚#)」です。S2は棚を基準にS1を左外部結合し、出庫のない棚も残して棚別の出庫回数を求めます。棚番号には基準側のT.棚#を使い、件数には結合先のS1.棚#を数えます。COUNTはNULLを数えないので、対応する出庫がない棚の出庫回数を0にできます。COUNT(*)では、外部結合で残った行まで数えてしまう点が違います。
設問2(3)(ク)
公式解答例では「GROUP BY T.棚#」です。依頼2は棚別に出庫回数を集計するため、棚番号でグループ化します。指定拠点はWHERE句で一つに限定されているので、このSQLではT.棚#でまとめれば棚ごとの集計になります。左外部結合で出庫のない棚も残しているため、基準側の棚番号でグループ化することが必要です。
設問2(3)(ケ)
公式解答例では「ORDER BY 出庫回数 DESC」です。表1には、棚別に集計した出庫回数が多い順に順位付けするとあります。したがって、RANK()のウィンドウ内では出庫回数の降順を指定します。棚番号順や出庫回数の昇順では、出庫頻度の高い棚を上位とする分類になりません。採点講評でも、集計、ソート、順位付けの処理とウィンドウ関数の理解が課題として挙げられています。
設問2(3)(コ)
公式解答例では「出庫回数順位 / COUNT(*)」です。後ろに既にあるOVER()と合わせると、出庫回数順位を全棚数で割る式になります。S3は棚ごとに一行なので、COUNT(*) OVER()が分類対象の棚数を求めます。この比率に100を掛け、20以下を「高」、そこから50以下を「中」、残りを「低」とします。出庫回数の構成比ではなく、棚の順位を全棚数に対する比率へ変換している点が重要です。
設問2(4)
公式解答例では「307と604の組」です。図4では、黒く示された307は出庫頻度が高い一方、矢印の最短順路から離れています。白く示された604は出庫頻度が低く、最短順路に面しています。この二つの商品を交換すれば、頻繁に出庫する商品への寄り道を減らせます。色で示された頻度と、順路からの位置の両方を比較することが解答の根拠です。
設問2(5)
公式解答例では、「棚別在庫」は行の更新、「倉庫内移動」は行の挿入です。棚別在庫には現在の棚と商品の在庫状況を記録するため、交換後の配置と数量を既存行に反映します。一方、倉庫内移動には移動年月日、商品#、移動数量、移動元棚#、移動先棚#があり、今回実施した移動を新しい履歴として追加します。現在の状態を変更する操作と、発生した作業を記録する操作を区別します。
設問3(1)(g)
公式解答例では「210」です。表5の09-12入荷後には、単価85円の在庫が260個、単価90円の在庫が150個あります。09-17の出荷50個は先入先出法により古い85円の在庫から払い出すので、残高数量は260−50=210個です。gは、この払出後の85円の在庫数量を表します。
設問3(1)(h)
公式解答例では「85」です。gの210個は、単価85円の在庫260個から50個を払い出した残りです。先入先出法では入荷ごとの単価を保持して残高を記録するので、数量が減っても、この在庫の単価は85円のままです。新しく入荷した90円の在庫と平均して評価するわけではありません。
設問3(1)(i)
公式解答例では「260」です。09-17の赤伝は、直前の50個の出荷を取り消すため、払出数量を−50個として記録します。払出後の210個からマイナスの払出を差し引くので、210−(−50)=260個に戻ります。赤伝は受入として扱うのではなく、訂正元出荷と同じ受払日付のマイナスの払出として扱うという本文の規則が根拠です。
設問3(1)(j)
公式解答例では「85」です。赤伝で取り消される50個は、単価85円の在庫から払い出されたものです。その払出を取り消すため、戻る在庫も同じ85円の在庫に対応します。赤伝後はこの在庫が260個になり、単価は変更されません。数量を戻すだけでなく、どの入荷に由来する在庫を戻すかを追うことが必要です。
設問3(1)(k)
公式解答例では「150」です。09-17の出荷50個も、それを取り消す赤伝も、古い単価85円の在庫だけを対象にしています。そのため、09-12に入荷した単価90円の在庫150個は変わりません。赤伝後の残高は、古い順に85円の260個、90円の150個となり、kには後者の数量が入ります。
設問3(1)(l)
公式解答例では「90」です。kの150個は、09-12の入荷に由来する在庫で、入荷時の単価は90円です。直前の出荷と赤伝でこの在庫は変動していないため、残高の単価も90円です。表5の残高を一つの合計として見るのではなく、入荷の古い順に数量と単価の組で追跡します。
設問3(2)(a)
本文では、同じ年月・拠点#・商品#の赤伝と黒伝をまとめて処理し、洗替えの起点を一行選びます。最も早い受払から再計算すれば、それ以降の訂正を一度の洗替えで反映でき、重複した再計算を避けられます。公式解答例では、入荷年月日又は出荷年月日、登録TSの昇順で先頭の行を選ぶ条件が示されています。35字以内では「入荷年月日又は出荷年月日、登録TSの昇順で先頭の行」と、列名と選択順序を押さえます。
設問3(2)(b)
連携WTから処理WTへ行を移した後も、入出荷の登録は続きます。洗替え時に元テーブルを読み直すと、その後に登録された入出荷まで取り込む可能性があるため、対象を計数格納処理の開始時点までに制限します。公式解答例では、登録TSが計数格納処理の開始日時以前である条件などが示されています。35字以内の答案では「登録TSが計数格納処理の開始日時以前であること」と表せます。採点講評でも、処理開始後の入出荷を除外する点への着目不足が指摘されています。
設問3(3)
求められるのは、実行した処理の結果を何と照合するかという具体的な確認方法です。公式解答例では、元の入出荷から作成した商品有高表と残高集計表の計数が、処理結果と一致することを確認する方法などが示されています。60字以内では「該当月・拠点・商品の入出荷から作成した商品有高表と残高集計表の計数を処理結果と照合する。」とまとめられます。採点講評では、テストの実行方法やテストケースだけを書く答案が指摘されています。比較対象と一致すべき値を明確にします。
設問3(4)(m)
公式解答例では「下降」です。先入先出法では古い入荷分から払い出すため、製造原価が上昇していると、払出には比較的低い単価、月末在庫には比較的高い単価が反映されます。金額の在庫回転率は当月払出金額を平均在庫金額で割るので、数量の回転率に比べ、分母となる在庫金額が大きくなりやすく、下降する傾向があります。原価上昇と先入先出法を組み合わせて考えます。
設問3(4)(n)
公式解答例では「入荷」です。表8では、2023-09の数量の在庫回転率は前月とほぼ同じなのに、金額の在庫回転率だけが極端に低くなっています。数量以外の入力値が金額評価に影響した可能性を考え、当月の入荷に設定された単価を調べます。そのため、受払明細の抽出条件は摘要区分=「入荷」となります。外れ値の検出だけで誤入力と断定せず、元になる値を確認します。
設問3(4)(o)
公式解答例では「単価」です。数量の回転率が通常の水準でも、入荷単価が不正なら在庫や払出の金額評価が変わり、金額の回転率だけが異常になることがあります。したがって、該当年月・拠点・商品の入荷行について、単価に不正な値がないかを調べます。図5の受払明細には金額列がなく、数量と単価から金額を算出する構造であることも確認します。
設問3(5)
公式解答例では、受払残高に外部キー「年月、拠点#、商品#、基受払#」、参照先「受払明細」を追加します。既に記入された受払#の参照が現在の受払を示すのに対し、基受払#の参照は残高の基になった受入を示すため、別の外部キーになります。残高集計には「拠点#」から「物流拠点」、「商品#」から「商品」への参照を追加し、残る空欄は埋めません。年月だけを月締めへの外部キーにはしません。月締め前の計数も格納するため、対応する月締め行の存在を必須にできないからです。採点講評でも、外部キーによる参照制約の有無への着目不足が指摘されています。
学習のポイント
多重度と参照制約、移動集計の対象期間、外部結合後の件数集計、洗替えの起点と登録時点の制限を重点的に学習します。
出典:独立行政法人 情報処理推進機構(IPA)令和5年度秋期 データベーススペシャリスト試験 午後Ⅱ 問1(公式資料:問題冊子(PDF) / 解答例 / 採点講評)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針