読者です 読者をやめる 読者になる 読者になる

It's okay to be weird

レールの無い道を行くプログラマーのブログ

『達人に学ぶDB設計 徹底指南書』を読んだ

技術書 データベース

これから自分の関わる業務がどういうものになるか見通せない状態にあることもあり、特化した技術や流行りを追いかけるよりは、5年10年通用してくれそうな基礎的な技術を学ぼうと思い、データベースの勉強を進めることにしました。

そこで選んだのが、訳書を含めてデータベースについて多くの著書を執筆されているミックさんの本です。

まずは復習がてら『SQL 第2版 ゼロからはじめるデータベース操作』から始めて、『達人に学ぶ SQL徹底指南書』に進みました。そして、この記事で言及する『達人に学ぶ DB設計徹底指南書』を読み終えました。

どれも大変興味深く、理論と実践のバランスの取れた素晴らしい本でしたが、その中でも本書は特に面白かったのでブログ記事にしました。

本書のテーマ

「はじめに」に書かれていますが、リレーショナルデータベースにおける設計を、(1) 正規化やER図を使ったモデル設計である「論理設計」、(2) サーバーやストレージと行った物理的なハードウェアレベルの設計である「物理設計」、(3) 特定のデータベース製品に対する設計である「実装設計」の3つに分類した場合、本書は実装設計を除いた、論理設計と物理設計の2つについてカバーしています。

論理設計と物理設計は「あちらを立てればこちらが立たず」のトレードオフの関係にあるため、それぞれについての望ましい設計というものを学んだうえで、そのトレードオフを学ぶのが本書の目的と著者は言っています。トレードオフという言葉は本書の中で頻繁に登場する重要ワードになっています。

章の構成

章ごとの概要をまとめると、第1章はシステムとデータベースについて、第2章は論理設計と物理設計、第3章は正規化、第4章はER図、第5章は論理設計とパフォーマンス、第6章はインデックス・統計情報とパフォーマンス、第7章は論理設計のバッドノウハウ、第8章は論理設計のグレーノウハウ、第9章はSQL木構造を扱う方法が書かれています。

部に分けるならば、1、2章が概要編、3〜5章が論理設計編、6章が物理設計編、7〜9章が応用編といったところでしょうか。

論理設計と物理設計、どちらを優先するか?

本書のテーマである論理設計と物理設計のトレードオフですが、ではどちらを優先すべきかという点において、「おわりに」の中で著者は「特別な事情のない限り、論理設計は物理設計に優先するべき」と述べています。 第5章の中でも、非正規化によりパフォーマンスの向上が見込めるケースはあるものの、クリス・デイトの「非正規化はあくまでも最後の手段である」という言葉を引用し、基本的には整合性を優先するべきだと示しています。
その理由の1つに「パフォーマンスをはじめとする物理層に起因する問題は、いずれハードウェアによる解決が可能になっていくことが予想される」ことを挙げています。論理設計の改修には大きなコストがかかるのに対し、物理設計は物量による対応が可能なのです。

ただし、物理設計について無知であっていいかというとそうではないので、論理設計を優先することでどういう影響があるのか知った上で設計できるようになることが重要だと強調しています。著者があえて「おわりに」の中で結論を述べているのは、物理設計を疎かにして欲しくないという気持ちの表れでしょう。

感想

銀の弾丸などない」という言葉があるように、「これを選んでおけば何も考えなくていい」といった簡単で最善な解決策がない場面がソフトウェア開発においてはほとんどで、常に難しい選択の連続です。本書はデータベースの世界においてどういった選択をすればいいかという指標を示してくれます。リレーショナルデータベースに関わる開発者 (なんてほとんどいない?) なら読んでおいて損のない1冊だと思います。

ちなみに出版社の紹介文として「『達人に学ぶ SQL徹底指南書』の続編」と書いてありますが、『達人に学ぶ SQL徹底指南書』を読んでいなければ理解できないような箇所は少ないですし、内容的に得るものがより多いうえ、理解もしやすいため、こちらの方を優先して読んだほうが有益なのではないかと僕は感じました。

達人に学ぶDB設計 徹底指南書

達人に学ぶDB設計 徹底指南書