※当ブログではアフィリエイト広告を利用しています。
最近Kindle for PCとKindle for iPhoneで本を読むのがマイブームで、直近では2日ほどかけて「達人に学ぶDB設計 徹底指南書」を読みました。
正統派な手法だけでなくバッドノウハウやグレーノウハウが理由付きで載っており勉強になりました。読んで良かったと思った点をまとめます。
「達人に学ぶDB設計 徹底指南書」について
本書はSIerで勤務するDBエンジニアの「ミック」氏が著者の、DB設計の入門書です。システムとデータベースの関わりにはじまり、論理設計・物理設計の方法、パフォーマンスやバッドノウハウの紹介などDB設計に関わることを一通り学ぶことができる構成になっています。
特定のDBMSに限った記載ではないため、普段良く使うDBMSがOracle、SQL Server、PostgreSQL、MySQL、DB2等いずれであってもかまいません。
著者のミック氏について
ミック氏はDB関係の本を多く書かれている方で、本書の他にも「おうちで学べるデータベースのきほん」や「達人に学ぶ SQL徹底指南書」など多くの著書を書かれています。
また同氏のウェブサイト「ミックのページ」のコンテンツである「リレーショナル・データベースの世界」ではSQLのパフォーマンスチューニングや各種テクニックなど、書籍と同等かそれ以上の内容の有益な情報が公開されています。
関連リンク:リレーショナル・データベースの世界 – ミックのページ
上記サイトはCASE式やHAVING句の使い方で検索すると検索結果の上位に出てくるページなので、目にされたことがある方も多いと思います。
「達人に学ぶDB設計 徹底指南書」を買った理由
私は仕事でDBを触る機会は多く、小規模なものであればDB設計をしたことはありますが、あまり大規模なシステムDB設計に携わった経験はありませんでした。こちらのエントリにも書いていますが、2013年にデータベーススペシャリスト試験の勉強をする前までは正規化もなんとなく理解していた程度だったほどです。
さすがに今では正規化をする理由やDB設計についてそれなりにわかっているつもりですが、もう一度基礎から学習し直すことでDB設計についての理解を深めようと思ったのが本書を購入した理由です。
またバッドノウハウ(アンチパターン)やグレーノウハウにどのようなものがあるか気になり、自分のDB設計や関わっているシステムのDB設計にそのような手法をとっているものが無いかが気になったということもあります。
ちなみにグレーノウハウは作者の造語で、以下のような意味を持ちます。
バッドノウハウとはっきり断定することこそできないものの、無神経に使うと開発や運用に支障をきたすような、そんな毒を含んだ設計のことです。
引用元:達人に学ぶDB設計 徹底指南書(Kindle番) 位置No.4477
「達人に学ぶDB設計 徹底指南書」の良かった点
1. 表現がとにかく平易で分かりやすい
本書は難しい表現が出てくることがほとんどなく図解も豊富で、初級者でも意味が理解できるよう配慮されています。ただし9章の「SQLで木構造を扱う」だけは実務との関連があまりイメージできず、正直なところあまりよく分かりませんでした。
1~数ページの内容がポイントとして「勘どころ」として一言にまとめられている点も後で読み返すときに手助けになりそうだと感じました。
また章末には簡単な演習問題も用意されています。この演習問題は自分で考えたり調べないと解けない内容ばかりで、読むだけでなく実践することも重要だという筆者の意図も伺えます。
2. 正規化・インデックスの説明がわかりやすくメリット・デメリットまで記載されている
本書では正規化やインデックスの種類についてもわかりやすく解説されています。正規化は基本の第1~第3正規形、ボイス-コッド正規系、第4正規形、第5正規形について、インデックスは基本のB-treeとビットマップインデックス、ハッシュインデックスについて記載があります。
前述の通りデータベーススペシャリスト試験の勉強で正規化はほぼ理解したつもりで「正規化はして当然」と思っていましたが、本書ではさらにそのデメリットにまで触れられています。考えてみると「確かに」と思うようなことだったりするのですが、メリットやデメリットを知った上でDB設計を行うことの大事さを再認識させられました。
また普段よく検索条件に指定される列に当然のように張っているインデックスについてもどういう仕組みなのか、どういう列に設定するとパフォーマンスを引き出せるのかまで掲載されています。インデックスの使用にあたってSQLを書くときに気をつける必要がある例も記載されています。
ちなみに以下はそのような例のうちの一つで、col_1にインデックスが張られていても利用できない悪い例です。
SELECT * FROM SomeTable WHERE col_1 * 1.1 > 100;
引用元:達人に学ぶDB設計 徹底指南書(Kindle番) 位置No.3598
DB設計だけでなく、SQLを書くときにも少し気をつけるだけでパフォーマンス向上できることがわかったのは大きいと思いました。
3. バッドノウハウ・グレーノウハウがわかる
DB設計においては「これ、本当に良い方法なのかな」と思いつつ、他のシステムで採用していて大きな問題になったことが無いという理由で取り入れる手法があったりします。
私の身近なところでも、本書におけるグレーノウハウとして掲載されていた以下の様な手法が使われているシステムが少なくありません。
- 採番テーブル
- サロゲートキー
なぜグレーノウハウなのかだけに留まらずその解決法まで紹介されているため、次に設計するときはより良い方法を取ろうと思わせる内容でした。
おわりに
データベーススペシャリストの勉強の際は試験のための勉強になってしまっていた感がありましたが、本書では各項目の解説に始まりメリット・デメリットまで記載されており、早速明日から実務で使用してみようと思えることが満載です。
業務でDB設計をする人はもちろん、SQLなどでDBを操作する側の人にも自信をもってオススメできる本です。