[Books] データベース関連書籍のご紹介 (ja)

今回はデータベース関連書籍をご紹介します。データベースについては個人的な思想背景により少々偏った選び方になっていますが、それほど悪い選択ではないと思います。なお、ここで言うデータベースとは、リレーショナル・データベースのことを指します。

1. SQL
「現場で使えるSQL」は私が新人の時に自らSQLの学習書として選んだ1冊、また「SQL書き方ドリル」はSQLを苦手としていた同僚のために選んだ1冊で、どちらも入門書としては使いやすいかと思います。
「現場で使えるSQL」はいわゆる逆引き的な使い方のできる書籍で、新人研修でSQLの基本的な組み立て方を学んでいた私にとっては最適な1冊でした。本書はOracle 10gとSQL Server 2005の両方に対応しています。
「SQL書き方ドリル」はSQLの組み立て方からドリル形式で学ぶことができる1冊で、SQLとは無縁の分野から突然SQLを読みこなさなければならなかった私の同僚にとっては、ちょうどニーズに合った入門書だったようです。
ゼロからしっかり学びたいのであれば「SQL書き方ドリル」が、基礎を学んだ後もリファレンスとして使うつもりなら「現場で使えるSQL」が、それぞれ適していると思いますが、どちらも甲乙つけがたい出来です。

初歩的なSQLはわかるけれども基礎固めをしたいというニーズには、「Oracle SQL クイズ」をお勧めします。SQLはOracle方言に限定されますが、Oracle方言のSQLは広く普及しており覚えておいても損はありません。また、ほとんどのSQLはその他のRDBMSのSQLとも共通しているので、使い方次第では本来の目的以上の役目を果たすことになるでしょう。
本書はタイトルから想像できる通り、SQLをクイズ形式で学んでいく体裁をとっています。事例引きとしては前述の「現場で使えるSQL」と似たような使い方ができますが、幾分本書の方が冗長な印象を受けます。
ここまでであればただのSQL入門書で、クイズ形式であること以外目立った特徴がないようにも思えますが、本書の末尾にはSQLインジェクションに関する記述があり、主にPHPアプリケーションのセキュリティホールとして知られるSQLインジェクションがどのようなからくりで発生するのかを学ぶことができます。その点では、他の入門書とは一線を画すと思います(Java等ではSQLインジェクションを回避する仕組みが整備されているのですが、PHPは言語仕様でデータベースアクセスを規定していることもあり、SQLインジェクションには脆いとされています)。

SQLはある程度分かった、でももっと深く知りたい、より効率の良いSQLを書きたいというのであれば、お勧め書籍が2冊あります。
「達人に学ぶSQL徹底指南書」は現役のデータベースエンジニアによる効率の良いSQLの書き方講座と言えます。単に良いSQLの書き方に留まらず、悪いSQLがなぜ悪いのか、そもそもリレーショナル・データベースはどのような背景で作られたものなのか、そういった理論的背景まで踏み込んで解説しているのが特徴的です。本書の話題は著者ミックさんのWebでもかつて触れられていた(ただし表現は当時より柔らかくしている)ことがある、業界に深く関わる人間としては必ずと言っていいほどぶち当たる問題も含まれ、ミックさんなりにうまく料理しています。
もう1冊は前述のミックさんも進めているSQLの大家セルコによる「SQLパズル」です(ちなみに本書の翻訳もミックさんが手がけておられます)。本書は最初目を通した時は正直意味がわからないか、SQLでここまでできるのかと驚かれるかのいずれかだと思います。入門書では得られない実践的なSQLの知識を実例に近い形で学ぶことができます。

SQL関連で最後にご紹介するのは「SQLハンドブック」です。本書の良さは持ち運びのしやすさと、Oracle、SQL Server、DB2、MySQLの4種類のRDBMSに同時対応している2点に集約されます。中身はそれほど充実しているわけではないのですが、複数のRDBMSを使い分けなければいけない時に、使い慣れたRDBMS(私の場合はOracle)とそれ以外のRDBMSとのSQL方言の違いを手早く判断するのには役立ちます。
その分、各RDBMS固有の記述に関しては手薄ですので(それでもOracleとDB2は充実している方です)、他のリファレンスとの併用で効果が挙げられる1冊だと思います。






2. データベース一般
データベース一般については、ミックさんの最新刊「達人に学ぶDB設計徹底指南書」が第1選択肢になるかと思います。内容はオーソドックスな「正規化は第三正規形まで」という指針ではありますが、類書より一歩深いところまで踏み込んだ解説と、良い設計・悪い設計の具体的な例がとても役に立ちます。特に悪い設計の例は想像だけでは挙げづらいもので、著者ミックさんの経験がまさに生きているセクションだと思っています。
「達人に学ぶDB設計徹底指南書」が具体的にRDBMSでデータベースを構築することを主題にしていましたが、リレーショナル理論そのものについては「C.J.デイトのデータベース実践講義」をお勧めします。
本書はリレーショナル理論そのものを題材としており、特定のRDBMSに依存しません。そのため正規化の方針は「第五正規形が原則、最悪でもボイス・コッド正規形」、「インデックスについてはRDBMS側の最適化に依存するので考慮すべきでない」など、ある程度データベース設計に携わってきた人間にとっては衝撃的な内容が続きます。SQLの理論的欠陥と、それを克服するための独自クエリー言語「Tutorial-D」についても触れており、1冊を読み終えるころにはデータベースに関する認識は大きく変わることでしょう。著者のC.J.デイトは、リレーショナル・データベースの父・E.コッド博士の片腕として共にIBMで働いていた人物で、コッド博士が論文以外目立った著作を残していないのに対して、コッド博士の分まで数多くの著作を手掛けているデータベース界の重鎮(そして徹底的なまでのNULL排斥主義者)です。

3. データベースシステム(Oracle)
Oracleの入門書は多数あります。私自身は主に日本オラクルの研修を受講することでOracleを学びましたが、独学の人たちには「これならわかるOracle超入門教室」などを薦めています。
本書は入門書であるため、あまり深いところまで解説しているわけではありませんが、巻末にデータディクショナリなどのリファレンスが付いていて、本書を卒業した後もこのリファレンスには長くお世話になることになるかもしれません(このリファレンスも卒業できれば、もうOracleのリファレンスマニュアルを直接参照できる力が身についています)。
またここでは紹介しませんが、ORACLE MASTER Bronze/Silverレベルの試験対策書でも、解説部分を使ってOracleの基本を学ぶことができます。ただし、試験対策書は解説が資格試験に出やすい範囲をもとにしているため、良く使われる機能なのに解説が手薄だったり、反対に後方互換で知らなくても支障がないことまで触れていたりと、メリハリの付きにくい構成になりがちであることは注意する必要があるでしょう。

Oracleの基本を学んだ後は、内部の仕組みを知る必要が出てきます。資格試験ではORACLE MASTER Goldレベルの水準ですが、参考書としては「絵で見てわかるOracleの仕組み」がお薦めです。複雑に見えるOracleの内部構造も、図解すると決して難しくなく、図解を通してOracleが実際にどう動いているのかを想像しやすくなります。
「絵で見てわかるOS/ストレージ/ネットワーク」は、Oracleの枠を超えてデータベースシステムとそれを取り巻くストレージやネットワークについて、こちらも図解を中心として話を進めています。データベースのパフォーマンスチューニングで必須となるストレージやネットワークに関する知識を無理なく習得することができるでしょう。
この2冊がカバーする範囲は、私が受講した日本オラクルのORACLE MASTER Gold対応研修(管理ワークショップII)でも相応の時間を割いている話題であり、押さえておきたいトピックであります。特に「絵で見て分かるOS/ストレージ/ネットワーク」で扱う技術は、データベース技術者として事実上必須と、著者の小田圭二さんがさんが判断された上で執筆された1冊です。単にテーブル設計に留まらず、より広い支店でデータベースシステムを見つめるべきという小田さんの考え方が表れていると思います。

Oracleでやや上級のトピックとなると、いざ現場で問題が発生した時どのように対処すべきかということになります。これについても良い本がありまして、「門外不出のOracle現場ワザ」とその続編「続・門外不出のOracle現場ワザ」になります。いずれもOracle 9i当時のトラブルを元に執筆されていますが、基本的な考え方については10g/11gでも十分通用するものになっています。
本書は日本オラクルのコンサルタントの共同執筆であり、前出の小田圭二さんも参加されています。
最初に読んだ時はあまりピンとこないのが実情だと思います。しかし、Oracle関連のトラブルシューティングを重ねていくうちに、本書の内容が基礎理論として役に立つ日がやってきます。それまでの間は少々の辛抱です。
なお、レベルは当然のことながら続編の方が高度です。それだけはご留意を。

Oracle関連書籍のまとめとして、Oracle公式ガイドブックをまとめておきましょう。
(1) 導入・移行
















(2) 運用関係
















(3) その他の話題














4. データベースシステム(SQL Server)
SQL Serverの1冊目の入門書としては、「ひと目でわかるMicrosoft SQL Server 2008」をお薦めします。本書はSQL Serverのバージョンアップに合わせて改訂する種類の書籍であるため、ご利用になる最新版に合わせた版をご利用下さい。
本書は基本的にはインストールからのステップバイステップの解説のため、あまり深い内容にまで言及されていないように思えます。ところが実際に目を通すと分かるのですが、所々に今後の学習のヒントが散りばめられており、実運用ではそれほど多く利用されることのない「データベースのミラーリング」についても基本的な概念について掲載されています。このような本書の体裁を考えると、単なるガイドブックの範疇を超えた、本格的な入門書~中級書への橋渡し役と言えるのではないでしょうか。
なお、私がSQL Server 2005の案件を担当しており、データベースミラーリングについて言及のある入門書を探したところ、本書と後述の「SQL Serverでいってみよう」の2種類だけで愕然とした記憶があります。

そしてご紹介するのが「SQL Server 2005でいってみよう」です。SQL Server 2008/2012対応版が出版されていないのが気になりますが、SQL Serverは2005「Yukon」から基本アーキテクチャに大きな変化がないため、多少古い情報でも役に立つと思います。
本書は上掲の「ひと目でわかるMicrosoft SQL Server 2008」同様、データベースのミラーリングに言及している稀少な入門書です。実際の設定は上巻に当たる「運用管理編」でほぼカバーされていて、下巻「開発編」はTransact-SQLによるストアドプロシージャー開発に付いて言及しています。
実は最初、本書を購入してリーダーに査読をお願いしようとしたところ、軟派(と言ったら失礼か?)な体裁から難色を示されたことがありました。しかし、その内容を読んで頂くことで、当該プロジェクトで必要とされるSQL Serverの技術の大半を会得することができ、書籍の選定に関して評価を頂いたことがあります。
「開発編」の出番は、特にJava EEでJPAを使用する場合にはほとんどないでしょうが「運用管理編」はたぶんお役に立つと思います。
SQL Server自体、徐々に改善されているとは言え、Oracleほどの信頼性や評価を受けているわけではありまんし、詳細な制御ができるわけでもありません。そのことを考慮すると、当面は本書をバイブルとしてSQL Serverを運用することに支障はないかと思われます。