在庫管理システムに関する次の記述を読んで,設問に答えよ。
M社は,ネットショップで日用雑貨の販売を行う企業である。M社では,在庫管理について次の課題を抱えている。
・在庫が足りない商品の注文を受けることができず,機会損失につながっている。
・商品の仕入れの間隔や個数を調整する管理サイクルが長く,余計な在庫を抱える傾向にある。
〔現状の在庫管理〕
現在,在庫管理を次のように行っている。
・商品の注文を受けた段階で,出荷先に最も近い倉庫を見つけて,その倉庫の在庫から注文個数を引き当てる。この引き当てられた注文個数を引当済数という。各倉庫において,引き当てられた各商品単位の個数の総計を引当済総数という。
・実在庫数から引当済総数を引いたものを在庫数といい,在庫数以下の注文個数の場合だけ注文を受け付ける。
・商品が倉庫に入荷すると,入荷した商品の個数を実在庫数に足し込む。
・倉庫から商品を出荷すると,出荷個数を実在庫数から引くとともに引当済総数からも引くことで,引き当ての消し込みを行う。
M社では,月末の月次バッチ処理で毎月の締めの在庫数と売上個数を記録した分析用の表を用いて,商品ごとの在庫数と売上個数の推移を評価している。
また,期末に商品の在庫回転日数を集計して,来期の仕入れの間隔や個数を調整している。
M社では,商品の在庫回転日数を,簡易的に次の式で計算している。
在庫回転日数の計算において,現状では,期間内の平均在庫数として12か月分の締めの在庫数の平均値を使用している。
現状の在庫管理システムのE-R図(抜粋)を図1に示す。
在庫管理システムのデータベースでは,E-R図のエンティティ名を表名にし,属性名を列名にして,適切なデータ型で表定義した関係データベースによって,データを管理している。
図1 現状の在庫システムのE-R図(抜粋)
〔在庫管理システム改修内容〕
課題を解決するために,在庫管理システムに次の改修を行うことにした。
・在庫数が足りない場合は,在庫からは引き当てず,予約注文として受け付ける。なお,予約注文ごとに商品を発注することで,注文を受けた商品の個数が入荷される。
・商品の仕入れの間隔や個数を調整する管理サイクルを短くするために,在庫の評価を月次から日次の処理に変更して,毎日の締めの在庫数と売上個数を在庫推移状況エンティティに記録する。
現状では,在庫数が足りない商品の予約注文を受けようとしても,在庫引当を行うと実在庫数より引当済総数の方が多くなってしまい,注文に応えられない。そこで,予約注文の在庫引当を商品の入荷のタイミングにずらすために,E-R図に予約注文の二つのエンティティを追加することにした。追加するエンティティを表1に,改修後の在庫管理システムのE-R図(抜粋)を図2に示す。
エンティティ名 | 内容 |
引当情報 | 予約注文を受けた商品の個数と入荷済となった商品の個数を管理する。 |
引当予定 | 予約注文を受けた商品の,未入荷の引当済数の総計を管理する。 |
図2 改修後の在庫システムのE-R図(抜粋)
在庫管理システムにおける予約注文を受けた商品の個数に関する処理内容を表2に示す。
処理タイミング | 処理内容 |
予約注文を受けたとき | 引当情報エンティティのインスタンスを生成して,引当済数には注文を受けた商品の個数を,入荷済数には0を設定する。 引当予定エンティティの未入荷引当済総数に注文を受けた商品の個数を足す。 |
予約注文された商品が入荷したとき | e エンティティの未入荷引当済総数から入荷した商品の個数を引く。 f エンティティの実在庫数と引当済総数に入荷した商品の個数を足す。 入荷した商品の個数を g エンティティの個数に設定し,引当情報エンティティの h に足す。 |
予約注文された商品を出荷したとき | 出荷した商品の個数を出荷明細エンティティの個数に設定し,在庫エンティティの商品の実在庫数及び引当済総数から引く。 |
〔在庫の評価〕
より正確かつ迅速に在庫回転日数を把握するために,在庫推移状況エンティティから,期間を1週間(7日間)として,倉庫コード,商品コードごとに,各年月日の6日前から当日までの平均在庫数及び売上個数で在庫回転日数を集計することにする。
可読性を良くするために,SQL文にはウィンドウ関数を使用することにする。
ウィンドウ関数を使うと,FROM句で指定した表の各行ごとに集計が可能であり,各行ごとに集計期間が異なるような移動平均も簡単に求めることができる。ウィンドウ関数で使用する構文(抜粋)を図3に示す。
図3 ウィンドウ関数で使用する構文(抜粋)
ウィンドウ関数を用いて,倉庫コード,商品コードごとに,各年月日の6日前から当日までの平均在庫数及び売上個数を集計するSQL文を図4に示す。
図4 倉庫コード,商品コードごとに,各年月日の6日前から当日までの平均在庫数及び売上個数を集計するSQL文
設問1 図1及び図2中の a に入れる適切なエンティティ間の関連を答え,E-R図を完成させよ。なお,エンティティ間の関連の表記は図1の凡例に倣うこと。
解答・解説
解答例
↓
解説
ー
設問2 〔在庫管理システム改修内容〕について答えよ。
(1)図2中の b , c に入れる適切なエンティティ名を表1中のエンティティ名を用いて答えよ。
解答・解説
解答例
b:引当情報
c:引当予定
解説
ー
(2)図2中の d に入れる,在庫推移状況エンティティに追加すべき適切な属性名を答えよ。なお,属性名の表記は図1の凡例に倣うこと。
解答・解説
解答例
日
解説
ー
(3)表2中の e 〜 h に入れる適切な字句を答えよ。
解答・解説
解答例
e:引当予定
f:在庫
g:入荷明細
h:入荷済数
解説
ー
設問3 図4中の i , j に入れる適切な字句を答えよ。
解答・解説
解答例
i:OVER
j:ORDER BY
解説
ー
IPA公開情報
出題趣旨
小売業界では,在庫の適正化が重要な経営課題となっている。
本問では,在庫管理システムの改修を題材として,データベース設計に関する基本的な理解について問うとともに,OLAP に役立つウィンドウ関数の理解,及び BNF から SQL 文を作成する能力を問う。
採点講評
問 6 では,在庫管理システムの改修を題材に,データベース設計として,現状と改修後の E-R 図から追加するエンティティや属性,処理内容,及び OLAP に役立つウィンドウ関数の SQL 文について出題した。全体として正答率は高かった。
設問 3 の i は,正答率がやや低かった。“WINDOW”と誤って解答した受験者が散見された。BNF を正しく読み解き,正答を導き出してほしい。近年,データベースに蓄積されたデータの分析・活用がますます重要になっているので,ウィンドウ関数の利用方法は是非身につけてほしい。