データベーススペシャリストを受けて合格しました

2021年7月からディップにジョインしている平尾です。普段はPHPやLaravelを使っての開発やテストの担当をしています。

2021年10月に実施されたデータベーススペシャリストを受けてきたので、勉強になったところと感想を述べたいと思います。

## 結果として

合格していました。

結果としてはギリギリですが、個人的に4度目の挑戦だったはず（体調不良で行かなかった回が1回あった気がする）ので、合格できてよかったと思っています。

|  試験時間帯 | 得点 | 
| -- | -- |
| 午前Ⅰ | 78.2 | 
| 午前Ⅱ | 72 | 
| 午後Ⅰ | 63 | 
| 午後Ⅱ | 64 | 

今後もさまざまな分野に挑戦し、継続的に学習を続け自分の知識として定着させる、常にアップデートさせることを意識し勉強を続けていきたいと思います。

## 勉強になったところ
### 初回の受験時から前回の受験時まで

大学時代にコンピューターサイエンスを専攻していたので、データベースの歴史、基本的なCRUD、ER図については知っていましたが、勉強を重ねる中で多く学びがありました。
幾つかをピックアップしてみます。

- 正規化
    - 単純にデータをどう持つべきか、これをルールに従って分割できるということに感銘を受けました
    - また情報無損失分割や関数従属性保存という概念が存在することを知りました
- SQL
    - 勉強を始めたころはSQL自身に対する知識がかなり薄かったので、SQL自身の挙動や結合した際に得られる結果の理解があやふやでした
        - 特に GROUP BY, ORDER BY, HAVING など
        - 体系的に学び直すことで知識が広がったように思います
    - DDL, DCLの勉強のきっかけになりました
    - 当時働いていた会社で多くを学び、一番役に立った知識だと思います
- トランザクション分離レベル
    - データベース使っていると自然に発生ししそうな問題ですが、気づいていなかったです
    - 分離レベルとサービスの相性を考えつつ、この辺やるんだなあと思っています
- セキュリティ
    - データベースは情報を時には厳重に扱わないといけないものです
    - 攻撃から情報を守るためにシステム的に行うこと、運用保守で意識しなければいけないことを学びました

### 前回の受験時から今回の受験時

前回の受験時からデータベーススペシャリストのシラバスがアップデートされていたため（Ver 4.0になってました）、変化に対応するために去年の問題を眺めたり、解いたりして勉強をしました。

シラバスのアップデートは見落としていたので、今後他の試験を受ける際はシラバスのアップデートと利用するテキストが使えるかどうかを判断しようかと思います。

ただ2, 3年前のテキストでも十分役に立ったように思うので、大きく変化はしてないのでは？ と思っています。

## 勉強方法

自分の場合、3つくらいの勉強が影響してそうです。

- 大学時代での授業
    - 情報系だったのでデータベースに触れる機会がありました
    - データベースの歴史とかCRUD操作はこの辺りで学びましたが、実務で触れるまで6年くらいのブランクがあったので深くは覚えていませんでした
- データベーススペシャリストの勉強
    - 過去に翔泳社、インプレスのものの2冊を買って勉強していました
        - [情報処理教科書 データベーススペシャリスト 2021年版](https://www.shoeisha.co.jp/book/detail/9784798168708)
        - [徹底攻略 データベーススペシャリスト教科書 令和3年度](https://book.impress.co.jp/books/1120101036)
        - 個人の意見ですがインプレスの書籍の方がわかりやすかったかなと思います
            - ただ持ってるのが2、3年前のものなので実際に見比べてみることをお勧めします
    - 過去問
        - 過去問を眺めましたが、テキストに載っていないようなアップデートされた内容を実際の問題からキャッチアップできたと感じています
            - CAP定理、NoSQLなどは実践的に過去問から調べていました
    - 応用情報
        - 午前1の免除が久々になかったので勉強しなおしましたが、過去問やった時出来が悪かったので勉強しなおしました
        - 応用情報は持っているテキストが過去に受けた2016年のものだったのですが、結構問題が変わっていたように感じました
            - なので今回、応用情報のテキストを買いなおして知識の再定着を図りました
            - 2、3日読み直したら思い出せたことや、知識を再定着させられました
- 実務
    - バックエンドメインでの開発をして4年になりますが、その中でSQLを日常的に使い学びました
    - インデックスやテーブル設計についても理解を深められました

ここから考えられることとしては、理論的に学ぶ、経験的に学ぶの両軸の理解が自分にとって良い学習だったと感じています。

特に業務でのテーブル設計に関しては午後Ⅰ、Ⅱの問題に強く効いてきたと感じます。それなりの規模のシステムのデータベース設計を午後問題では解く必要があるので、普段の業務でどうしてこの設計にしたのか、メリットデメリットは何なのかを普段から考えたことが影響してくると感じています。

事実、初回の受験ではデータベースの理解が甘く、午後Ⅱの点数が25点くらいしかなかったように思います。
こうしたことからも将来的にデータベーススペシャリストとってみたいと考えるのであれば、データベースを活用したバックエンドの業務経験を積んでみるのも1つの方法かと思います。

## 勉強時間

最初に受験した時は大体1日2時間くらい勉強して、テキスト全部やるみたいなことをしていました。

今回は事前の予定が詰まってしまい、本格的に3週間前から勉強を開始しました。
テキストを読み始め、うち午前Ⅰ、午後Ⅱの知識の定着に2週間くらい、最後の2、3日で過去問をやるようにしていました。
 
結果的にスケジュールがかなり詰まってしまい、勉強時間があまり取れなかったので、その点は反省しています。
次に試験を受ける場合、もう少し前から勉強するようにし知識が定着するよう、行動していきたいです。


## 改めて勉強してみての感想

試験を受けるにあたっての勉強についてもそうですが、試験当日に午後Ⅰ、Ⅱを受けるのが何よりの勉強になると感じています。

午後Ⅰ、Ⅱの問題はある程度の規模のシステムを見て、データベース設計をして問題に対して解決していくという普段の仕事に近いようなことを高速でやります。
試験に合格するためには早く正確に問題を捉え、対処する必要があります。
これはものすごく頭を使いますし、疲れます。ですが、それだけ知識と経験を生かして答え出す、という良い経験ができます。

資格試験を受ける受けないに対しては、個人の考えがいろいろあると思いますが、私自身は受けてみて非常に勉強になったので、良い経験になっていると思います。

他のスペシャリスト試験は受けるつもりではいますが、継続的に勉強し知識を定着させつつ、業務にも生かしていく、これを繰り返して自分自分とチームの成長に貢献したいですね。