データベース・プロフェッショナル養成講座(PostgreSQL・全13回)

初心者を「設計・性能・運用・安全の四方向から根拠を語れる実務者」へ引き上げる、全13回の自習教材。

このページは講座全体の索引である。各回は独立した自習ドキュメントになっており、上から順に読むことを想定している。 全回で PostgreSQL 16 系を前提とし、第1回で作る共通の EC データセット(架空のEC「PostShop」)を最後までいじり続ける。

この講座の進め方

学習ロードマップ

基礎(1-3) → 設計(4-6) → 内部構造・性能(7-8) → 整合性・安全(9-11) → 運用・スケール(12-13)

段階は5つ。基礎(1〜3)で関係モデルと SQL を身につけ、設計(4〜6)で正規化・型・制約・実務モデリングを積み、 内部構造・性能(7〜8)で索引と実行計画を読み、整合性・安全(9〜11)でトランザクション・権限・インジェクションを扱い、 最後に運用・スケール(12〜13)で定点観測と分散を俯瞰する。

共通教材データセット(PostShop)

第1回で以下を投入し、最後まで使い続ける。行数は PostgreSQL でチューニングの差が体感できる規模に設定している。

テーブル概算行数役割
customers約 5万顧客。地域・登録日を持つ
categories約 30商品カテゴリ
products約 5,000商品。カテゴリ・価格
product_prices約 2万価格の履歴(第6回で使う)
orders約 100万注文。ステータスと注文日時(本データセットの主役)
order_items約 300万注文明細(注文×商品の多対多の実体化)
events約 1,000万アクセスログ。パーティション/OLAP 回で使う

スキーマの詳しい定義とデータ投入手順は第1回にある。

各回一覧

回タイトル主題
1環境構築・エンコーディング/照合順序Docker で PostgreSQL を立て、教材データを投入。一方通行の初期決定(エンコーディング・collation)
2関係モデルとは何だったのかテーブル=集合。宣言的 SQL への頭の切り替え。三値論理と NULL
3SQL を書ききるJOIN・集約・サブクエリ・CTE・ウィンドウ関数。アプリのループを 1 クエリへ
4論理設計と正規化ER と関数従属。正規形を「防ぐ更新異常」で理解し BCNF まで分解
5データ型と制約設計金額・日時・列挙の型選定。制約を DB 側で守る
6実務のモデリング履歴・有効期間・状態遷移・論理削除・非正規化の実務判断
7ストレージとインデックス+照合順序の実害ページ/B-tree/複合索引の列順。照合順序が前方一致検索に効く実害
8実行計画を読む(虫眼鏡)EXPLAIN (ANALYZE, BUFFERS) で遅さの原因を言語化し改善
9トランザクションと並行制御ACID・分離レベル・MVCC。ロストアップデートを再現して防ぐ
10権限・ロール・RLS・監査最小権限・行レベルセキュリティ・監査。superuser 接続からの卒業
11アプリとの境界+インジェクションN+1・プール・長時間 Tx と SQL インジェクションを同時に防ぐ
12運用+pg_stat_statements(定点観測)バックアップ・PITR・無停止スキーマ変更・VACUUM・遅いクエリの定点観測
13スケールと外の世界レプリケーション・パーティション・OLTP/OLAP 分離・NoSQL/ベクトルDB

各回の冒頭には「この回で新しく出てくる用語」表がある。回をまたいで繰り返し出る語は 用語集にまとめてあるので、読み進めていて意味が取れない語に出会ったらそちらを引く。

修了判定(Capstone)

卒業要件は最終課題で判定する。設計レビューでは性能・整合性・運用に加え、権限最小化とインジェクション耐性(安全)も観点に含める。

卒業要件判定課題
遅いクエリを EXPLAIN から特定して直せる未知の遅いクエリを渡し、原因特定 → 改善 → before/after を説明(第7・8・12回の応用)
要求仕様から ER を起こし正規化度合いを説明できる新しい小さな要求仕様から ER 設計 → 型・制約まで含めて正規化度合いと逸脱理由を説明(第4〜6回)
設計判断を性能・整合性・運用(・安全)から語れる上記設計を「なぜこの設計か」で、性能・整合性・運用・権限/安全の観点からレビューに答える

合格ラインは、各課題で選択の「理由」を自分の言葉で説明できること。正解の暗記ではなく判断の言語化を見る。

修了後

全13回の先で、実務経験以外に積めるステップは 講座修了後のロードマップにまとめている。