データベーススペシャリスト試験受験レポ
作成日時:2022-12-22
更新日時:2024-08-02
概要
データベーススペシャリスト試験を受験した時のレポ。
※個人の感想です。
試験概要(IPA)
※リンク先はIPA。
受験動機
- DB設計が腐ってるとプロジェクト全体が腐るという思想に陥った。
- その為、DBの基礎知識をちゃんと学ぼうと思った。
勉強内容
全体
とにかく過去問を解く。
特に午後問題はIPAの過去問を新しい方から全部解いていった方がいい。
試験時間内に解き切れるかを確認しつつ。
午前1
応用情報技術者試験ドットコムの過去問道場をやっていれば受かる。
過去に出ていないのも数問出てくるが、普段から技術情報とか収集しているなら多分問題なし。
午前2
データベーススペシャリストドットコムの過去問道場をやっていれば受かる。
午後1
とにかく過去問を解いておく。
解答時間が足りない。本当に時間が無い。どの問題を回答するかを選ぶ時間がもったいない。
なので、近年の傾向からどの分野を選ぶかを事前に決めておく。
近年の傾向に関しては情報処理教科書 データベーススペシャリスト 2022年版(Amazon)が詳しくまとめてくれている。
出題されるジャンルはおおよそ論理設計 / 物理設計 / SQLの3分野。たまにイレギュラー。
参考書を見ると論理設計を選ぶのを勧められる。パターンが決まっているらしい。
しかし、私は論理設計が苦手なので物理設計とSQLを重点的に対策した。
※後述するがこれは駄目だった。全分野網羅しといたほうがいい。
とにかく過去問を解きまくる + 解答を理解する。
午後2
とにかく過去問を解いておく。
2時間もあるので時間的には余裕あり。
2問中1問を選択(だいたい物理設計か論理設計)。
参考書を見ると論理設計を選ぶのを勧められる。パターンが決まっているらしい。
しかし、私は論理設計が苦手なので物理設計とSQLを重点的に対策した。
※後述するがこれは駄目だった。全分野網羅しといたほうがいい。
とにかく過去問を解きまくる + 解答を理解する。
当日の感想
午前1 / 午前2
ほぼ過去問なのでなんら問題なし。
過去問に出てこなかった問題もあるが普段から技術情報のニュースとか見ていれば問題なし。
時間的には3周くらい見直しができた。
午後1 / 午後2
問題を見た瞬間に終わったと思った。
ヤマを張った物理設計系の問題が出てこないし、今までの出題パターンと違った(気がした)。
出題パターンが変わるのは過去稀にあるが、自分が受けるときに変わるとは思わん。
こういう事もあるのでヤマは張らずに全分野を網羅的に対策しておき、その上で自分の得意分野を決めておいた方がいい。
解答を見直す時間は無かった。
結果
- 午前1:85
- 午前2:88
- 午後1:88
- 午後2:74
合格。
当日のテク
- 試験開始10-15分くらい前に問題と解答用紙が配られる。
問題用紙はもちろん試験開始前に見ることはできないが、解答用紙に書かれてある作図問題のER図は見ることができる。
そこからテーブル設計を推測できるので、論理設計問題を選択する場合はお得かしら。
私は作図系の論理設計問題は捨てていたので、恩恵を受けられなかった。
午後2の論理設計も同様。 - 試験開始直前に糖分を取っておく。
私は何らかの試験を受けるときは必ずブドウ糖のタブレットと午後の紅茶(ミルクティー)をがぶ飲みしてる。 - 空欄で解答用紙を提出しない。諦めずに何かしら書くこと。
- 午後問題は「長い説明文 → 設問」という流れで記載されている。
長い説明文を読み切ってから設問を見るのではなく、先に設問を軽く見てから解く。
「設問 = 問われる事」なのでそれを頭に入れてから説明文を読んだ方が解きやすい。
説明文を読み返すこともほぼ無くなるはず。
当日の注意点
- トイレは混む。
- 昼飯は持っていく。昼にコンビニとかで買おうとすると確実に混んでいる。
- 定規を忘れず。午後問題で論理設計を選ぶなら作図問題を解くことになるので。
- アナログ腕時計必須。会場によっては時計が無い場合もある。
使った書籍
リンク先はAmazon。
必須
情報処理教科書 データベーススペシャリスト 2022年版
サイトから過去20年分の過去問の解説がダウンロードできるのは強い。
正直これとデータベーススペシャリストドットコムだけでいい。
あると良い
ポケットスタディ データベーススペシャリスト 第2版
秀和システムのポケットスタディシリーズは個人的にIPAの試験でお世話になってきたので使用。
基本的なことを網羅するには良い書籍。
第2版の発売から5年以上経っているので午後試験の情報などが古い。
古本だと800円位で買えるのでコスパよし。
試験に関係なく読んだ方がいい本
試験の為に読んだけども、試験にはあまり役に立たなかった。
けれども試験に関係なく読むべきだと思った本のリスト。
リレーショナルデータベース入門
RDBにまつわるアカデミックな書籍。
達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ
設計の基本的な事が書いてある。
達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ
この本に記載されている内容が、過去問に何個か出てた記憶
持ち縦持ち変換とか、階層構造の表現、ウィンドウ関数とか。
SQLアンチパターン
業務でたまにアンチパターンを見かける。
プログラマのためのSQL第4版 すべてを知り尽くしたいあなたに
タイトルに偽りなし。
記述系問題の回答例のメモ
午後試験対策のメモ。
キーワードとそれに対する回答の例。
- FULL JOINまたはCROSS JOINをする理由
→「属性Aと属性Bの組が、テーブルAとテーブルBのどちらか一方にしかないから。」
→「◯◯(売上とか)が無いXXX(店舗とか)の情報を出力するため。」 - ロック待ちタイムアウトになったらどうする
→「トランザクションをロールバックした後、間隔を空けてトランザクションを再実行する。」 - クラスタ率
→検索対象がページに居る割合のことを指す。
0なら検索行数分読み込むことになる。 - テストデータ作成⇒テストしたら想定よりよいパフォーマンスが出た
→インデックスの順序でデータ投入したからクラスタ率が高いため
→順序をランダムで再構成する。 - クラスタ構成/分散構成におけるコードとかパーティションキーの作成
→キーワード「偏らせない事」
→1つのノードに集中するようなパターンとか(テストデータやパーティショニング関連) - 分割キーが適切でない場合の登録
→1つの区分に行追加が集中し、待ちが発生するから。 - ノード分割による検索性能ダウン
→結合対象のデータが各ノードに分散しており、テーブル結合をするごとにノード間通信が必要となるから。
結合する場合は同一ノードに分割する。 - 候補キーにできない / 登録できない
→NULLになりうる項目だから。もしくは、対象の項目の後に設定される項目だから。 - キーワード「履歴管理していないテーブル」
→キーワード「最新の情報しか管理できない」 - ORDER句がない
→順序が保証されない。
正規形
・なぜ第2正規形ではないか
→部分関数従属の存在、または完全関数従属していない事の説明をする。
「候補キー{xxx, yyy}の一部のyyyに非キー属性{a, b, c}が部分関数従属している。」
・なぜ第3正規形でないか
→推移的関数従属が存在することの説明をする。
「全ての属性が単一で候補キーからの部分関数従属性はなく、推移的関数従属性「x → y → z」が存在する。」
第1正規形:属性が全て単一値を取る
第2正規形:全ての非キー属性は候補キーに完全関数従属する。
第3正規形:全ての非キー属性はいかなる候補キーにも推移的関数従属しない。
正規化しないことによる問題点の記述
- 挿入時
- 登録する情報が冗長。
- 登録できない。
(受注([PK]受注No, [PK]顧客No, 顧客名))
→顧客マスタが無いので顧客が未定の受注を登録できない。など。
- 更新時
- 該当するレコードをまとめて更新しなくてはならないから、更新漏れとか発生する。
- 削除時
- 情報が消える。挿入時のスキーマで言うと受注を削除したら顧客のデータもDBから存在しなくなる
- その他
- 情報が冗長である。
バックアップ
- 差分BK
容量小、バックアップ速度遅い。
変更されるページが特定範囲に局所化されているから。
増分バックアップでは特定範囲のページが繰り返し含まれるから。 - 増分BK
容量大、バックアップ速度速い。
前回からの追加分だけのバックアップで済むから。
差分バックアップでは毎日ページ数が増加していくから。 - バックアップしたけど反映されない
→更新ログの保存から障害発生までの間に更新がコミットされた場合。 - 誤登録をバックアップから戻すにはどうすればよいか。
- 作業環境でフルバックアップ + 更新ログ使って直前まで戻す
- 誤登録した行を抽出してエクスポート
- インポートする(上書きオプションとかで)
- 誤登録を修正するためにバックアップをそのまま適用するのはなぜ駄目か
→誤登録以降に登録されてデータも誤登録前の状態に戻り、記録した情報が失われる。
その他
- 相関名を忘れがち
- 過去問の巻頭の記述例は試験前に一読する。本番はそんな余裕ない。
例えば関係スキーマの記述例とか。
ある項目が主キーかつ外部キーの場合は、外部キーを表す破線は省略するとか。 - マスタ⇔トランの法則
- ER書き込みは外部キーじゃなくてエンティティの関連だ。
外部キーはただのヒント。 - 直列可能性は2層ロックにより保証される
途中のロック/解除は違う。 - NOT NULLの+1バイト
- 区分キーとその区分内の索引が異なっている場合にパフォーマンスが下がる理由
Aは〇ごとに連続するページへアクセスするが、Bは〇ごと〇ごとに連続するページへアクセスするから。 - クラスタ索引の読み込みページ数
→行数 / ページごとの行数。 - 非クラスタ索引の読み込みページ数
→イコール行数。 - デッドロック回避
→コード順に処理を行う。トランザクションの粒度を小さくする。 - [SQL] 14. トリガー (SQL非標準) 1 | TECHSCORE(テックスコア)
- ユニーク索引を付ける問題
→そのカラムがテーブル内でユニークにすることを忘れず設計する。 - 数値で回答する徳はカンマを点けておけ。
- 外部キー
→子にNULLは突っ込めるぞ。SET NULL。 - 「NO ACTION」と「RESTRICT」
→どっちもまだ参照が残っていれば弾く。前者はトランザクションで後回し可。後者は即時。