DB勉強会レポート_2019年01月29日(火) & 02月05日(火)実施分

こんにちは。 今回からは午後Ⅱに突入します。 流石に難易度は高いですが、出来るだけ分かりやすくお伝え出来ればと思います(私の頭で分かる説明が書ければ、世の中の多くの人は理解できるはず)。 【お願い】午後Ⅱは問題文が非常に多く、引用するとそれだけで文章量が膨れてしまうので、本記事を読まれる際は手元に問題用紙をご用意下さい。 解説範囲 平成30年度 春期 データベーススペシャリスト試験 午後Ⅱ 問1 設問1 解説の前に 設問1 (1) 設問1 (2) 設問1 (3) 設問1 (4) ⚓ 解説の前に 解説に入る前に、午後Ⅱの概要を確認しておきましょう。 項目 内容 試験時間 14:30~16:30 (120分) 出題形式 記述式 出題数 / 解答数 出題数:2問 / 解答数:1問 問題文が非常に長く、じっくりと詳細を気にして読み進めていては時間内に終わりません。 また、業務フローやシステムの情報が満載でとても一読で頭に入るものではありません。 よって、以下のような読み方を意識する必要があります。 大項目、中項目、小項目を意識しながら全体の構成を掴む(スキミング) 必要な情報や重要な数字を、大項目と中項目程度に絞ってさっと拾い読みする(スキャニング) また、設問数が多くないため、一問当たりの配点が大きいのも特徴です。 解答に必要な根拠が問題文のどこに書かれているかを明らかにする必要があります。 以上を踏まえて、解説に入っていきましょう。 ⚓ 設問1 (1) 図1中のア, イに入れる一つ又は複数の列名を答えよ。なお, 列名には本文又は図表中の用語を用いること。また, ア, イに入れる列が主キーを構成する場合, 主キーを表す実線を下線を付けること。 図1 経費精算システムのテーブル構造(未完成・一部省略)より、空欄ア、イが含まれるテーブル情報を確認しましょう。 仮払金申請(申請番号, 社員番号, 申請理由, 仮払金申請状態, 処理年月, ア) 仮払金精算(イ) 仮払金とは何ぞや?な方は、まずこちらをご覧下さい。 まず、仮払金申請について問題文中から必要な情報を拾っていきます。 p.7の「2. 手続の種類(3)仮払金精算 ②」より、申請には社員番号、申請理由、仮払金額、精算期限が必要になる。 p.7の「2. 手続の種類(3)仮払金精算 ③」より、未精算の仮払金を仮払金残高として記録する。 p.7の「3. 申請・生産の流れ(1)申請 ①」より、申請には一意な申請番号が付与される。 p.7の「3. 申請・生産の流れ(2)上司承認, 庶務精査, 経費管理責任者確認 ①」より、申請が承認された場合は上司承認日が記録される。 pp.7 – 8の「3. 申請・生産の流れ(2)上司承認, 庶務精査, 経費管理責任者確認 ②」より、精査の結果問題なければ精査日が記録され、その後申請によって回付先が分岐する。 旅費交通費、一般経費 -> 経費管理責任者 仮払金 -> 事務センタ p.8の「3. 申請・生産の流れ(3)支払 ③」より、仮払金は申請を基に一定額の支払いを行い、申請に支払実行日を記録する。 仮払金申請テーブルにすでに存在している列を除くと、アに入る仮払金額、精算期限、仮払金残高、上司承認日、精査日、支払実行日を抽出出来ます。 この問題を解いたとき、責任者承認日を解答に入れてしまいました。 よく読めば分かりますが、この列は旅費交通費と一般経費の精算時のみに記録されるものです。 「3. 申請・生産の流れ(1)申請 ②」の説明より証憑番号も列に入れるべきだと思いましたが違いましたね。 「3. 申請・生産の流れ(1)申請 ①」の説明を読んでみて下さい。 仮払金を使用して旅費, 一般経費の支払いを行なった場合, 旅費交通費生産又は一般経費精算を行う必要がある。 仮払金を使用して旅費や一般経費の支払いを行う場合、その時点ではまだ領収書などの証憑は持ち合わせていません。 支払いを終え、証憑を入手してから旅費交通費生産又は一般経費精算を行うフローですね。 よって、上記の責任者承認日と証憑番号は仮払金申請テーブルの列には入りません。 次に、仮払金精算テーブルの列名を探していきます。 p.7の「2. 手続の種類(3)仮払金精算 ④」より、一つの仮払いに対する精算が複数日に分かれることがある。 仮払金申請と仮払金精算は1:nの関係にある。 仮払金申請テーブルの行を一意に参照するため申請番号が主キーになる。 同じくp.7の「2. 手続の種類(3)仮払金精算 ④」より、精算日に対応した精算金額を記録するため。精算日も主キーになる。また、記録される精算金額も列に入る。 よって、仮払金精算テーブルのイには「申請番号」、「精算日」、「精算金額」が入ります。 ここで、仮払金残高は仮払金精算テーブルに入ってもいいのではないかと疑問が残りませんか? 精算するごとに仮払金残高を更新していけば良いように思えます。 しかし、p.11の「表3 主な処理の CRUD」の仮払金精算テーブルを見て下さい。 可能なCRUD処理はC:追加のみです。 つまり、仮払金精算テーブルは追加は出来ても更新は出来ません。 なので、精算ごとに更新は必要になる仮払金残高は列として不適切ということになります。 ⚓ 設問1 (2) 表6中の太枠内に適切な字句を記入して, 太枠内を完成させよ。 「表6 “一般経費申請”テーブルのテーブル定義表(未完成)」はp.14にあります。 データ行、NOT NULL、格納長(バイト)、索引の種類と構成列の項目に対して、外貨金額、支払先、支払い目的、支払予定日、支払番号列が空欄になっています。 問題文から情報を探して埋めていきましょう。 参照する情報は、p.10の「表1 主な列とその意味・制約」、p.12の「RDBMSの仕様」、「表5 使用可能なデータ」、p.13の「テーブルの物理設計」です。 それらを基に関連する情報を整理すると以下の表の通りになります。 列名 表1 RDBMSの仕様 表5 テーブルの物理設計 外貨金額 【値の範囲】0.01 ~ 9,999,999,999.99 【申請登録時の指定】任意 NOT NULL制約なし=> + 1バイト 【データ型】DECIMAL(m,n)m = 精度n = 位取り 【格納領域】“m÷2+1″の小数部切捨て 【NOT NULL】N 支払先 【値の範囲】全角文字:100文字以内平均文字数:20文字 【申請登録時の指定】経費支払依頼:必須立替経費精算:任意 ⚓NOT NULLをかけると立替経費精算申請登録時の指定も「必須」になってしまうので、検査制約をかけるため、NOT NULL制約なし=> + 1バイト 【データ型】NCHAR VARYING(n) 【格納領域】“値の文字数 × 2″バイト + 4バイト 【NOT NULL】N … Continue reading DB勉強会レポート_2019年01月29日(火) & 02月05日(火)実施分