0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DBスペシャリスト試験対策(2025-8-11)

Posted at

初学者向けDBスペ試験対策ノート


1. ロック(SロックとXロック)

内容の解説

  • Sロック(共有ロック):他人も読みOK、書きNG。

  • Xロック(排他ロック):他人は読みも書きもNG。

  • 粒度(テーブル/行)によって競合範囲が変わる。

    • 行aにSロック中→別行bへのXロックは可能。
    • 行aにSロック中→テーブル全体のXロックは不可。

  • 商品テーブルで行1にSロックがあるとき、別行2に対するXロックは取得できる。
  • ただし行1にSロックがある状態でテーブル全体にXロックを取ろうとするとブロックされる。

課題

  • 粒度の違いでロック競合がどう変わるか、表で整理する。
  • S/S, S/X, X/X の競合パターンを暗記する。

試験対策

  • 「粒度が広いロックは下位粒度をブロックする」が基本。
  • ロックエスカレーション、意図ロック(IS/IX)の存在も押さえる。

2. NULLと3値論理

内容の解説

  • SQLは true / false / unknown の3値論理。
  • NULLを含む比較は原則unknown(IS NULL/IS NOT NULLは例外)。
  • false OR unknown → unknown。

SELECT CASE WHEN (1 = NULL) THEN 'true'
            WHEN (1 <> NULL) THEN 'false'
            ELSE 'unknown' END;

この結果は常に 'unknown' になる。

課題

  • AND/ORとunknownの真理値表を自作する。
  • NULL判定のSQLを書いて動作確認する。

試験対策

  • 「= NULL」での比較は常にunknown。
  • IS NULLで判定する習慣を身につける。

3. リファクタリング

内容の解説

  • 外部仕様を変えずに内部構造を改善する作業。
  • 可読性、保守性、拡張性、再利用性を向上させる。

  • 冗長なJOINをサブクエリ化して見やすくする。
  • 意味のわからないカラム名を業務的な意味が分かる名前に変更。

課題

  • 自分の書いたSQLやコードをリファクタリングしてみる。
  • 命名改善、重複排除、条件簡略化を実践。

試験対策

  • 「外部振る舞い不変+内部改善」がキーワード。
  • 他の用語(リバースエンジニアリング、回帰テスト)との区別を覚える。

4. COUNTで条件付き集計

内容の解説

  • COUNT(expr) は NULL以外の件数を数える。
  • 条件一致時のみ1、不一致はNULLを返すと条件件数が取れる。

SELECT COUNT(CASE WHEN 役職 = '主任' THEN 1 ELSE NULL END) AS 主任数
FROM 社員;

課題

  • COUNTとSUMで条件付き集計をそれぞれ試す。
  • ELSE 0とELSE NULLの違いを確認する。

試験対策

  • 件数 → COUNT + ELSE NULL
  • 合計 → SUM + ELSE 0

5. 弱実体

内容の解説

  • 親がいないと存在できない実体。
  • 識別は「親キー+自分の部分キー」で行う。

  • 注文に属する注文明細(注文削除で明細も削除)。

課題

  • ER図で弱実体を二重枠で描く練習。
  • 存在従属の例を3つ書く。

試験対策

  • 「親削除で子も削除」=弱実体と即判断できるように。

6. 2相ロック(2PL)

内容の解説

  • 成長段階:ロック取得のみ。
  • 縮退段階:ロック解放のみ。
  • このルールで競合直列可能性が保証される。

  • 銀行振込トランザクションで、残高確認→更新(ロック取得)→振込完了→ロック解放。

課題

  • 2PLの状態遷移図を描く。
  • 厳密2PLとの違いを調べる。

試験対策

  • 2PLでもデッドロックは起こる → 別対策が必要。
  • 「取って放す」順序を守るかが肝。

7. ファントムリード

内容の解説

  • 同じ検索条件で行集合が増減する現象。
  • 範囲ロックやSERIALIZABLEで防ぐ。

  • 「平均点が80点以上の学生」を集計中に、新規学生がINSERTされて平均が変動する。

課題

  • READ COMMITTEDとSERIALIZABLEの挙動を比較。
  • ファントムリードが起こるSQL例を作る。

試験対策

  • 「条件範囲に行が増減」=ファントムリードと即答できるように。

8. ACID特性

内容の解説

  • A:全か無か(原子性)
  • C:制約保持(一貫性)
  • I:直列化と同等の見え方(分離性)
  • D:コミット後は失わない(耐久性)

  • 銀行振込で送金だけ成功して入金が失敗→原子性違反。

課題

  • 各特性が欠けた場合の事例を調べる。

試験対策

  • 選択肢にACID以外の説明が混ざっていることが多いので見抜く。

9. 3層スキーマ

内容の解説

  • 外部スキーマ:ユーザごとの見え方。
  • 概念スキーマ:全体の論理構造。
  • 内部スキーマ:物理的な格納方法。

  • 外部:社員給与ビュー、概念:社員テーブル構造、内部:インデックス設定。

課題

  • 自社システムを3層に分けてみる。

試験対策

  • 「外部=ビュー、概念=論理構造、内部=物理構造」と覚える。

10. 候補キーの導き方

内容の解説

  1. 右辺に出ない属性を必須にする。
  2. それに属性を足して閉包計算。
  3. 全属性に到達&極小なら候補キー。

  • R(A,B,C), A→B, B→C → 候補キーはA。

課題

  • 関数従属性集合から候補キーを3パターン導出する練習。

試験対策

  • 「右辺に出ない属性→必須」が時短のカギ。

11. 2相コミット(2PC)

内容の解説

  • 分散DBで全参加者がYESならコミット。
  • フェーズ1:準備→投票。
  • フェーズ2:コミット/アボート決定。

  • A支店とB支店の口座振替を同時コミット。

課題

  • 2PCのシーケンス図を描く。

試験対策

  • ブロッキング問題とYES/NOの条件を覚える。

12. 正規化

内容の解説

  • 2NF:複合キーの一部だけで決まる属性を排除。
  • 3NF:非キー→非キーの従属を排除。

  • 注文明細(注文ID, 商品ID, 商品名)で商品名は商品IDに依存→3NF違反。

課題

  • 複合キーと部分関数従属の例を作る。
  • 推移的従属の例を作る。

試験対策

  • 単一キー→2NF自動クリア、複合キー→部分従属要注意。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?