はじめに
数年前、業務で既存システムのリプレースを担当したとき、最も苦労したのがデータベースの再設計だった。テーブル定義書を開くと、正規化が中途半端なまま増改築を繰り返した痕跡が残っていて、カラム追加ひとつに数日かかる状態だった。
そのとき痛感したのは、SQLの構文を書ける能力とデータベースを設計する能力はまったく別物だということだ。クエリのパフォーマンスチューニングも大事だが、そもそも土台のスキーマが歪んでいると何をやっても限界がある。
自分はこの経験をきっかけに、DB設計の書籍を片っ端から読み漁った。その中で実務に直結し、繰り返し参照している本を5冊に絞って紹介する。初学者がゼロから学ぶ段階から、現場でアンチパターンを回避する段階まで、一本の流れになるよう並べた。
① Database Design for Mere Mortals — Michael J. Hernandez
Michael J. Hernandezは長年リレーショナルDB設計のコンサルタントとして活動してきた人物で、非エンジニアにもわかる説明に定評がある。
本書はリレーショナルデータベース設計の全体像を、専門用語をなるべく使わずに解説する入門書だ。テーブルの分析・改善、キーの実装、テーブル間のリレーション定義、ビジネスルールの表現、データビューの作成といったトピックが網羅されている。
特に「既存DBを分析して改善する」という章立てが実践的で、新規設計だけでなくレガシーDBの改修にも応用が利く。実世界の例を多用しているため、読み進めるうちに設計判断の勘所が身につく。
インデックスや正規化の各段階に関する掘り下げはやや浅いので、この本で全体像をつかんだ後に専門的な書籍で補完するのがよい。
こんな人に: DB設計を初めて学ぶアプリケーション開発者、レガシーDBの改修を任された人
② Beginning Database Design Solutions — Rod Stephens
Rod Stephensはソフトウェアエンジニアとして30年以上の経験を持ち、プログラミング関連の著書を多数執筆している。
本書の強みは正規化の理論、よく使われるDB設計パターン、避けるべき設計上の落とし穴をバランスよくカバーしている点だ。要件の発見からデータモデルの構築、そしてモデルの改良まで、プロジェクトの流れに沿って学べる構成になっている。
MySQLとMicrosoft Accessを題材にしているが、議論の中心はベンダー非依存な設計原則なので、PostgreSQLやOracleのユーザーでも問題なく読める。
各章末の演習問題が秀逸で、自分でシナリオを考えて設計する訓練ができる。ここが単なる読み物と一線を画すポイントだ。読むだけで終わらず手を動かすことで定着率が段違いになる。
こんな人に: 演習を通じて設計力を鍛えたい人、正規化とデザインパターンを体系的に整理したい人
③ SQLアンチパターン — Bill Karwin
Bill Karwinは元MySQL社のテクニカルサポートエンジニアで、Stack Overflowでも高い評価を受けるSQL専門家だ。
本書は「やってはいけない設計・クエリ・運用」をパターンとして25個列挙し、それぞれに対して問題の本質と解決策を示す。日本語訳が出ているため英語が苦手でもスムーズに読める。
自分が最も刺さったのは「ジェイウォーク」と「EAV」のパターンだ。カンマ区切りで複数値を1カラムに入れる設計や、汎用的すぎるメタデータテーブルの罠は、現場で本当によく見かける。問題が顕在化するのは本番データが増えてからなので、設計段階で潰せるかどうかが勝負になる。
正しい設計を学ぶ本と並行して読むと効果が倍増する。良い設計を知っているだけでは不十分で、悪い設計を見抜ける目が実務では不可欠だからだ。
こんな人に: 既にSQLを書けるが設計レビューで指摘できるレベルになりたい中級者、本番環境で性能問題を経験した人
④ Six-Step Relational Database Design — Fidel A. Captain
Fidel A. Captainはデータベース設計と開発の実務経験を基に教育活動を行っている著者だ。
本書のユニークさは、クライアントの要件定義から完成したDBまでを「6ステップ」に分解し、ケーススタディで追体験させる構成にある。設計理論、データモデリング、実装の三段階を一冊で通して学べる。
各ステップが明確に定義されているため、チーム内で設計プロセスを標準化するときの共通言語としても使える。「次はステップ3のエンティティ抽出をやろう」といった形で会話が成り立つのは地味に便利だ。
文章が平易で一読すれば理解できる反面、高度なインデックス戦略やパーティショニングの話題には踏み込まない。あくまで論理設計にフォーカスした本として割り切ると満足度が高い。
こんな人に: 設計プロセスを型として身につけたい人、要件定義から実装まで一気通貫で学びたい人
⑤ Pro SQL Server 2008 Relational Database Design and Implementation — Louis Davidson, Kevin Kline, Scott Klein, Kurt Windisch
Louis DavidsonはSQL Server MVPとして長年活動し、Kevin KlineはSentryOneのチーフテクノロジストとして知られるDB業界の重鎮だ。
本書はSQL Serverを題材にしているが、正規化、制約によるデータ整合性の保護、トリガー設計、セキュリティといったトピックはRDBMS全般に通じる。物理設計まで踏み込んでいるのが他書との大きな違いで、論理設計だけでは見えないパフォーマンスの勘所を掴める。
各章末のベストプラクティスまとめが実用的で、レビュー時のチェックリストとしてそのまま使えるレベルだ。読み物としても面白く、堅い技術書にありがちな「何度も読み返さないと頭に入らない」問題がほぼない。
SQL Server固有のDMVやストレージエンジンの話が混ざるため、MySQLやPostgreSQLユーザーは該当箇所を読み飛ばす判断が必要になる。それでも物理設計の考え方を学ぶ教材としては一級品だ。
こんな人に: 論理設計から物理設計・実装まで一冊で押さえたい人、SQL Serverを業務で使っている人
まとめ
| ステップ | 読む本 | 得られるもの |
|---|---|---|
| 全体像の把握 | Database Design for Mere Mortals | リレーショナル設計の基本概念と分析手法 |
| 設計プロセスの型化 | Six-Step Relational Database Design | 要件から完成DBまでの再現可能な手順 |
| パターン演習 | Beginning Database Design Solutions | 正規化・設計パターンの実践力 |
| アンチパターン回避 | SQLアンチパターン | 悪い設計を見抜く目 |
| 物理設計・実装 | Pro SQL Server 2008 ... | 制約・トリガー・パフォーマンスの実装力 |
今の課題別に1冊選ぶなら:
- DB設計そのものが初めて → Database Design for Mere Mortals
- 正規化を演習で鍛えたい → Beginning Database Design Solutions
- 既存DBの問題を言語化したい → SQLアンチパターン
- 設計プロセスをチームで統一したい → Six-Step Relational Database Design
- 物理設計とパフォーマンスまで踏み込みたい → Pro SQL Server 2008 Relational Database Design and Implementation