データベースが得意な方【H28 春 午後 問6】

まーじさん  
(No.1)
題記のデータベースの問題の設問4について質問です。

このサイトの解説で、「データウェアハウスから在庫実績を参照可能...(中略)...  同じデータベース内に格納されている在庫実績から、日次の在庫数量を導出できる」とあります。また他の参考書でも、「在庫が記録されていない日付の在庫データを追加すればよい」といった趣旨の解説があります。

これに対して質問です。
在庫確認を毎日行わない場合がある=毎日の在庫実績がデータとしてどこにも存在しない場合がある、と設問の意図を解釈したのですが、なぜ毎日の在庫実績データが他のどこかから取れるのでしょうか?

本文の「(表1の在庫エンティティ)在庫数量を記録」と、「(表1の売り上げファクトエンティティ)在庫実績のデータを1日単位で集計したデータを記録」という記述から、「在庫数量の記録=在庫実績データ」と推測するのが妥当かと思います。(在庫数量の記録を以て、在庫実績が記録されるという文章に読める)

もし、私の解釈が間違っていて、「毎日の在庫実績データは、実は毎日の在庫確認だけではなく、他に存在するDBから引っ張ってこれる」とするならば、どの文章をどう解釈すればよいのでしょうか・・・?
(このサイトの解説のように、データベース内の在庫実績データからデータを取れるとありますが、その解釈が正しいとしても、問題文には毎日の在庫データがあるとは一言も書いていないので、やや無理筋な解説ではないかと。。。)

長文で申し訳ありませんが、どなたかこの問題をうまく解釈された方、いらっしゃいましたら、ご助言いただけると助かりますm(__)m
また、同じような疑問を持たれた方がいらっしゃいましたら、その旨だけでもいただけると嬉しいです(^^;
2020.10.11 13:26
助け人さん 
AP ゴールドマイスター
(No.2)
今後は、リンクを付けてください。問題に早くたどり着けます。

いい質問です。他の方からも同様の質問(または疑問)があってもしかるべきです。データベースは得意ではありませんが、推測は得意です。

この問題の「掲示板の関連スレッド」に
[1486] H28年春期午後のデータベース
https://www.ap-siken.com/bbs/1486.html
があったので見てみたら、回答者は私でした。質問内容はもっともですが、回答は今見るとあまりよくありません。

解説を見ると、私も納得しません。自信がありませんが、これしかないという推測で説明します。

10/1の最後の在庫数量・・・100
10/2と10/3は在庫数量を記録せず
これだけでは、10/2と10/3の在庫数量は分かりません。しかし、
10/2の販売数量・・・30
10/3の販売数量・・・20
があれば、
10/2の最後の在庫数量・・・70
10/3の最後の在庫数量・・・50
と分かります。

つまり、在庫数量を記録しなかった日の在庫数量は、その直前に記録した在庫数量と、その後の販売数量から求められます。この推測が当たっているなら、IPA解答例の
「在庫数量を記録していない日の商品の在庫数量を実績から導出したデータ」は、
「記録していない日の在庫数量を、記録した日の在庫数量と販売数量から求めたデータ」(38字)
という意味です。
2020.10.11 17:51
まーじさん  
(No.3)
助け人さん

ありがとうございます!!
リンクを張る気が利かず申し訳ありません。
また、質問の前に過去の質問も拝見していました。
(少し自分の質問意図と違ったので、改めて質問した次第でした。)

やはり、この問題はかなり違和感ですよね。
(IPAの問題は、たまに解釈に困る文章があると時々思います…)

まさに自分も、販売数量に着目した解答をしたのですが、書き方を間違えるとIPAの意図にはそぐわない解答になりそうでなかなか難しいですね(^^;
(IPAの人はどういう意図でこの問題と解答を作ったのか真意が気になります…)

やはり同じ疑問を持たれる人が多くいるのだと知って安心したのと、参考になる解答いただけて助かりました。
ありがとうございますm(__)m
2020.10.12 00:30
助け人さん 
AP ゴールドマイスター
(No.4)
(No.2)に書き忘れたので追記します。

設問4(2)の解説と、追加で、設問4(1)の解説への疑問について、スレッド
平成28年春期 午後問6の設問4の解説に疑問[2261]
https://www.ap-siken.com/bbs/2261.html
で、管理人様に問い合わせています。
2020.10.12 06:58
高木さん 
(No.5)
この投稿は投稿者により削除されました。(2020.10.12 14:09)
2020.10.12 14:09
高木さん 
(No.6)
横から失礼します。

[1486] H28年春期午後のデータベース
https://www.ap-siken.com/bbs/1486.html
の廃棄したかどうかについてですが、
表1の在庫の概要をみると、入荷や廃棄を行って廃棄数量と在庫数量を記録することがわかります。
この命題の対偶をとると「記録していない=入荷や廃棄がなかった」
とも捉えることができると思います。
なので記録してない日の廃棄があったかどうかわからないということはなく、
記録がない日は入荷や廃棄がないと考えられます。ただし販売はありますので在庫量に変動があります。

次にこのスレのNo.1さんの質問ですが、1日3回の記録は在庫表に記録していますが
仮に記録していなくても1日の販売実績は
販売表と販売詳細表から
どの商品がいくつ売れたかがわかります。
(図2のβがヒントになっている気がします。)

在庫表に記録したデータがないと設問4の解説の(1)の通り、
AVGの結果がnullとなりますので、
その日の在庫実績が必要となります。
その日の販売実績は前述通り、販売表と販売詳細表から導出できるので
記録した日の在庫数量とその導出した販売実績から求められる思います。
(ただ試験本番中にここまで考えられる気がしません)
2020.10.12 14:13
助け人さん 
AP ゴールドマイスター
(No.7)
高木さん

「記録していない=入荷や廃棄がなかった」は、思い付きませんでした。

「店舗や商品によって在庫数量を記録する頻度にばらつきがあることが判明した」
「ある店舗では,販売実績が少ない商品は1日3回ではなく,1週間に1回だけ,在庫数量を記録していた」
をどう解釈するかですね。

高木さんの解釈は、「販売実績が少ない商品は、1週間に1回しか入荷や廃棄をしなかったので、当然ながら、在庫数量の記録もその時だけ」ということですね。つまり、在庫数量の変動があれば、必ず記録したと。

私は、深く考えず、「1日3回、入荷と廃棄をした時でも、在庫数量をサボって記録しなかったこともある」と解釈しました。

それから、「在庫表に記録したデータがないと設問4の解説の(1)の通り、AVGの結果がnullとなります」については、スレッド
平成28年春期 午後問6の設問4の解説に疑問[2261]
https://www.ap-siken.com/bbs/2261.html
の【1点目】で、管理人様に問い合わせています。
在庫数量の記録がない日は、在庫レコードそのものがないので、AVGがnullになるわけではなく、在庫数量の記録がある日だけについて日間在庫数量が計算されると考えています。
2020.10.12 23:05
高木さん 
(No.8)
助け人さん

レスありがとうございます。
助け人さんの仰る通りですね。
在庫表の主キーが在庫IDのみですので
在庫の記録を怠った場合、
そもそもレコードがないですね。
なので図2のα部分でAVGでNULLが入ることはなさそうです。
失礼しました。汗
問い合わせ用のスレッドもありがとうございます。

P.S
このサイトの解説と同じ間違えをしてしまった理由を考えてみました。
図1の売上ファクトの属性見ると
売上年月日が主キーに含まれているのでここでハマった気がします。
この売上年月日、
図2(売上ファクト表に挿入するSQL文)を見ると
売上年月日に当たる部分がST.確認年月日ということ。
図1の売上ファクトの売上年月日という属性から勝手に
毎日分のレコードがあるんだと勘違いしていました。
図2を見ればわかりますが、左外部結合していて左側の表の確認年月日が
売上ファクトの売上年月日に挿入されていることを見落としていました。
これに気付いたとき、「確認年月日を売上年月日として挿入しないでよーw」と
心の中で思いましたが設計した人も1日3回の在庫確認がある前提で
作成したんだと思うので、1週間に1回だけとか運用の変更される
ことによって属性名の捉え方変わってきちゃうなと勉強になりました。
2020.10.13 09:22
助け人さん 
AP ゴールドマイスター
(No.9)
高木さん

この問題は、いろいろと考えさせられることが多く、いい勉強になります。売上ファクト表の売上年月日は、実は、在庫表の確認年月日である点が、奥が深いです。

売上ファクト表には日間販売数量と日間在庫数量の両方があるので、「売上・在庫ファクト表」が相応しいと思いますが、「売上ファクト表」と「売上年月日」という名称から即断して売上が中心にあると考えてしまい、「日間在庫数量は売上年月日に記録した在庫数量であり、在庫数量を記録しない日は日間在庫数量がnullになる」と錯覚します。

また、遊び半分に、空欄dが、この問題のようにLEFT OUTER JOINの場合と、RIGHT OUTER JOINの場合を考えてみました。

【日間在庫数量 LEFT OUTER JOIN 日間販売数量】
在庫記録なし・販売ありの日の販売数量が考慮されない(これは致命的)し、
在庫記録あり・販売なしの日の販売数量がnullになります。

【日間在庫数量 RIGHT OUTER JOIN 日間販売数量】
在庫記録なし・販売ありの日の在庫数量がnullになるし、
在庫記録あり・販売なしの日の在庫数量が無視されます(これはまあ許せる)。

上記のうち、前者の販売数量のnullはCOALESCEにより0に変換すればいい(販売数は0だから)ですが、後者の在庫数量のnullは何かの値に変換というわけにもいかないので、前者のLEFT OUTER JOINとした上で、在庫記録なし・販売ありの日の在庫数量を補完したのだと思います。

まるで実在するような、よく練られたストーリーです。
2020.10.13 13:06

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop