データベーススペシャリスト試験 1ヶ月攻略

エンジニアではないけれどせっせと技術系資格を取っている@hiroeisです。
資格試験の話をしたくてついにAdvent Calendarを作ってしまったので、頑張って初日書いていきたいと思います。

## データベーススペシャリストを受験した話

私は2017年にデータベーススペシャリスト試験に合格しました。
データベーススペシャリストは例年4月に試験があって、申込締切が2月中旬なのですが、
申し込んだあとも忙しさを言い訳になかなか勉強に着手できず、気づけば試験まで残り1ヶ月。
（皆さんもそういうことありますよね？あれ？）

学習期間の目安は1年とか言ってる方もいるのにこれはまずい。受からなくてもいいとはいえまずい。
と思い、ポイントを絞って学習した結果、1回で運よく合格することができました。
60%以上の得点で合格ですが、それなりに余裕を持った点数を取れたと記憶しています。

ということで今回は、「データベーススペシャリスト試験を1ヶ月で攻略する」をテーマに、学習のポイントを書いていきたいと思います。

少し前の話にはなってしまいますが、試験制度は変わっていませんし、
問題の傾向もそこまで変化していないと思いますので、これから受験される方の参考になればと思います。

### データベーススペシャリストを目指した理由

受験した当時、DMP（Data Management Platform）の開発と販売に携わっており、
購買データの分析も行っていました。
ちなみに当時使用していたツールはExcelとTableauです。

業務の中で自分がデータベース設計をしたりSQLを書いたりすることはなかったのですが、
学生時代に身に着けたSQLの基礎知識がなんとなく仕事に役立っているなと感じていました。

その一方で、当時は新卒3年目であったこともあり、データベースやデータ分析について専門知識があるとは周囲から認知されておらず、
このままでは仕事の幅も広がらないと思い、体系的な知識を学んだ上で客観的な証明を手に入れたいな、と思って受験を決めました。

また、社外で[データサイエンティスト女子部](https://techplay.jp/community/0801datascientist)の運営に携わっており、
データ分析に関連した勉強をしたかったことも動機の一つでした。

~~あと、論文試験がある区分は受けたくなかったんですよね~~

### 試験概要
データベーススペシャリスト試験の概要は下記の通りです（2020年11月現在）。

- 運営：IPA（情報処理推進機構）
- 日程：年1回、4月第3日曜日
    - ※例年はこの日程ですが、新型コロナウイルス感染症の影響により次回の日程は変更の可能性があります
- 試験科目
    - 午前I：四択マークシート30問（50分）
    - 午前II：四択マークシート25問（40分）
    - 午後I：記述式、3問中2問選択（90分）
    - 午後II：記述式、2問中1問選択（120分）
- 受験料：5,700円（税込）
- 合格基準：各科目60点以上（100点満点中）
- 合格率：14.4%（2019年）
- 科目免除：下記のいずれかに該当する場合は午前I試験が免除
    - 2年以内に応用情報技術者試験に合格
    - 2年以内にいずれかの高度試験・支援士試験に合格
    - 2年以内にいずれかの高度試験・支援士試験で午前I試験に合格
        - ※こちらも新型コロナウイルス感染症の影響による試験延期を反映し、免除期間が変更になっていますので、詳しくは公式サイトをご確認ください

参考： https://www.jitec.ipa.go.jp/1_11seido/db.html

### 勉強を始めたときの状態
- エンジニアとして勤務した経験はゼロ
- SQLは少し書ける。SELECT文でWHEREやGROUP BYはできるがサブクエリやWITHはできない程度
    - 学生時代に学園祭実行委員会で団体の登録システムを触っていたので、マスタ系のテーブルをある程度触ったことあり
    - 仕事ではほんの少しだけMySQLとHBaseを触ったことあり。ほんの少しだけ。
- SQLではないが、Tableauで複数のテーブルを関連付けて集計するようなことは業務でやっていた
- トランザクションという言葉は分かる。技術的なポイントは知らない
- 基本情報技術者試験・応用情報技術者試験に合格

非エンジニアですが、SQLをある程度使ったことがあったのは強みでした。（学生時代だけど）
特に、マスタ系のテーブルを触った経験があったのはよかったです。
試験の題材として、マスタ系のテーブル設計が出題されることが多いので。
（ログ系を扱っている人は不利、というほどの違いではないです）

1ヶ月で合格するためのポイントはこのあと書いていきますが、
RDBの概念がまったく分からない状態からスタートであれば、ちょっと1ヶ月は厳しいかなと思います。

ただエンジニアとして勤務されている方であれば、上記の私の状態よりは遥かにSQL力が高いと思いますので、
予備知識がそこまでなくても大丈夫！と思っていただけるかなと。

## 1ヶ月攻略のためにやったこと
ここから本題です。
データベーススペシャリスト試験の1ヶ月攻略を目指すために最も重要なのは、
**勉強する範囲を絞り込むこと**です。

### 勉強する範囲を絞る
そもそもなぜ1ヶ月で合格レベルに持って行けたかというと、
試験範囲のすべてを学習する必要はないからです。

試験の4科目のうち、合格のカギを握るのは記述式の午後I・午後IIですが、
これらの問題は基本的に、

* 概念設計・論理設計が中心の問題
* 物理設計や運用が中心の問題

の2つに分かれます。
午後I・午後II試験は選択問題なので、どちらを選ぶか決めておけば、もう一方の問題は深く勉強しなくても合格できます。

これはズルをしようという話ではなくて、そもそもこの選択問題というのが受験生の専門分野に合わせて選択できるように設計されているので、
自分の専門分野がどちらなのかあらかじめ決めておきましょうという話です。

データベーススペシャリストに限らず、情報処理技術者試験の問題はよく練られているので、
どちらかの選択問題が急に難しくなることがあるかも、という心配はあまりしなくてよいと思います。

私はSELECT文くらいは書けるもののシステムの運用経験がなかったので、概念設計・論理設計に絞って勉強しました。

### 必ず押さえるポイント
概念設計・論理設計を選択する場合も、物理設計・運用を選択する場合も、完璧に理解しなければならない知識が2つだけあります。

#### データベースの正規化
データベースの正規化は、午前II・午後I・午後IIすべての試験で問われます。
午前IIではほぼ毎回出題されますし、午後IIで概念設計・論理設計の問題を選択した場合は序盤で問われたりするので、しっかり覚えておいた方がよいです。

参考書には第5正規形まで載っていると思いますが、第3正規形まで理解していれば問題ないです。

#### トランザクションのACID特性
トランザクション（データベースに対する一連の処理）が持つACID特性も重要ポイントです。

* 原子性(Atomicity)
* 一貫性(Consistency)
* 独立性(Isolation)
* 永続性(Durability)

A・C・I・Dがそれぞれどういう意味かをきちんと覚えておかないといけないのは午前IIだけですが、
それぞれの意味を理解して、「この特性に沿っていない処理はまずい」ということが頭に入っていると、午後試験でも役立ちます。

私もどれがどれだったかはよく忘れますが、この考え方は今でも要件定義のときに頭の片隅にあるので、覚えてよかった知識の一つです。

### 学習の手順
上記を踏まえた上で、学習を進めた手順は下記の通りです。

1. 正規化とACID特性だけは押さえる
2. 午後Iの過去問を解く
3. 午後IIの過去問を解く
4. 午前IIの過去問を解く

（私が午前I免除だったので、午前I対策は割愛します）

まずは前述の通り正規化とACID特性を押さえたあと、午後I→午後II→午前IIの順で学習しました。
午後IIは午後Iの問題がさらに長文になった感じで、設問の難易度が大幅に上がるわけではないので、
先に解きやすい午後Iで解き方に慣れてから、午後IIのボリュームについていけるように勉強しました。

午前IIは選択式問題ですが、データベーススペシャリストの場合、あまり暗記量は多くありません。
午後試験が解けるレベルになっていれば、「考えれば解ける」問題も数問ありますし、
過去問がそのまま出題されることもあるので、直前1週間くらいで一気に詰め込みました。

全体的に、参考書を手元に置きつつ、基本的には過去問を中心に学習しています。
最初は全然解けなかったので、設問→問題文の順でざっと目を通してから、すぐ解説を読み込んでいました。
2周目からは自分で解答を思い浮かべるようにしていきます。
ちなみにきちんと紙に解答を書いて勉強したことは……たぶんないです。笑

### どこまで頑張ればいい？
合格するには、時間内に問題を解き切ることが必要です。
当たり前と思われるかもしれませんが、データベーススペシャリスト試験の場合、この「時間内に」というのが特に重要になります。

普段、仕事でSQLを書いている場合、とりあえずざっとクエリを書いてみて、
思った通りの結果を出力できるまで少しずつ書き直していったりすると思います。

ただ、データベーススペシャリスト試験は紙の試験なので、自分が書いたクエリの出力結果を見ることもできないし、
思いついたパターンを総当たりで試してみるようなこともできません。
SQL文を見て出力を思い浮かべたり、ER図を見て頭の中でクエリを書いたりする必要があります。

ここは慣れが必要で、できるようになるまでにかかる時間に個人差があるポイントだとも思います。
一度過去問を解いてみて苦手だなと思ったら、あえて同じ問題を何度か解くなどして紙上のデータベースを処理することに慣れていってください。

### 試験対策に使ったもの
試験対策のために購入したのは、参考書1冊・過去問題集1冊です。
オリジナル問題集もありますが、個人的には過去問だけでよいかなと思います。

まず、1ヶ月攻略を目指す時点で、解く問題は過去3-4回分が限界でした。
答えを覚えてしまったら意味ないのでは？と考えて新作問題を解く方もいらっしゃいますが、
私の場合はそこまで答えを完璧に覚えていたりしなくて、むしろ繰り返すことで理解が定着するのでよいと考えてます。

### 実際どれくらいの時間をかけた？
1ヶ月攻略ということで、その1ヶ月はさぞ勉強漬けだったんだろうとお思いかもしれませんが、

- 参考書を読む・過去問を解く：土日に各日3時間程度
- 単語暗記：直前1週間のみ、毎日朝と夜に20分ずつ

大体こんな感じでした。

焦りはあったのですが、「今日も勉強できなかった！やばい！」と思ってストレスを溜めるよりは、
無理のない範囲で時間を作って、その分その時間は集中するようにしていました。
学習時間だけ長くても、ダラダラ解いてたら意味ないですからね。

ちなみに私は自宅だとすぐ誘惑に負けてしまって集中できないので、
近くのファミレス数軒にローテーションで通ってました……。（めっちゃパフェ食べた）

## 勉強してよかったこと
最後におまけで、私がデータベーススペシャリスト試験を目指してよかったことを書きたいと思います。

### ネームバリュー？
私はネットワークスペシャリストとセキュリティスペシャリストも持っているのですが、
エンジニアに言ったときに一番反応があったのはデータベーススペシャリストでした。
なぜか持っている資格の中で一番覚えられていて、「さすがデータベーススペシャリストですね！」とかよくいじられます。

この知名度差は私の周囲だけかもしれませんが、一緒に仕事をする人に認知されている資格を取れたのはよかったと思います。

### 自信がついた
私はエンジニアではないので、「ちょっとだけデータベース分かる」と自分では思っていても、口に出すほどの自信はありませんでした。
今でもエンジニアに比べれば実務経験は薄いので、専門家です！とは言えませんが、
試験に合格したことで、ある程度体系的な知識が身についているという自信は持てたかなと思います。

### 目論見通り、仕事の幅が広がった
データを扱えることが認知されて仕事を振ってもらえるようになったことと、自信がついたおかげで新しい仕事に手を挙げられるようになったことの相乗効果で、

* SQLを直接書いてログデータを分析する
* 新機能のためのテーブル設計を考える
* （データつながりで）機械学習のプロジェクトに携わる

といった仕事に挑戦する機会をいただきました。
合格直後と比べると今はまた違った仕事をしていますが、仕事の幅を広げるきっかけになってくれたかなと思っています。

## おわりに
データベーススペシャリスト試験に合格するまでにやったことを書いてきましたが、
私と同じ勉強法では合わない方もいらっしゃると思います。
ここに書いたのはあくまで私の自己流ですので、ご自身のやりやすい形に合わせて、
もし1要素でもピンとくるものがあったら取り入れてみてください。

データベーススペシャリスト試験に合格したからといって、それだけで評価されたり転職で有利になったりすることはもしかしたら少ないかもしれません。
でも、この試験は小難しい知識を暗記させるものではなく、基礎的な知識をいかに実際の現場で使うかが試されており、
データベースに少しでもかかわりがある方であれば、一度挑戦してみて損はない試験だと思います。

この記事をきっかけに、データベーススペシャリストを含め資格試験に興味を持ってくださったら、個人的には仲間が増えて嬉しいです。

以上の内容は私の知識の範囲内で書いているため、誤っている点などがあれば遠慮なくご指摘いただけますと幸いです。
最後までお読みいただきありがとうございました。