データベーススペシャリスト SQL・設計対策
データベーススペシャリスト(DB)試験は、SQLの読み書きとデータベース設計の両方が問われます。本記事では午後Iの頻出問題パターンと効率的な対策法を解説します。
本記事は 過去問AI が独自にまとめた学習ガイドです。試験要項の最新情報は必ず IPA 公式ページ で確認してください。
DB試験の概要
データベーススペシャリスト試験の午後Iは90分・3問から2問選択・記述式です。合格率は15〜17%で、SQL力とER設計力の両方が求められます。
頻出パターン1:SQL問題
複雑なSELECT文の穴埋め
「次のSQL文で●に入る語句を答えよ」形式で、結合・集計・サブクエリが組み合わさる問題が頻出です。
よく問われる構文:
グループ集計+絞り込みの例: SELECT dept_id, COUNT() AS cnt FROM employees WHERE status = 'active' GROUP BY dept_id HAVING COUNT() >= 10;
相関サブクエリの例: SELECT e.name FROM employees e WHERE e.salary > ( SELECT AVG(salary) FROM employees WHERE dept_id = e.dept_id );
OUTER JOIN の例: SELECT c.name, COUNT(o.id) AS order_count FROM customers c LEFT OUTER JOIN orders o ON c.id = o.customer_id GROUP BY c.name;
対策のポイント:
- INNER JOIN / LEFT OUTER JOIN / RIGHT OUTER JOIN の結果の違いを図で理解する
- GROUP BY の後にWHEREが使えない(HAVINGを使う)ルールを確実に覚える
- 相関サブクエリと非相関サブクエリの違いを問題で見分ける
トランザクション・ロック問題
「並行実行されるトランザクションAとBの実行結果がどうなるか」を問う問題。
頻出テーマ:
- デッドロックの発生条件と検知・回避
- 排他ロック・共有ロックの競合パターン(行ロック・テーブルロック)
- トランザクション分離レベル(REPEATABLE READ・SERIALIZABLE等)の違い
インデックス設計と実行計画
「このSELECT文を高速化するための適切なインデックスを答えよ」という問題。
解答の型:
- WHERE句・JOIN条件・ORDER BY の列を確認
- カーディナリティ(値の種類数)が高い列を優先
- 複合インデックスの列順序を最適化
頻出パターン2:ER設計・正規化
ER図の読み取りと補完
「業務要件から欠けているエンティティ・リレーションシップを追加せよ」という問題。
確認ポイント:
- 1対多・多対多の関係(中間テーブルの必要性)
- 属性の函数従属性(どの属性がどの主キーに依存するか)
- 弱エンティティ(識別子を他エンティティから借りるエンティティ)の扱い
正規化の問題
第1正規形〜第3正規形(場合によってはBCNF)への変換問題。
正規化の手順:
- 第1正規形:繰り返し項目を排除(各セルに1つの値)
- 第2正規形:部分関数従属を排除(複合主キーの一部にのみ依存する属性を分離)
- 第3正規形:推移的関数従属を排除(主キー以外の属性が別属性を決める場合を分離)
スキーマ設計問題
「次の業務要件を満たすテーブル定義を設計せよ」という論述的な問題。
評価される要素:
- 適切なデータ型の選択(VARCHAR・DECIMAL・DATE等)
- 主キー・外部キー制約の設定
- NULL許容の判断(必須・任意の区別)
- インデックスの設計
頻出パターン3:障害回復とバックアップ
チェックポイントとロールバック
「障害発生時にどのトランザクションをROLL BACKし、どれをROLL FORWARDするか」という問題。
解答の型:
- ロールフォワード(REDO):コミット済みのトランザクションを再実行
- ロールバック(UNDO):未コミットのトランザクションを取り消し
AIコパイロットでの活用法
- 「このSQL文がなぜ正しい結果を返すか、行を追って説明して」
- 「このER図の第3正規形違反を見つけて」
- 「デッドロックが発生するトランザクション実行順を具体的に示して」
学習ロードマップ
| 週 | 内容 |
|---|---|
| 1〜2週 | SQL基本構文(SELECT・JOIN・GROUP BY)の徹底演習 |
| 3〜4週 | サブクエリ・ウィンドウ関数・トランザクション問題 |
| 5〜6週 | 正規化・ER設計問題の演習 |
| 7〜8週 | 過去5年分の午後I問題を通し解き |
| 9〜10週 | 弱点問題の集中反復+午後II対策 |
まとめ
- SQL:JOIN・集計・サブクエリのパターンを解法として覚える
- トランザクション:ロック競合・デッドロックの図解を体に入れる
- 正規化:第1〜第3正規形の手順を問題で実践
- スキーマ設計:制約・インデックスの選択根拠を言語化できるようにする