ちょっと硬派なコンピュータフリークのBlogです。

カスタム検索

2015-02-02

書籍出版のお知らせ:理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL

来る2月27日、データベースの新書籍を発売させて頂くことになった。タイトルは「理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL」となっている。単に「データベース」と書いてあるが、RDBがメインのテーマの書籍である。

多くの人が未だにRDBを使いこなせていないのではないか。RDBの使い方をマスターするには何が必要なのか。それがここ数年私が追ってきたテーマであり、この書籍を出すことになった動機である。

あまりにも酷いDB設計、あまりにもスパゲティなクエリ、あまりにも希薄なデータモデルへの理解。そういった問題はどこから生み出されるのか。そのひとつの結論としてたどり着いたのが、「そもそもRDBの使い方があまり理解されていないのではないか」ということだった。名著、SQLアンチパターンでは「やってはいけないケース」について学ぶことができるが、その反対のテーマ、つまり本来どのようにRDBを使うべきかが、きっちりと理解されていないのではないかと思う。それは、個々の製品の機能の違いといった瑣末なものではなく、RDBではどのようにデータを設計して、どのようにクエリを書いて、どのように更新するべきかという根本的なものである。単に正しい文法のSQLを書けるかというような話ではない。使うだけならSQLの文法がわかれば使えるのだが、それではRDBを使いこなしているとは言い難い。SQLを上手に使いこなすには、その背後にある理論や考え方などを正しく理解する必要があるのだ。お察しの通り、これが実に難しい。

データベースの世界のテーマはとても広い。データベースは様々な技術が組み合わされた製品であるために、使いこなすには幅広い知識が必要となる。しかもデータベースで用いられている理論はそれぞれが独立しており、ユーザーがそれらを正しく理解した上で、適切に組み合わせて使わなければならない。個々の理論、例えばリレーショナルモデルやトランザクションについての理解はあっても、理論同士の間には、どうしても単独の理論では解決できないミッシングリンクが存在する。その結果、理論の断絶によってRDBの使い方が歪なものになってしまうのではないかというのが、私の仮説である。そのような歪な使い方を防ぐには、様々な理論や技術を全て同時に実践しなければならないだろう。

当然ながら、そのように広範な理論や技術を同時に実践するのは難しい。個々の理論や技術についての知識だけでも壮大なテーマであるが、さらにそれらの組み合わせ方、つまりミッシングリンクのつなぎ方もとなると尚更である。それをせずにはRDBを使いこなすことはできないならば、何とハードルが高いことだろうか。しかしハードルが高いと嘆いてばかりではいけない。目の前の困難を打開しなければ、状況は好転しないからだ。

このハードルを、できるだけ多くの人に、あまり難しくない方法で超えて貰う方法はないだろうか。知識を共有するならやはり文章だ。文章で伝えるにはどうすれば良いか。分かりやすく、それでいてコンパクトにまとめるにはどうすれば良いか。そのようなことを検討した結果、WEB+DB PRESSでの連載、そして本書の出版に至ったのである。

本書の目次は以下のようになった。

第1章 SQLとリレーショナルモデル
第2章 述語論理とリレーショナルモデル
第3章 正規化理論(その1)ー関数従属性ー
第4章 正規化理論(その2)ー結合従属性ー
第5章 リレーションの直交性
第6章 ドメインの設計戦略
第7章 NULLとの戦い
第8章 SELECTを攻略する
第9章 履歴データとうまく付き合う
第10章 グラフに立ち向かう
第11章 インデックスの設計戦略
第12章 Webアプリケーションのためのデータ構造
第13章 リファクタリングの最適解
第14章 トランザクションの本質

元々この書籍は1〜8章までが前半、9章〜14章が後半という構成で出すことを考えていたがフォーマットの都合上、そうはならなかった。書籍を読む際には前半と後半の区切りを意識して読んだほうが、スムーズに読むことができるだろう。

本書は、元々WEB+DB PRESSで行なっていた連載がベースになっているが、いくつかの章は雑誌では触れなかった内容を書きたしたものである。また、諸々の内容についても見直しを行い、大きく加筆修正を行った。内容がブラッシュアップされているので、雑誌記事を読んだことのある方も、ぜひ復習のために読んでいただきたいと思う。なお、雑誌記事ではバキシリーズの登場人物を使ったサンプルを用いたりしていたが、書籍ではそのようなおふざけは止めておいた。

この書籍は残念ながら、初心者向けではない。SQLの基礎やRDBの基本的な使い方といったものは解説していないからである。ある程度開発経験があり、SQLを習熟した人に、さらにしっかりとした知識を固める目的で手にとって貰いたいと思う。そういった意味では、初心者から中級者になりたい人、あるいは今現在中級者な人、たまには復習をしたい上級者が主なターゲットになるだろう。

〜〜〜

本書の前半はリレーショナルモデルについて、如何にそれを実践するかということにフォーカスを当てている。後半はリレーショナルモデル以外の理論やテクニックについての解説である。何故リレーショナルモデル以外のテーマについての解説が必要なのかというと、リレーショナルモデルには限界があるからである。この世に万能な道具はない。リレーショナルモデルもまた然りである。従って、どういった道具を組み合わせることで、最終的にアプリケーションを完成させるかということが重要になる。後半はそのようなリレーショナルモデルの外側の世界がテーマである。

リレーショナルモデルは極めて有能なデータモデルであるが、それだけで世界の全ての問題を解決出来るほど万能ではない。道具は正しく使わなければ、その真価を発揮することはできない。また、道具は時に正しく組み合わせて使う必要がある。フォークで魚をさばこうとするのは馬鹿げているし、魚をさばくなら包丁だけでなくまな板も必要だろう。まな板もなく、フォークだけで魚をさばくことは、もしかすると不可能ではないかも知れない。しかし、それはとても効率が悪い作業であるのは想像に固くない。

データベースも道具である。アプリケーションの目的を達成するための道具のひとつである。RDBはナイフのように様々な応用ができる道具ではあるが、万能ではない。使い方を誤っていては、せっかくの道具も役に立たないのだ!!

RDBを使いこなすにはどうすれば良いか。それにはまず、その道具がどういうものであるかを理解することだ。RDBではまず、何を置いてもリレーショナルモデルへの理解が必須である。RDBをどう使うかを理解するには、データモデル(どのようにデータを表現するか)への理解は避けて通れない。にも関わらず、世間ではリレーショナルモデルが冷遇されており、それが多くの人がRDBを使いこなせない大きな要因になっているように思う。

従って、まずこの書籍では、リレーショナルモデルについてかなりのページを割いた。そして、リレーショナルモデルのベースとなっている述語論理についても解説を行なっている。述語論理は大学等で習うのだが、リレーショナルモデルの理解に必須であるため、あえて書籍で取り上げている。世の中には、あえてこのような理論的な話には触れず、「簡単に理解できますよ」というような風体を装った書籍もあるのだが、そのような適当な解説は返って混乱を招くだけであり、結果的に遠回りである。急がば回れ。安易な近道は後から負債となる。きっちりと述語論理を理解したほうが、後々リレーショナルモデルへの理解がスムーズに行えるだろう。とは言え、リレーショナルモデルにとって必要な一階述語論理だけに的を絞っているので、それほどページは多くなく、述語論理を理解するためのエッセンスを凝縮したような内容になっている。少し小難しい話だし、述語論理であれば他の書籍でも数多く解説されているのだが、ぜひ自信のない人は我慢して読んで欲しい。ただ、述語論理とリレーショナルモデルとの対比というのは、割と目新しい内容になっているのではないかと思う。

第3章〜第6章はDB設計の話である。RDBを使いこなすには、DB設計が極めて重要である。この至極真っ当な事実がなんと軽視されていることか!!本書では、4章に渡り、リレーショナルモデルに基づいて、どのようにDB設計をすべきかということを解説している。理論的なバックグラウンドをしっかり叩き込んで、実践で活かして欲しいと思う。

万物に限界があるように、リレーショナルモデルにも限界がある。従って、残念なことに、リレーショナルモデルだけでアプリケーションを実装できるわけではないという事実が目の前に立ちはばかる。必然的に、リレーショナルモデル以外の理論やテクニックを使用して、アプリケーションの開発に必要な、あらゆる課題を解決することになる。後半(第9章〜)は、全てリレーショナルモデル以外の話題であるが、多くの章では、どのようにリレーショナルモデルと組み合わせるべきかということについても解説を試みた。ミッシングリンクのつなぎ方は一つではない。本書で解説したもの以外にも、様々な戦略や哲学が存在することだろう。本書で解説したものが、有益な選択肢の一つ、あるいはより良い戦略を考えるための礎として、活用して頂ければ幸いである。

〜〜〜

RDBを使う上での課題は、全てが理論によって解決できるわけではない。例えば「あるテーブルにはどのようなインデックスが必要なのか」とか「ドメイン設計はどうするべきか」という課題には、理論的なバックグラウンドが必要なのは当然ながら、最終的には経験と勘で決めなければならない分野である。とはいえ、ただ闇雲に経験と勘で動くのと、「ここだけはどうしようもないのだ」ときっちり理解した上でそうするのには、決定的な違いがある。後者の場合には自信を持って経験と勘を振るうことができるからだ。自信があれば決断も早いし、泥沼を避けて通ることもできるだろう。(そうすれば残業を回避できるかも知れない!!)本書の内容をきっちりとマスターすれば、RDB上の様々なオブジェクトの設計において、「何故そうするべきか」ということを理論的に、自信を持って説明できるようになるはずだ。そのような理論を補強するための土台として、本書を活用して頂ければ幸いである。

理論だけでは解決できない問題は、戦略や哲学という領域へ踏み込まなければならない。過去に著名な(分厚い)技術書が、その領域へ踏み込まなかったのは、理論として確立されていないことに対する躊躇があったからではないかと思う。理論は論理的に正しければ反論はできないが、戦略や哲学は無数に選択肢があり、どれを選択するかは考え方次第であるため、如何様にも反論の仕様がある。反論によって建設的な議論へと発展することは望ましいが、不毛な水掛け論で終始してしまうことも珍しくはない。反論の余地があるテーマを書籍化することは、そのようなリスクを含んでいる。だが、私はここであえて危険を犯し、戦略や哲学についての解説を試みることにした。何故ならば、そういったものがRDBを使う上で避けては通れないからだ。単にデータの入れ物として使うのではなく、きちんと使いこなすためには、場当たり的なハウツーではなく、背後にある戦略や哲学について理解しておくべきなのである。

理論はブレることはないが、戦略や哲学には選択肢がある。きっと、本書の内容とは異なる嗜好を持った方もたくさんいらっしゃるだろう。より良い戦略や哲学を持っている人は、是非ブログ等で論じて欲しいと思う。そしてTwitter等でその記事について教えて欲しい。是非建設的な意見を交換したいと思う。

最後に、書籍を出版する機会を与えて頂いた技術評論社、快くレビューを引き受けてくれた@yoku0825氏、@t_wada氏、@matsunobu氏、@yoheia氏に感謝を申し上げたい。

0 コメント:

コメントを投稿