もちもちゲームブログ

遊んだゲームについて書いていきます。

【応用情報】令和元年秋季 午後問6 DBを解きました

 

f:id:motimaturi:20200819190230j:plain

 

DBスペシャリスト落ちすぎて自信無くなってきたので、応用情報のデータベースを解いてモチベを上げていくという低姿勢。

 

 

 参考書や解説サイトの真面目な解説を見る気力は残ってない、自分みたいな人向けの雑解説を残しておきます。

 

 ・問題PDF

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2019h31_2/2019r01a_ap_pm_qs.pdf

 

・解答例PDF

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2019h31_2/2019r01a_ap_pm_ans.pdf

 

 

設問1

f:id:motimaturi:20200819190230j:plain

a・b:IPAはE-R図で「1対1」と「多対多」を出してこないと信じる

正規系を解く問題なら話は別だと思う。

残ったのは1対多。部署エンティティ [ a ] 従業員エンティティ。

部署エンティティに従業員エンティティの主キー[従業員番号]がないので空欄aに「←」はない。

従業員エンティティにも部署エンティティの主キー部署番号はないが、代わりに空欄bがあるので、ここに「部署番号(外部キー)」が入る。

これで空欄aも「→」になる。

 

c:IPAはE-R図の一番上に主キーを記入させると信じる。

従業員エンティティ→月次レポートエンティティなので、従業員エンティティの主キー従業員番号が入る。一番上に記入するので外部キー扱いではなく主キー扱い。空欄cは「従業員番号(主キー)」が入る。

 

d:E-R図の形状から見て「↓」が入ると確信するが何故そう思うか分からない

言語化って難しいね。元々多対多の関係だった従業員エンティティ←→公開情報エンティティを1対多に分割するために出来た繋ぎ部分だから「↓」が入るとか?

素直に考えると、1人の従業員に対して公開情報は複数存在する。(問題文からだと身長や体重など)

なので従業員エンティティ→公開エンティティの関係になる。とかだと思う。

 

設問2

f:id:motimaturi:20200819192131j:plain

 

e:分からなかった。そこのFROMなに?副問い合わせ?ってパニックになってた

INSERTはSELECT文の結果でも挿入できるので、INSERT INTOの後に書かれている(従業員番号 , レポート年月)が挿入できるようなSELECT文を記入する。

また、対象とするレポート年月は問題文より「集計する対象年月を格納する埋込み変更":レポート年月"」を使用する。

空欄eには「SELECT 従業員番号, :レポート年月」が入る。

 

f:④は「対象年月の月間総歩数を集計して更新する」ので、SUM(歩数.歩数)

一歩も歩いていなくて歩数テーブルにレコードがないときはエラー回避のため0を表示する、歩いてたらレコードの集計結果で更新するので空欄fには「SUM(歩数.歩数)」が入る。

 

g:月次レポートは従業員ごとに作成するので従業員を一人に絞る処理を書く

空欄gには「歩数.従業員番号 = 月次レポート.従業員番号」が入る。

なお、対象月の指定は「TOYM(歩数.測定日)=:レポート年月日」で行われている。

 

設問3

f:id:motimaturi:20200819194214j:plain

(1)下線①のパターンとは何か:測定日の主キーが重複してますエラーな気がする。E-R図見たら当たってた

 ~~な気がする。をきちんと言語化できるようになりたい。

睡眠エンティティは「従業員番号(主キー)、測定日(主キー)、睡眠開始日時、睡眠終了日時」。これに対して図4の4行目と5行目が従業員番号も測定日も同じなので主キー制約エラーが発生する。

30字以内なので「同じ測定日に2回睡眠を行ったパターン(18字)」と答える。解答例は「1日に2回以上睡眠を取得するパターン」。3回目、4回目を考慮していない解答だったので、本番だと減点される気がする。

 

(2)下線②の変更を加えた表とその内容:列追加が駄目なら主キーの変更だよね

今回のエラーは1日に2回以上睡眠を取得したパターンの際に発生する、主キーのユニーク制約。

主キーを「従業員番号(主キー)、測定日(主キー)」から「従業員番号(主キー)、睡眠開始日時(主キー)」に変更する。秒単位で時間を取得している睡眠開始日時なら、主キーのユニーク制約は起こらないはず。

1秒間に2回寝る超人がいたら再び同パターンのエラーが発生するが、のびた君でも最速入眠タイムは0.93秒なので大丈夫。

 

 

とりあえず知識が足りていないのと、言語化と想定が甘いところがあるので、地道に問題慣れしていくのが今後の課題だと思いました。後60日。間に合うのか。