データベーススペシャリストへの試験勉強は実務に役立つ!

「データベーススペシャリスト試験」とは?

都内のとあるIT会社、時計の針は午後9時。オフィスにはまだ何人かが残り、それぞれの席で仕事を続けている。その一人であるA は、自分のディスプレイを見つめながらつぶやいた。

A いつになったらB先輩 のようなデータベースエンジニアになれるのかな……。

B まぁまぁ。まだおまえは入社4年目だろ? 焦ることはないって。俺なんか、もう10年もやってるからな。

Bは笑いながらコーヒーをすすり、ディスプレイをちらりと見やる。

B 残業をたくさんして、現場で技術を身につけるのが最短距離だよ。実際、それしかないんだ。

確かに、技術を身につけるには実践が欠かせません。Bさんの言うとおり、現場で苦労をして得た技術は、何ものにも代えがたい武器になります。しかし、そのためにかかる膨大な時間を「気合と根性」で乗り切るというやり方には、限界があると感じている人も多いのではないでしょうか。

A B先輩の言ってることもわかるけど、できればもっと早く一人前になりたいな……。そういえば、⁠データベーススペシャリスト試験」っていうのがあったような。

「データベーススペシャリスト試験」は、IPA(情報処理推進機構)が主催する国家試験である「情報処理技術者試験」の1つです。その中でも最も難易度が高い、⁠レベル4(高度試験⁠⁠」にあたります。

この試験は、大規模なデータベースシステムの設計・構築・運用・パフォーマンス管理を担う高度な技術者を対象としています。IPAのサイトに記載されている「対象者像」を引用してみましょう。

高度IT人材として確立した専門分野をもち、データベースに関係する固有技術を活用し、最適な情報システム基盤の企画・要件定義・開発・運用・保守において中心的な役割を果たすとともに、固有技術の専門家として、情報システムの企画・要件定義・開発・運用・保守への技術支援を行う者

引用元データベーススペシャリスト試験の「対象者像」

試験勉強は仕事の役にたたない?

A B先輩! 僕、早く先輩みたいになりたくて、データベーススペシャリスト試験に挑戦することにしました!

B ちょっと待て! 資格なんか取っても、何にもならないって(笑)

そんなことはありません。情報処理技術者試験は1969年に開始されてから、実に50年以上の歴史がある、IT系で唯一の国家試験です。これほどの長い歴史を持つ理由は、特にIT関連企業がその価値を強く認めてきたからです。

IPAが行った『IT人材白書2020』の企業アンケートによれば、回答したIT企業の24%が高度試験の合格者に資格手当や報奨金を支給しており、金額は月額1〜2万円、あるいは一時金5〜20万円が中心でした。

また同アンケートでは、高度試験の合格を昇進・昇格の要件にしている企業が全体で8%、従業員1,000人超の大企業に限ると12%に上ると報告されています。

こうした公的調査の数字は、企業がインセンティブや評価制度で後押しする資格としてデータベーススペシャリスト試験が高く評価されていることを示しています。

B へぇ。でも、試験勉強で学んだ知識なんて、実務とはまったく関係ないだろ?

A 僕もそう思ってたんですけど……実際に解いてみると、今の仕事と重なる部分もあったりして面白いんですよ。

B ふーん……見せてみてよ。

実際に出題された問題①(午前Ⅱ試験)

問題

商品表と商品別売上実績表に対して、次のSQL文を実行して得られる売上平均金額はどれか。

SELECT AVG(売上合計金額) AS 売上平均金額
    FROM 商品 LEFT OUTER JOIN 商品別売上実績
        ON 商品.商品コード = 商品別売上実績.商品コード
    WHERE 商品ランク = 'A'  
    GROUP BY 商品ランク  

【ア】100  ⁠イ】150  ⁠ウ】225  ⁠エ】275

引用元「データベーススペシャリスト試験 令和4年秋期 午前Ⅱ 問7」より引用

B 確かに、実務でも普通に使うSQL文だな。

A そうですね。商品テーブルと商品別売上実績テーブルを結合します。結合条件は商品コードですが、外部結合なので商品別売上実績テーブルに存在しない行でも結果に出しますよね。

B そうだな。その場合、売上合計金額はNULLとするわけだ。さらに商品ランクが"A"のものだけという条件も忘れてはいけない。

A このような結果になりますね。

商品コード 商品名 商品ランク 売上合計金額
S001 PPP A 50
S002 QQQ A NULL
S003 RRR A 250
商品表と商品別売上実績表を左外部結合した結果

B 3行になったな。売上合計金額の平均値は……あれ? NULLは0とみなして、(50+0+250)/3で計算されるのか?

A AVG関数は、計算の際にNULLの行を排除しますので、(50+250)/2の計算になるはずです。

B お、おう! そうだったな(意外と忘れているものだな……⁠⁠。

Aさんの言うとおりAVG関数では、NULLは0と見なすのではなく、そもそも存在していない行として扱います。そのため1行目と3行目だけを計算に使い、結果は150となります。正解は【イ】です。

A こういった問題を解くと、日ごろ書いているSQLを見直すきっかけにもなりますね。

B ま、まぁな。でもたまたまかもしれないぞ。

A では、他の問題も見てみましょう!

実際に出題された問題②(午前Ⅱ試験)

問題

トランザクションPが資源Xの値を4から5に更新した後にトランザクションQが開始し、Pがコミットする前にQが資源Xを参照しようとした。Qの挙動のa、bに入れる字句の組みはどれか。ただし、隔離性水準はREAD COMMITTEDとする。

[Qの挙動]
同時実行制御が単版2相ロッキングプロトコルの場合Qは( a ⁠⁠、多版同時実行制御(MVCC)の場合Qは( b ⁠⁠。
引用元「データベーススペシャリスト試験 令和6年秋期 午前Ⅱ 問14」より引用

B ほらぁ! 隔離性水準なんて、実務で使わないぞ! 社会人になったら因数分解なんて使わないのと同じ!

A 確かにそうかもしれません。ただ、DBMSによって隔離性水準の初期設定が異なるようなんです。たとえばOracleであればREPEATABLE READだし、MySQLであればREAD COMMITTEDを少しカスタマイズしたものが初期設定のようです。

READ COMMITTEDは、たとえばトランザクションAで、ある値を「5」から「10」に更新しても、コミットしていなければトランザクションBからは「5」に見えます。トランザクションAがコミットすることで、トランザクションBからはやっと「10」に見えるようになります。一方でREPEATABLE READは、トランザクションAがコミットしても、トランザクションBからはその変更が見えません。トランザクションBは開始時点のデータのスナップショットを保持し、そのスナップショットに基づいて同じ値(たとえば「5⁠⁠)を読み続けます。トランザクションBを終了し、新たに開始することで、はじめて「10」が見えるようになります。

この動きがわかっていないと、複雑なシステムにおいては思わぬバグを引き起こすことがあります。特に複数のトランザクションが同時に動く場合、設定の違いが予期しない挙動をすることがあります。厄介なのは、こうした問題は常に発生するわけではないということです。そのため入念なテストを行ったつもりでも、実運用になってから初めて問題が顕在化するというケースもあります。

B なるほど……勉強になるな。問題文にある2相ロッキングプロトコルって何だろ。

2相とは「2フェーズ」という意味です。トランザクションでテーブルを使う際には、その直前にロックを行います。これが1フェーズ目です。ただしテーブルを使い終わってもすぐにロックは解除せず、トランザクションが終わる直前ですべてのロックをまとめて解除します。これが2フェーズ目の処理です。

このルールに従うことで、⁠直列化可能」となります。直列化可能とは、どちらのトランザクションが先に実行されたとしても、結果が同じになるという性質です。

B そういえば前のプロジェクトで、このルールが徹底されていたことがあった。これだったのか。

開発現場で「ロックしてもすぐに解除せず、最後にまとめて解除すること」というルールが徹底されていたとしても、⁠それがなぜ必要なのか」という背景まで理解している人は意外と多くありません。しかし、あらかじめ学習しておけば、⁠これは直列化可能性を保つために必要なルールなんだ」と納得して受け入れることができ、自信をもって他のメンバーに説明・共有することもできます。

A どうですか先輩? 試験の勉強も、意味がありそうじゃないですか?

B 正直、思っていたよりもずっと実践的だな。

これまでの実務経験を越えて、まだ現場で出会っていない「実践的な知識」まで学べること、これこそが資格試験の強みです。

実際に出題された問題③(午前Ⅱ試験)

それだけではなく、時代の変化に応じて試験内容が更新されている点も重要です。たとえば、令和4年度の試験ではこんな問題が出題されました。

問題

機械学習を用いたビッグデータ分析において使用されるJupyter Labの説明はどれか。

  • 【ア⁠⁠ 定期的に実行するタスクを制御するための、ワークフローを管理するツールである。
  • 【イ⁠⁠ データ分析を行う際に使用する、対話型の開発環境である。
  • 【ウ⁠⁠ 並列分散処理を行うバッチシステムである。
  • 【エ⁠⁠ マスターノードをもたない分散データベースシステムである。
引用元「データベーススペシャリスト試験 令和4年秋期 午前Ⅱ 問17」より引用

B Jupyter Labなんて、聞いたことないな。

Jupyter Labは、プログラミングに詳しくなくても、Pythonなどを使ってデータを読み込んだり、グラフにしたり、分析の流れをノートにまとめるように記録したりできるツールです。パソコンのブラウザ上で動き、途中で結果を見ながら確認できるので、データ分析や機械学習の初心者にもやさしい環境です。

このように、最新の事例にもどんどんと対応されています。

A 技術の進歩に取り残されないようにするためにも、最新情報のキャッチアップは重要ですね!

試験の区分

B ……よし! 俺もデータベーススペシャリスト試験に挑戦するぞ!

A ちょっと待ってください! ここまではまだ、⁠午前試験」の話なんです!

ここで、データベーススペシャリスト試験全体の区分を整理しておきます。

午前Ⅰ試験は30問の4択式問題です。同じ回に開催される、応用情報技術者試験の午前試験(80問)から30問抜粋されます。なお、2年以内に応用情報技術者試験に合格していれば、午前I試験は免除されます。

午前Ⅱ試験も同じく4択式問題で、25問出題されます。データベース分野がメインとなりますが、25問のうち7問はそれ以外の「コンピュータ構成要素」⁠システム構成要素」⁠ソフトウェア開発管理技術」⁠セキュリティ」という分野から出題されます。今まで紹介してきたのは、この「午前Ⅱ試験」の問題でした。

データベーススペシャリスト試験の区分
引用元 『データベーススペシャリスト完全攻略の教科書&過去問題』13ページより引用

試験の山場は、これから紹介する「午後試験」になります。

午後Ⅰ試験は4~5ページ程度の長文読解問題で、解答は記述式です。たとえば「図5中の(ア)で行うべき処理を40字以内で答えよ」に対して、⁠"再開位置"テーブルからジョブIDがHJOBIDの行を削除する。」などと答えます。

午後Ⅱ試験も午後Ⅰと同じく記述式で、大問2問のうちから1問だけを選んで解答する形式です。例年は問1で「SQL文&物理設計⁠⁠、問2で「論理設計」に関する問題が出題されます。午後Ⅰ試験よりも少しばかり難易度が上がりますが、大きくは変わりません。ただし問題が15ページ以上にもなるため、午後Ⅰ試験よりも大変という印象があるはずです。

実際に出題された問題④(午後試験)

B 記述式? 一体どんな問題が出題されるんだ?

午後試験の「SQL文」関連の出題では、以下のようなSQL文が提示され、その空欄を埋めていきます。

引用元 「データベーススペシャリスト試験 令和5年秋期 午後Ⅱ 問1」より引用

このSQL文の前には、出題テーマに沿ったストーリーが書かれています。このストーリーを満たすようにSQL文を完成させます。上のSQL文は、以下の依頼2に答えるためのSQL文です。

引用元 「データベーススペシャリスト試験 令和5年秋期 午後Ⅱ 問1」より引用

「物理設計」の問題の一例としては、以下のような表を完成させる問題が出題されます。

引用元 「データベーススペシャリスト試験 令和2年 午後Ⅱ 問1」より引用

そのためには、データベースにデータがどのように格納されるのかという深い知識が必要です。

「論理設計」は、主にE-R図を完成させる問題が出題されます。

引用元 「データベーススペシャリスト試験 令和2年 午後Ⅱ 問2」より引用

いずれにしても、実務を多く経験していることで、スムーズに学習が進むはずです。

A 午後試験は難しそうですね……。私は実務経験が少ないので、いきなり挑戦するのは無理なのでしょうか……。

それは違います。繰返しになりますが、学習を通じて実務経験を積んだかのような知識を獲得できることこそが受験の強みです。入社4年目だとしても、入社10年目と同様のレベルに到達できるかもしれません。実務経験が少ないのであれば、挑戦する価値はむしろ高まるとも言えます。

では最後に、Aさんのような方におすすめの「データベーススペシャリスト試験攻略法」を紹介しましょう。

午前Ⅰ試験の攻略法

午前Ⅰ試験は、同じ回に開催された応用情報技術者試験の午前試験から抜粋された30問が出題されます。その30問はデータベースに限らず、広い分野から出題されます。そのため午前Ⅰ対策としては、応用情報技術者試験の学習が効果的ということになります。

応用情報技術者試験は午前試験と午後試験に分かれています。データベーススペシャリストの午前Ⅰ試験のみを考えるのであれば、応用情報技術者試験の午後試験の学習は不要です。しかしそれでも、応用情報技術者試験の範囲をすべて学習することをおすすめします。午後試験の学習をすることで、データベーススペシャリスト試験の午後試験対策にもなるためです。

したがって、できれば応用情報技術者試験を受けて、合格をしておくことをおすすめします。たとえば、ある年の秋期試験で応用情報技術者試験に合格しておき、その1年後のデータベーススペシャリスト試験の合格を目指すという流れです。

B 応用情報技術者試験を、データベーススペシャリスト試験の予行演習として捉えるのか。

A 応用情報技術者試験も難しそうですが、スペシャリストを目指す以上、厳しい道のりなのは当然ですね。

午前Ⅱ試験の攻略法

次に午前Ⅱ試験対策です。これは過去問題が非常に参考になります。

情報処理技術者試験は全般的に、過去問題・サンプル問題がしっかり公開されています。つまり、これらを活用した学習が推奨されているということです。データベーススペシャリスト試験の午前Ⅱ試験でも、過去問題を徹底的にやりこむことが非常に有効です。

A しかしそれだと、過去問題を丸暗記した人が合格してしまうのではないのですか?

午前Ⅱ試験対策として、丸暗記がある程度有効なのは確かです。同じ問題がいくつかそのまま流用されることもあります。しかし流用はそれほど多くありませんので、丸暗記だけだと合格は不可能です。

過去問題を解く中で、知らなかった知識がいくつもあるはずです。その知識を起点として、参考書やネット上の記事で知識を深掘りしていってください。たとえば、以下のような問題があったとします。

問題

あるエンティティを関係データベース上に実装しようとしたとき、その主キーが多くの属性から構成される複合キーとなることが分かった。主キーとして扱う属性を少なくして扱いやすくしたい。この対応として、適切なものはどれか。

  • 【ア⁠⁠ 複合キーを構成する属性のうち、エンティティの性格を最もよく表している一つの属性を主キーとし、残りの属性を外部キー(foreign key)にする。
  • 【イ⁠⁠ 複合キーを構成する属性のうち、エンティティの性格を最もよく表している一つの属性を主キーとし、残りの属性を代替キー(alternate key)とする。
  • 【ウ⁠⁠ 連番などを値として与える列を新たに設けて主キーとし、複合キーの代理キー(surrogate key)とする。
  • 【エ⁠⁠ 連番などを値として与える列を新たに設けて主キーとし、複合キーを外部キー(foreign key)にする。
引用元「データベーススペシャリスト試験 令和6年秋期 午前Ⅱ 問5」より引用

この問題だけでも「エンティティって何?」⁠複合キーって、主キーがたくさんあること?」⁠属性って、項目のこと?」など、疑問点がいくつも出てくるはずです。

B 主キーは、テーブルに1つだけしか設定できないはず。

その通りです。複合キーとは主キーが複数あるのではなく、主キーが複数の属性(項目)で構成されていることです。過去問題を起点にして、疑問点を洗い出し、どんどんと知識を深めていってください。

A 代理キーなんて初めて聞きました。これは何ですか?

B それは……代理のキーだろ。

主キーの候補のうち、主キーにならなかった項目が代理キーです。社員を特定するためには一般的には社員番号が使われますので、社員番号は主キーに最適です。社員を特定できる電話番号は、主キーとして採用できるかもしれません。しかし、電話番号ではなく社員番号を主キーとしたのであれば、電話番号は代理キーとなります。

B ⁠知らなかった……)

このような勉強を続けていけば、かなりの基礎知識が身につきます。

午前Ⅱ試験はデータベース分野以外からも出題されますが、午前Ⅰ試験をクリアできるのであれば、重点的な対策は不要でしょう。

午後Ⅰ試験の攻略法

いよいよ午後試験対策です。これも同じく、過去問題をやりこむことが重要です。

午後試験は午前試験とは異なり、過去問題の流用はまったくありません。ただし、似たようなテーマ・内容の出題はあります。特に、在庫管理や販売管理などは定番です。

B 在庫管理や販売管理? 確かに業務で何度も扱ってきたぞ。

A それ以外のテーマとしては、どのようなものがありますか?

たとえばフェリー予約、オンライン学習プラットフォーム、農業機器などの変わり種のテーマもたくさんあります。

B さすがの俺も、農業機器のデータベース設計をしたことはないなぁ……。

あまり一般的ではないテーマの問題は、しっかりと説明がされているケースがほとんどです。一方で、在庫管理や販売管理のような一般的なテーマであれば、説明が省かれていることがあります。

たとえば「引当」は、在庫管理のシステム開発に携わったことがある人であれば当たり前の用語かもしれませんが、そうでない人にとってはイメージが湧かないかもしれません。

A 引くに当たる?? なんて読むのですか?

B "ひきあて"といって、注文を受けたときに、その注文を将来の出荷に向けて在庫に"予約"しておく処理なんだよ。

A 勉強になりました。

このように、業務知識を短期間で得られることも、午後試験を学習するメリットです。

午後Ⅰ試験は5ページ程度です。過去問題をやりこむ場合、5ページ程度であれば比較的手が付けやすいボリュームかと思います。

たとえば昼休みに問題文だけを軽く読んで、帰宅してから解き、答え合わせをすれば、1日1問です。これを平日に2日ほど頑張り、土日はそれぞれ1問ずつ進めます。これで、一週間で4問。一か月もあれば16問ほどになります。まずはこれを目標にしてみましょう。

最初は「全然わからない!」と感じるはずですが、数問解くうちに、かなりコツがつかめてきます。

解く量としては、⁠過去5年分」が目安になります。午後Ⅰ試験は3問で構成されていますから、過去5年だと全部で15問です。

午後Ⅱ試験の攻略法

次に午後Ⅱ試験です。15ページほどあるため、午後Ⅰ試験に比べるとかなり疲れます。解いてから答え合わせをし、理解するのには、丸1日かかるかもしれません。そのため1日で1問ではなく、数日に分けて解くようにしましょう。たとえば1週間かけて1問、一か月で4問を目標にします。

また午後Ⅰ試験の学習は早々に切り上げて、午後Ⅱ試験に移る方法もおすすめです。午後Ⅰ試験と午後Ⅱ試験とで、大きな難易度の差はありません。そのため、午後Ⅰ試験を3問ほど解いて感覚を掴んだのなら、午後Ⅱ試験に移ることも検討します。午後Ⅱ試験を何問か経験したあとに午後Ⅰ試験を解いてみると、非常に簡単だという感覚が得られるはずです。難易度に差はあまりないのですが、ボリュームには大きな差がありますから、午後Ⅱ試験で慣れてしまうと、午後Ⅰ試験は楽に感じるはずです。

まとめ

B でも毎日の仕事が忙しいなか、果たして勉強を続けることができるのか……?

多くの方が抱えているのが、この悩みです。私の考えでは、まったく無理をする必要はありません。今日から学習を進めてほしいとは思うのですが、毎日厳しいノルマを課すのではなく、1週間ごとに比較的緩いノルマを課すことをおすすめします。先ほどは「午後Ⅰ試験を1週間で4問」と書きましたが、難しければ2問でも3問でも結構です。少しずつでいいので進めてみましょう。

データベーススペシャリスト試験は単なる資格試験ではなく、体系的に知識を整理し、業務の中で曖昧だった理解をクリアにしてくれる貴重な機会です。また、合格を目指して努力する過程そのものが、将来の自分への大きな投資になります。

目の前の仕事に追われていると、つい自己投資を後回しにしてしまいがちです。だからこそ、意識的に一歩を踏み出すことが重要です。この試験に向けた取り組みが、きっとあなたの視野を広げ、キャリアの可能性を大きく広げてくれるはずです。

A さっそく明日から、できる範囲で学習を進めてみます!

B おう、お前に負けないように俺も頑張るぞ!

あなたの挑戦を心から応援しています。

おすすめ記事

記事・ニュース一覧