DBデータベーススペシャリスト試験 午後Ⅱ

令和5年度秋期 データベーススペシャリスト 午後Ⅱ 問1

事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。

問題

問1 生活用品メーカーの在庫管理システムのデータベース実装・運用に関する次の記述を読んで,設問に答えよ。 D社は,日用品,園芸用品,電化製品などのホームセンター向け商品を製造販売しており,販売物流の拠点では自社で構築した在庫管理システムを使用している。データベーススペシャリストのEさんは,マーケティング,経営分析などに使用するデータ(以下,分析データという)の提供依頼を受けてその収集に着手した。 〔分析データの提供依頼〕 分析データ提供依頼の例を表1に示す。 表1 分析データ提供依頼の例 〔在庫管理業務の概要〕 在庫管理業務の概念データモデルを図1に,主な属性の意味・制約を表2に示す。在庫管理システムでは,図1の概念データモデル中のサブタイプをスーパータイプのエンティティタイプにまとめた上で,エンティティタイプをテーブルとして実装している。Eさんは,在庫管理業務への理解を深めるために,図1,表2を参照して,表3の業務ルール整理表を作成した。表3では,項番ごとに,幾つかのエンティティタイプを対象に,業務ルールを列記した①~④が,概念データモデルに合致するか否かを判定し,合致する業務ルールの番号を全て記入している。 図1 在庫管理業務の概念データモデル 表2 主な属性の意味・制約 表3 業務ルール整理表(未完成) 〔問合せの検討〕 Eさんは,依頼1に対応するために図2のZチャートの例を依頼元から入手し,Zチャートを作成するための問合せの内容を,表4に整理した。表4中のT1は月間出荷数量,T2は移動累計出荷数量,T3は累計出荷数量を求める問合せである。 図2 Zチャートの例 表4 依頼1の問合せの検討(未完成) 依頼2について図3のSQL文の検討を行い,実装したSQL文を実行して図4のヒートマップの例を作成した。 図3 依頼2の問合せを実装したSQL文(未完成) 図4 ヒートマップの例 〔依頼3への対応〕 Eさんは,在庫回転率及びその根拠となる数値(以下,計数という)の算出方法を確認した上で,分析データを作成する仕組みを検討することにした。 1. 計数の算出方法確認 在庫管理業務では,次のように,年月,拠点,商品ごとに計数を算出している。 ・月締めを行う。月締めは対象月の翌月の第5営業日までに実施する。 ・月締めまでの間は,前月分の出荷であっても訂正できる。 ・月末時点の在庫を,先入先出法によって評価し,在庫金額を確定する。在庫金額算出に際して,商品有高表及び残高集計表を作成する。商品有高表の例を表5に,残高集計表の例を表6に示す。 (1) 商品有高表 ・前月末時点の残高を繰り越して受入欄に記入する。残高は,入荷ごとに記録するので,複数入荷分の残高があれば入荷の古い順に繰り越す。 ・受入,払出の都度,収支を反映した残高を記入する。例えば,表5中の行2の残高には行1の受入を反映した残高を転記し,行3の残高には行2の受入を反映した残高を記入している。 ・当月中の入荷を受入欄に,出荷を払出欄に記入する。入荷の入荷年月日,出荷の出荷年月日を受払日付とし,受払日付順及び入出荷の登録順に記入する。 ・出荷による払出は,入荷の古い順に残高を引き落とし,複数入荷分の残高を引き落とす場合は,残高ごとに行を分ける。入出荷による変更後の在庫を入荷の古い順に残高欄に記入する。 ・赤伝は,受払日付に発生日ではなく,訂正元出荷と同じ受払日付でマイナスの払出を記入する。 ・月末時点の残高を入荷の古い順に払出欄に記入して次月に繰り越す。 (2) 残高集計表 年月,拠点,商品ごとに,商品有高表を集計・計算して月初残高,当月受入,当月払出,月末残高,在庫回転率の数量,金額をそれぞれ次のように求める。 ・月初残高は,前月繰越による受入の数量,金額を集計する。 ・当月受入は,当月中の入荷による受入の数量,金額を集計する。 ・月末残高は,次月繰越による払出の数量,金額を集計する。 ・当月払出は,“月初残高+当月受入-月末残高”によって,数量,金額をそれぞれ求める。 ・在庫回転率は,“当月払出÷((月初残高+月末残高)÷2)”によって,数量,金額をそれぞれ求める。 表5 商品有高表の例(未完成) 表6 残高集計表の例(一部省略) 2. 計数を格納するテーブル設計 Eさんは,鮮度の高い分析データを提供するために,商品有高表及び残高集計表の計数をテーブルに格納することにして図5のテーブルを設計した。 (1) “受払明細”テーブル ・商品有高表の受入,払出のどちらかに数量,単価,金額の記載のある行を格納する。 ・受払#には,年月,拠点#,商品#ごとに,商品有高表中の受入又は払出の数量に記載のある行を対象に1から始まる連番を設定する。一つの出荷が複数の残高から払い出される場合には,払出の行を分け,それぞれに受払#を振る。 ・摘要区分には,‘前月繰越’,‘出荷’,‘入荷’,‘赤伝’,‘黒伝’,‘次月繰越’のいずれかを設定する。 (2) “受払残高”テーブル ・受払明細ごとに,受払による収支を反映した後の残高数量を,基になる受入ごとに記録する。残高の基になった受入(前月繰越又は入荷)の受払#,単価を,受払残高の基受払#,単価に設定する。 (3) “残高集計”テーブル ・受払明細及び受払残高の対象行を“残高集計表”の作成要領に従って集計・計算して“残高集計”テーブルの行を作成する。 図5 計数を格納するテーブルのテーブル構造 3. 計数を格納する処理 Eさんは,入荷又は出荷の登録ごとに行う一連の更新処理(以下,入出荷処理という)に合わせて,図5中のテーブルに入出荷を反映した最新のデータを格納する処理(以下,計数格納処理という)を行うことを考えた。 (1) 計数格納処理の概要 ① 入出荷の明細ごとに,“受払明細”テーブルに赤伝,黒伝を含む新規受払の行を作成する。赤伝,黒伝の発生時には,同じ年月,拠点#,商品#で,その受払よりも先の行を全て削除した上で,入出荷の明細から行を再作成する。これを洗替えという。 ② ①によって変更が必要になる“受払残高”テーブルの行を全て削除した上で,再作成する。 ③ 変更対象の計数を集計して“残高集計”テーブルの行を追加又は更新する。 ④ 計数は,計数格納処理の開始時点で登録済の入出荷だけを反映した状態にする。 (2) 計数格納処理の処理方式検討 Eさんは,計数格納処理の実装に当たって,次の二つの処理方式案を検討し,表7の比較表を作成した。 案1:入出荷処理と同期して行う方式。同一トランザクション内で入出荷処理及び計数格納処理を実行する。 案2:入出荷処理と非同期に行う方式。入出荷処理で,登録された入出荷のキー値(拠点#,入荷#,出荷#)を連携用のワークテーブル(以下,連携WTという)に溜めておき,一定時間おきに計数格納処理を実行する。 ・入出荷処理では,トランザクション内で一連の更新処理を行い,最後に連携WTに行を追加してトランザクションを終了する。 ・計数格納処理では,実行ごとに次のように処理する。 (a) 連携WT全体をロックし,連携WTの全行を処理用のワークテーブル(以下,処理WTという)に追加後,連携WTの全行を削除してコミットする。 (b) 処理WT,入荷,入荷明細,出荷,及び出荷明細から必要な情報を取得し,年月,拠点#,商品#の同じ行ごとに,まとめて次のように処理する。 ・赤伝,黒伝がなければ,登録TSの順に受払を作成する。 ・赤伝,黒伝があれば,洗替えの起点となる行を1行選択し,その行に対応する受払を作成する。そして,起点となる行を基に,入荷,入荷明細,出荷,出荷明細から対象となる行を入荷年月日又は出荷年月日,登録TSの順に取得して洗替えを行う。 (c) 処理WTの全行を削除してコミットする。 表7 処理方式案の比較表 表7を基に,処理方式案を次のように判断した。 (1) 分析データの鮮度については,どちらの案でも依頼3の要件を満たす。 (2) 入出荷処理への影響について,表5において,2023-10-03に次のそれぞれの出荷の登録を仮定して,“受払明細”テーブルへの追加及び削除行数を調べることで,追加処理による遅延の大きさを推測した。 ・09-26の出荷数量40の出荷明細を追加入力すると,次月繰越の2行を削除,出荷1行及び新たな次月繰越1行の2行を追加することになる。 ・09-04の出荷を取り消す赤伝を追加すると,“受払明細”テーブルに合計で11行の削除,12行の追加を行うことになる。 案1では,特に出荷の赤伝,黒伝から受払を作成する場合に,追加処理による入出荷処理の遅延が大きくなる。案2では,下線①連携WTに溜まった入出荷情報をまとめて処理することで,計数格納処理における出荷の赤伝,黒伝の処理時間を案1よりも短縮できる。 (3) 案1では入出荷処理の性能及び計数格納処理エラーの業務への影響が大きいことから,案2を採用することにした。なお,導入に先立って,下線②計数格納処理が正しく動作することを検証することにした。 4. 分析データの検証 Eさんは,計数格納処理を実行して得たデータを用いて,ある拠点,商品の過去12か月の在庫回転率を時系列に取得して表8を得た。一定の方法で,数量,金額それぞれの在庫回転率を母集団とする外れ値検定を行ったところ,2023-09の金額の在庫回転率だけが外れ値と判定された。外れ値は,業務上の要因によって生じる場合もあれば,入力ミスなどによって生じる異常値の場合もある。 表8について,Eさんは次のように推論した。 ① 数量と金額の在庫回転率は,ほぼ同じ傾向で推移するが,材料費の値上がりなどに起因して,製造原価が上昇する傾向にあるとき,金額による在庫回転率は[m]する傾向がある。 ② 2023-09の数量の在庫回転率は前月とほぼ同じ水準であるにもかかわらず,金額の在庫回転率が極端に低い値になっていることから,異常値であることが疑われる。 ③ この推論を裏付けるには,“受払明細”テーブルから当該年月,拠点,商品の一致する行のうち,“摘要区分=‘[n]’”の行の[o]に不正な値がないかどうかを調べればよい。 表8 ある拠点,商品の在庫回転率(2022-10~2023-09) 5. 概念データモデルの変更 図5のテーブルをエンティティタイプ,列名を属性名として,概念データモデルに追加する。Eさんは,追加するエンティティタイプ間及び図1中のエンティティタイプとの間のリレーションシップについて,追加するエンティティタイプの外部キーと参照先のエンティティタイプを表9の形式で整理した。 表9 追加するエンティティタイプの外部キーと参照先のエンティティタイプ(未完成) 設問1 〔在庫管理業務の概要〕について答えよ。 (1) 表3中の[a]に入れる適切な業務ルールを,エンティティタイプ“生産拠点”と“商品”との間のリレーションシップに着目して25字以内で答えよ。 (2) 表3中の[b]~[f]に入れる適切な番号(①~④)を全て答えよ。 設問2 〔問合せの検討〕について答えよ。 (1) 図2において,累計出荷数量のグラフは始点から終点への直線の形状,移動累計出荷数量のグラフは右肩下がりの形状となっている。この二つのグラフから読み取れる商品の出荷量の傾向を,それぞれ30字以内で答えよ。 (2) 表4中の[ア],[カ]に入れる適切な数値,及び[イ]~[オ]に入れる適切な字句を答えよ。ここで,[イ]~[オ]は次の字句から選択するものとし,nを含む字句を選択する場合は,演算及び選択の対象行が必要最小限の行数となるように,nを適切な数値に置き換えること。 最初の行,n行前の行,現在の行,n行後の行,最後の行 (3) 図3中の[キ]~[コ]に入れる適切な字句を答えよ。 (4) 図4において,二つの棚に配置されている商品を相互に入れ替えて効率化を図る場合,最も効果が高いと考えられる,入替えを行う棚の棚#の組を答えよ。 (5) (4)の対応を記録するために更新が必要となるテーブル名を二つ挙げ,それぞれ行の挿入,行の更新のうち,該当する操作を○で囲んで示せ。 設問2(5)の解答用表(キャプションなし) 設問3 〔依頼3への対応〕について答えよ。 (1) 表5中の[g]~[l]に入れる適切な数値を答えよ。 (2) 本文中の下線①では,どのように処理を行うべきか。次の(a),(b)における対象行の選択条件を,列名を含めて,それぞれ35字以内で具体的に答えよ。 (a) 処理WTに,同じ年月,拠点#,商品#の赤伝,黒伝が複数ある場合に,洗替えの起点となる行を選択する条件 (b) (a)の洗替えの起点となる行を基に,洗替えの対象となる入荷,入荷明細,出荷,出荷明細を取得するときに,計数格納処理の開始時点で登録済の入出荷だけを反映した状態にするために指定する条件。ただし,入荷年月日又は出荷年月日が,起点となる行の入荷年月日又は出荷年月日よりも大きい条件を除く。 (3) 本文中の下線②では,処理結果が正しいことをどのように確認したらよいか。確認方法の例を60字以内で具体的に答えよ。 (4) 本文中の[m]~[o]に入れる適切な字句を答えよ。 (5) 表9中の太枠内の空欄に適切な字句を入れて表を完成させよ。ただし,空欄は全て埋まるとは限らない。
表1 分析データ提供依頼の例。依頼1から依頼3の分析データ提供依頼を示す表。Zチャートによる出荷量の可視化,棚の出庫頻度のヒートマップ,在庫回転率の参照要件を記載している。
表1 分析データ提供依頼の例。依頼1から依頼3の分析データ提供依頼を示す表。Zチャートによる出荷量の可視化,棚の出庫頻度のヒートマップ,在庫回転率の参照要件を記載している。
図1 在庫管理業務の概念データモデル。拠点,商品,取引先,棚,在庫,入出荷及び各明細などのエンティティタイプと属性,リレーションシップを示す概念データモデル。属性名の略記に関する注記を含む。
図1 在庫管理業務の概念データモデル。拠点,商品,取引先,棚,在庫,入出荷及び各明細などのエンティティタイプと属性,リレーションシップを示す概念データモデル。属性名の略記に関する注記を含む。
表2 主な属性の意味・制約。拠点番号と棚番号,請求先・出荷先区分,単価,出荷の状態,赤黒区分と訂正元出荷番号,登録タイムスタンプの意味及び制約を説明する表。
表2 主な属性の意味・制約。拠点番号と棚番号,請求先・出荷先区分,単価,出荷の状態,赤黒区分と訂正元出荷番号,登録タイムスタンプの意味及び制約を説明する表。
表3 業務ルール整理表(未完成)。六つの項番について対象エンティティタイプ,四つの業務ルール,モデルに合致する番号を整理する表。業務ルールの空欄aと番号の空欄bからfがある。
表3 業務ルール整理表(未完成)。六つの項番について対象エンティティタイプ,四つの業務ルール,モデルに合致する番号を整理する表。業務ルールの空欄aと番号の空欄bからfがある。
図2 Zチャートの例。拠点番号33,商品番号445566の2022年10月から2023年9月までの月間出荷数量,移動累計出荷数量,累計出荷数量を三つの折れ線で示すZチャート。
図2 Zチャートの例。拠点番号33,商品番号445566の2022年10月から2023年9月までの月間出荷数量,移動累計出荷数量,累計出荷数量を三つの折れ線で示すZチャート。
表4 依頼1の問合せの検討(未完成)。問合せT1からT3の列名又は演算,参照テーブル又は問合せ名,選択又は結合の内容を整理する表。空欄アからカと,表の記述方法に関する四つの注記を含む。
表4 依頼1の問合せの検討(未完成)。問合せT1からT3の列名又は演算,参照テーブル又は問合せ名,選択又は結合の内容を整理する表。空欄アからカと,表の記述方法に関する四つの注記を含む。
図3 依頼2の問合せを実装したSQL文(未完成)。出庫と出庫明細を結合し,棚ごとの出庫回数と順位から出庫頻度区分を求めるSQL文。空欄キからコ,及びホスト変数hv1からhv3の設定内容の注記がある。
図3 依頼2の問合せを実装したSQL文(未完成)。出庫と出庫明細を結合し,棚ごとの出庫回数と順位から出庫頻度区分を求めるSQL文。空欄キからコ,及びホスト変数hv1からhv3の設定内容の注記がある。
図4 ヒートマップの例。棚番号101から708を含む棚のレイアウトを,出庫頻度の高・中・低に応じて塗り分けたヒートマップ。入口,出口,出庫作業の最短順路と凡例を示す。
図4 ヒートマップの例。棚番号101から708を含む棚のレイアウトを,出庫頻度の高・中・低に応じて塗り分けたヒートマップ。入口,出口,出庫作業の最短順路と凡例を示す。
表5 商品有高表の例(未完成)。2023年9月,拠点番号33,商品番号112233の受入,払出,残高を数量・単価・金額で記録した21行の商品有高表。空欄gからl,赤伝・黒伝及び注記を含む。
表5 商品有高表の例(未完成)。2023年9月,拠点番号33,商品番号112233の受入,払出,残高を数量・単価・金額で記録した21行の商品有高表。空欄gからl,赤伝・黒伝及び注記を含む。
表6 残高集計表の例(一部省略)。年月,拠点番号,商品番号ごとに,数量及び金額の月初残高,当月受入,当月払出,月末残高,在庫回転率を集計した表。2023年9月の例と省略行を示す。
表6 残高集計表の例(一部省略)。年月,拠点番号,商品番号ごとに,数量及び金額の月初残高,当月受入,当月払出,月末残高,在庫回転率を集計した表。2023年9月の例と省略行を示す。
図5 計数を格納するテーブルのテーブル構造。受払明細,受払残高,残高集計の三つのテーブル構造を示す図。年月,拠点番号,商品番号,受払番号などの列と,主キーを示す実線の下線が記載されている。
図5 計数を格納するテーブルのテーブル構造。受払明細,受払残高,残高集計の三つのテーブル構造を示す図。年月,拠点番号,商品番号,受払番号などの列と,主キーを示す実線の下線が記載されている。
表7 処理方式案の比較表。入出荷処理と同期する案1と非同期の案2を,分析データの鮮度,全体的な処理時間,計数格納処理エラーの影響で比較する表。優劣を表す丸と三角の注記を含む。
表7 処理方式案の比較表。入出荷処理と同期する案1と非同期の案2を,分析データの鮮度,全体的な処理時間,計数格納処理エラーの影響で比較する表。優劣を表す丸と三角の注記を含む。
表8 ある拠点,商品の在庫回転率(2022-10~2023-09)。ある拠点と商品の2022年10月から2023年9月までの在庫回転率を数量と金額の二行で示す表。2023年9月は数量0.88に対して金額0.18となっている。
表8 ある拠点,商品の在庫回転率(2022-10~2023-09)。ある拠点と商品の2022年10月から2023年9月までの在庫回転率を数量と金額の二行で示す表。2023年9月は数量0.88に対して金額0.18となっている。
表9 追加するエンティティタイプの外部キーと参照先のエンティティタイプ(未完成)。追加する受払明細,受払残高,残高集計の外部キーの属性名と参照先エンティティタイプ名を整理する表。既記入の対応と,設問3(5)で補う太枠内の空欄がある。
表9 追加するエンティティタイプの外部キーと参照先のエンティティタイプ(未完成)。追加する受払明細,受払残高,残高集計の外部キーの属性名と参照先エンティティタイプ名を整理する表。既記入の対応と,設問3(5)で補う太枠内の空欄がある。
設問2(5)の解答用表(キャプションなし)。設問2(5)で,商品の棚の入替えを記録するために必要な二つのテーブル名を記入し,各テーブルについて行の挿入又は行の更新を丸で選ぶ二行の解答用表。
設問2(5)の解答用表(キャプションなし)。設問2(5)で,商品の棚の入替えを記録するために必要な二つのテーブル名を記入し,各テーブルについて行の挿入又は行の更新を丸で選ぶ二行の解答用表。
解き方のヒントを見る

前提の意味を一貫して捉える

検討を進める際は、同じ言葉や情報を途中で別の意味として扱っていないかに注目しましょう。与えられた条件に戻り、最初に置いた前提と、その後の判断で用いる前提が一貫しているかを確かめることが大切です。

この問題で問われていること

この問題では、検討の各段階で前提の意味が保たれているかという一点に着目してください。判断に迷った箇所は、与えられた条件と自分が補った想定を区別し、同じ意味のまま考えを進められているかを振り返りましょう。

視点

前提は、考えを進めるための土台です。途中で言葉の意味や条件の受け止め方が変わると、判断の根拠を追いにくくなります。考え始めたときと迷ったときに、同じ前提を用いているかを確認しましょう。

確認ポイント

  • 同じ言葉を一貫した意味で扱っているか
  • 途中で条件の受け止め方が変わっていないか
  • 自分で補った想定によって前提を変えていないか
正解と解説を見る

解説

在庫管理の概念データモデルを業務ルールとして読み取り、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による補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針