ISBN 9784774171975
理論から学ぶデータベース実践入門 : リレーションモデルによる効率的なSQL
概要
リレーショナルモデルの理論を起点にSQLと設計を再体系化する
想定読者
SQLは書けるがリレーショナルモデルの理論を体系的に学んだことがないWebエンジニア(経験1〜3年目)
こんな人には向いていない
- ORMが主体でSQLを直接記述する機会がほとんどない開発者——理論的な記述の密度が実感しにくく途中離脱しやすい
- すでにリレーショナル理論・正規化・クエリ最適化の業務経験が豊富な上級者——既知内容の比重が大きくなる
- 誤記に敏感な読者——2017年時点でQiitaに技術的な誤りを指摘する記事(likes: 141)が公開されており、正誤表の並行確認が不可欠
この本で身につくこと
- 第一〜第三正規形の定義を理論的に説明し、実際のテーブル設計で正規化の判断根拠を示せる
- Nested Loop Join の仕組みを理解し、インデックスの有無・テーブル件数・結合順序がクエリコストに与える影響を説明できる
- NULL の三値論理(TRUE / FALSE / UNKNOWN)を正確に扱い、意図しない集計や絞り込み漏れを防止できる
- インデックスが効く条件・効かない条件をリレーショナルモデルの観点から根拠を持って判断できる
- SQLをリレーショナル代数の操作として読み解き、等価な書き換えによってパフォーマンスを改善できる
章立て
第1章 SQLとリレーショナルモデル
リレーショナルモデルと SQL の関係(SQL は単なる近似であり厳密ではない)を最初に明示する導入
第2章 述語論理とリレーショナルモデル
リレーショナルモデルの数学的基礎(述語論理)を整理。後続正規化議論の前提
第3章 正規化理論(その1)—— 関数従属性 ——
1NF〜BCNF の関数従属性を経由した正規化を厳密に扱う
第4章 正規化理論(その2)—— 結合従属性 ——
4NF・5NF の結合従属性。実務でも触れることが少ない領域を体系化
第5章 リレーションの直交性
本書独自の章。直交性の概念で正規化の補助を行う
第6章 ドメインの設計戦略
ENUM や CHECK 制約をどう使うかの設計判断
第7章 NULLとの戦い
本書の白眉の 1 つ。NULL の三値論理が引き起こす論理的破綻を実例で示す
第8章 SELECTを攻略する
JOIN / GROUP BY / 集合演算の見通しを良くする視点
第9章 履歴データとうまく付き合う
Kimball の SCD 概念を SQL で実装する方法論
第10章 グラフに立ち向かう
再帰 CTE・隣接リスト・閉包テーブル。SQL でグラフ構造を扱う技法集
第11章 インデックスの設計戦略
B-Tree インデックスの動作とクエリパフォーマンスへの影響
第12章 Webアプリケーションのためのデータ構造
Webアプリの典型的なデータ構造(ユーザー・投稿・タグなど)をリレーショナルモデルで設計する応用章。理論と実務事例を接続するため、前章までの理解確認としても機能する
第13章 リファクタリングの最適解
既存スキーマの改善手順。ダウンタイム最小化への配慮
第14章 トランザクションの本質
ACID と分離レベルの関係を理論的に再構築する締めの章
関連記事 / 参考情報
- 【Webエンジニアど素人から3年生ぐらいになるまでに読むと良い本】を段階的にまとめた — 経験年数別の段階的推薦書リスト。本書はDB設計・SQLの理論的基礎として2年目以降向けに紹介されている
- 実例で学ぶ、JOIN (NLJ) が遅くなる理屈と対処法 — Nested Loop Join の実行コスト構造を実例で解説。本書の理論的背景が実務のクエリチューニングに直結する様子が示される
- 正規化の要点を理解する — 第一〜第三正規形の要点を整理した解説記事。本書の正規化章を補完しながら読むと理解が定着しやすい
- インフラエンジニアの自分が買ってよかったと思う書籍10選 — インフラエンジニア視点の推薦書リスト。DB設計の理論的基礎書として本書が選ばれている
- 『理論から学ぶデータベース実践入門』の間違いを指摘する — 本書の技術的な誤りを具体的に列挙した記事。読む際に正誤情報を並行確認するための必読リソース
- Railsエンジニアなら知っておきたい!RDBでindex作成を検討するときってどんなとき? — Rails開発者向けにRDBインデックス設計の判断基準を解説。本書のインデックス理論と対照させながら読める
- 『理論から学ぶデータベース実践入門』読書録 — 本書を通読した際の章ごとのメモ。理論部分の理解経緯と詰まりやすいポイントが参考になる
学習のヒント
- NULLと三値論理の章は、普段ORMに任せている箇所だけに実感が湧きにくい。NULLを含む集計・結合・絞り込みクエリを手元のRDBで実行しながら読むと、期待と結果のズレが体感できて定着が速い
- JOIN性能の章は「実例で学ぶ、JOIN (NLJ) が遅くなる理屈と対処法」(Qiita, likes: 1,414)と並読すると、理論と実務トラブルの接続がよりはっきりする
- 本書に技術的な誤りが含まれることが2017年のQiita記事で具体的に指摘されている。技術評論社の正誤表を別途確認した上で読み進めることを強く推奨する
- リレーショナル代数を説く序盤の章は抽象度が高く感じられるが、この層の理解が後半のSQL書き換えとインデックス設計の根拠につながる。読み飛ばさず、図を手書きで写しながら進むと回収が早い
前提知識
- 基本的なSELECT / JOIN / GROUP BYを使ったSQL記述経験
- テーブル・主キー・外部キーの概念的な理解
- 何らかのRDB(MySQL / PostgreSQLなど)を実際に操作した経験
次に読む本
SQLアンチパターン
本書でリレーショナルモデルの原理を習得した後、実務で頻出する DB 設計の誤りをカタログ形式で学ぶ段階として自然に接続できる。本書の「なぜそう設計すべきか」に対し、こちらは「なぜその設計が崩れるか」を対照的な切り口で体系化している
プログラマのためのSQL 第4版
本書でリレーショナルモデルの基礎を固めた後、SQL を集合演算として体系的に再解釈する段階への橋渡しとなる。本書が設計原理の「なぜ」を押さえるのに対し、こちらは SQL 構文をリレーショナル代数の操作として徹底的に再構築する立場で書かれている
データベース設計徹底指南++
本書が正規化の理論的根拠(関数従属性・結合従属性)を扱うのに対し、こちらは業務要件に応じた非正規化の判断基準やトレードオフの意思決定を実務レベルで解説する。設計の「原則」から「例外の根拠」へ視点を移す段階として位置付けられる
出版社による内容紹介
リレーショナルモデルの観点からSQLとデータベース設計を学び直す実践書。正規化、関係演算、ビュー、NULLなどの概念を理論面から整理したうえで、よくあるアンチパターンと、それを避けるためのSQLの書き方・設計の勘所を示す。経験はあるが体系的に基礎を固めたい開発者やDB担当者に向く一冊である。
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。