見出し画像

【実質:選択肢だけが魅力】応用情報技術者R05秋データベースの解説


私は技術系(ネットワーク・データベース・組み込み)を、なるべく選びたいです。技術系問題は出題傾向が絞られ、得点再現性が高いですから。

データベースは結局、SQL・E-R図・キー設定のどれかが出るのは分かっていますよね。

マネジメント系の問題なんて何が出てくるか分かりません。技術系は充分に過去問演習すれば、安定した得点源になると考えています。



さて、図1と2でE-R図が2つもあって「難しそう」な印象を受けるかもですね。

しかし図1。入荷と入会明細・出荷と出荷明細はよくあるパターン、倉庫・商品はカタログ系なので、実質気になるのは在庫の引当・在庫推移状況ぐらいです。

図2で【b】【c】が増えてますが、項目は書いてくれてるので名前だけで良いのもポイント。

最後のSQL文に少し不安がありますが、正直「外部結合が出るよりはマシ」とすら思ってます。


作文もなく、穴埋めも問題文からの抜き出しなので実質選択肢と同じ。1つずつ片づけて点数を積み上げられそう。

解いてみると、8~10割が狙える問題でした。8割まではすんなりで、下回ることはありません。

AP-DBは基本的に難しそうに見せかけてきます。しかし「切る」必要がある高難易度は、ゴクゴク稀。1問ぐらい解いてみるぐらい、選択するか判断を粘っても良いかも。


このNoteは私のIT専門学校での授業経験に基づいて、一緒に読んで解いていきます。本番での「思考の流れ」や「解法のコツ」なども書いているので、参考になったら嬉しいです。

それでは始めましょう!


過去問のダウンロードはIPA公式より。
>>公式の問題pdfへのリンク<<
>>公式の解答pdfへのリンク<<





読み | 概要

4行はめちゃくちゃ短い概要。

「商品個数のデータベースで、在庫を改善したいのね」程度で次へ進みます。




読み | 【現状の在庫管理】

データベースでは、エンティティ(表など)や項目を四角囲みでマーキング。

「在庫」「注文個数」「引当済数」「引当済総数」「実在庫数」「在庫数( = 実在庫数 - 引当済総数)」「在庫数 ≧ 注文個数の時に注文を受け付ける」「入荷で、実在庫に足す」「出荷で、実在庫 - 出荷個数 引当済総数 - 出荷個数」。

計算処理はアンダーラインは勿論、文章から式に書き起こして、脇に書いてもOK。確実に後で使うでしょうから。


2段落目。

分析用の表があり、毎月の集計結果を評価しているとのこと。見ているのは、在庫個数と売上個数。

数式は「なんか難しそう」でスキップ。あとで「計算しろ」となった時に考えます。試しに1とか2とかの数値を入れて計算しても良いですが、平均値も使うらしいのでちょっと複雑な感じ。


図1に到達したので解きに入ります。




解き | 設問1a

正解は「↓」(倉庫→在庫推移状況)。

リレーションの個数対応は、ITパスポートレベル。片方ずつ見ていくんでしたね。>>実データで考えるE-R図解説Note<<


まず、倉庫から在庫推状況を見ます。「1つの倉庫(倉庫A)が在庫推移状況に何個表れるか」と考えると、「たくさん」。B年C月商品コードD毎の倉庫Aの在庫数と売上個数が表れますね。

ひとまず「倉庫→在庫推移状況」です。


次は逆。在庫推移状況から倉庫を見ます。

「1つの在庫推移状況がB年C月商品コードD毎の倉庫Aが、倉庫に何個表れるか」と考えると「1つ。倉庫コードAの行が1つだけ。」です。


実は「倉庫→在庫推移状況」が分かった時点で確定して良いです。理由は図1は第三正規形になっているであろうから「倉庫⇔在庫推移状況」はあり得ないので。

「A⇔B」は「多対多」、第三正規形では「連関エンティティ」を置いて「A→連関←B」として「1対多」にします。この問題のE-R図は完成しており、すでに第三正規形なので、「⇔、多対多」を考える必要はありません。

「多対多(⇔)」がある場合は、必ず再設計の設問があるので、ない場合は「1対1(-)」「1対多(→)」「多対1(←)」だけ考えればOK。

とはいえ時間も数秒。確認のために「1個の在庫推移状況から倉庫を見たら」をした方が考え落とし失点がないですけどね。多対多になってしまったら、考え直しましょう。


さて、図1は主キーや外部キーもありますが「どんなエンティティ(実質、表と同じ)があるのかな」と見るぐらい。

複雑に見えるかもですが、実はオーソドックス。在庫、出荷、入荷を管理している系統が見て取れます。

データベース設計の「系統」「形」を覚えておくと良いですよ。「入荷」と「入荷明細」、「出荷」と「出荷明細」はテンプレ。無いとオカシイ説まであります。




読み | 【在庫管理システム改修内容】~表1・図2まで

在庫管理の改修の話。

予約注文だ管理サイクルだと書かれていますが、「で。どうデータベースの設計変更するの?」と軽くスルーします。

次の段落。設計変更するとのこと。実在庫数と引当済総数の関係から注文できないので。

予約注文用の2つのエンティティ「引当情報」「引当予定」を追加するとのこと。これが知りたかった。

表1にスキーマ(項目)はないですが、文章で主旨。図2に回収後のデータベース構造が載っています。

次の表2まで見ても良いですが、穴埋めが多くなるので、キリ良くここで解きに。




解き | 設問2(1)b,c 

正解は、

  • b:「引当情報」

  • c:「引当予定」

表1からすぐに推測できます。

  • 引当情報:予約注文の個数、入荷済み個数

  • 引当予定:未入荷の引当済数の総数

図2を見ると。

  • b:引当済数、入荷済数

  • c:未入荷引当済総数

以上より、確定します。




解き | 設問2(2)d

難しかった方もいるかもです。

読みで「毎日の締めの在庫数と売上個数を在庫推移状況エンティティに記録する(31頁終盤)」の「毎日」に気づいていたかどうか。

メタ読みすると「年」「月」の次にわざわざ【d】を設けてるぞ、と。となると「日」を疑います。


また、主キーにするのも「毎日」なので「日」も主キーにします。

メタ読みすると「主キーを項目の最初に固める」のは作法。


「主キー挟まれたd」も主キーである可能性が極めて高いです。



それにしても設問文。「なお、属性名の表記は図1の凡例に倣うこと」が「主キーや外部キーの表記も含む」とは、少しいじわる。「(図1の注記に倣い)キーの表記もせよ」と書いてくれれば良いのに。




読み&解き | 設問2(3)e,f,g,h


eは「引当予定」エンティティ。

未入荷引当済総数があるエンティティを図1から探すと、【c:引当予定】だけでした。確定。


fは「在庫」エンティティ。実在庫数を図1から探すと、「在庫」だけでした。確定。


gは「入荷明細」エンティティ。「gエンティティの個数に設定」なので、図1から「個数」があるのは、「入荷明細」と「出荷明細」。入荷した個数なので「入荷明細」。


hは引当情報エンティティの「入荷済数」。引当情報にある個数は、「引当済数」と「入荷済数」なので。


正直全体としての計算は分からなかったかもしれません。しかし、限られた時間ですし、正解すればとりあえずOKなので、あまり気にしないでください。

データベースの設計には、計算処理の流れの理解も必要です。しかし「設計」なので、計算の詳細は分からなくても、処理がうまくいく設計にツジツマを合わせることはできます。




読み&解き | 設問3i,j

【在庫の評価】から読みます。読み飛ばした数式「在庫回転日数」を計算するSQL文。しかも、ウィンドウ関数なんてわけ分からないものが。。

コマンドのマニュアルに慣れていようがいまいが「なんじゃこれ」「難しそう」と思う問題ですね。

しかし答えを見ると簡単すぎ。

  • i:OVER

  • j:ORDER BY

「図3のマニュアルに載っていた英語から選ぶんかい」と。



jが簡単なので先に。

「j 年, 月, 日 ASC」の「ASC」は昇順(小さい順)に並べる用語でした。よって「ORDER BY」だとすぐに分かります。

図3でも確認できます。3番目の「<ウィンドウ指定>」の行。「PARTITION BY」の後に「ORDER BY」を続けて良い旨が書いてあります。


iのOVERを導きます。

  • 図3の1番目:「OVERの後に、ウィンドウ名かウインドウ指定」を書くとのこと

  • 図3の2番目:「WINDOW ウィンドウ名 AS」と書くとのこと。

図4「WINDOW 期間限定 AS ~」よりウィンドウ名は「期間限定」と分かり。「i 期間限定」は「i ウィンドウ名」なので「OVER ウィンドウ名」、つまりiはOVER。


WINDOW文や処理の流れは学ばなくてOKです。昔はFETCHが良く出ていましたが、バリエーションを増やしたかったのかも。二度と出ないで欲しいですね(過去問で2回でたら覚えましょう)。

なお、APには外部結合が良く出ていた印象が強いです。




まとめ | 

在庫回転日数の計算式、図1と2でE-R図が2つもあり、最後に分けわかんないウィンドウ関数が出ているので、「難しそう」な印象を受けました。

しかし、解いてみるとオーソドックス。

予約注文の処理の理解は試験時間内には追いつかないかもですが、ヒントも分かり易く、詳細を知らなくてもツジツマ合わせで正解できます。

最後のSQL文も、書いてあることから選べばなんとか得点できます。

一見難しそうなので選ぶ勇気は要るかもですが、時間内に解け、8~10割が狙える問題でした。


一見難しそうな問題を選ぶ勇気・見通す判断力をゲットするには、過去問演習しかありません。引き続き問題演習を続けて、ぜひデータベースを優先問題の1つにしてくださいね。

でわでわ。


p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。

でわでわ(・ω・▼)ノシ


\全ての無料Noteへのリンク!/

時間配分・問題選択法から午後問題解説まで


\R05秋の選択・得点・学ぶ解法の3点セット!/

不合格になった方に特にお薦めです


この記事が参加している募集

スキしてみて

学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ