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

kagamihogeの日記

kagamihogeの日記です。

リレーショナルデータベース入門―データモデル・SQL・管理システム

RDBMSの知識不足を感じて以来、ここのところその勉強に力を入れている。学習方針は、 達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ - kagamihogeのblog等の著書のミック氏が推奨している方法で、理論と実装の両面から進めている。俺の場合、後者は、Oracleで主にパフォーマンスの観点から基本的原則を確認することをやり、前者は、本書のような書籍を通して行っている。

本書は、コンピュータサイエンス初年度の講義の教科書を想定して作られている。そのため、コンパクトながらもトピックの網羅性、それになにより各章が独立していながらも本一冊を通してみると一貫性が保たれているのが素晴らしい。また、章から章への論理展開が極めて明快なので読みやすい。もっとも、これは俺がある程度の実務経験という下地と、まがりなりにもコンピュータサイエンスの学部経験があるからこそ、の部分もあるだろうけど。

この本はまず、データベースとは何か、という議論から始まる。ざっくりいえば、現実世界を何らかの形でまとめたものがそうである。情報はデータに意味を付与したものだが、データはもっと素なものである。ここで、データベースというデータを格納するものと、そこから取り出すための機構であるデータベース管理システムとは、別の概念で構成される。

そんなわけでデータベースは兎に角にもデータを格納しなければならない。リレーショナルデータベースが優れているのは、それがどう実装されるのかとはマッタク無関係なアプローチを取った点にある。たとえば、ネットワークデータベースはポインタという実装が下敷きにある。

リレーショナルデータベースは、数学の集合論に基礎を置くことにした。数学は、元来現実世界をモデル化することに長けている。集合論もモチロンである。リレーショナルデータベースの強みは、集合論に基礎を置くことで数学の強さをそのまんま受け継ぐ点にある。ポインタ等実装由来の概念は100年あるか無いかだが、数学はそれとは比べ物にならないほど歴史の中で洗練されている。ただ、そのことが初心者にはとっつき辛さを生じている感は否めない。

集合論であらわすと決まれば、あとはそのモデルがどの程度正しいかを証明する作業になる。当然、本書の各所で定義や証明を数学的に記述していくことになる。正直、俺はその全ては理解できなかった。トランザクションの同時実行制御のあたりとかはかなり理解が怪しい。しかし、前半部はそこまで難解なものは無く、わずかな数式でリレーショナルデータベースの理論が説明できることには結構な感動を覚える。

集合が集合を生む性質を上手く利用するビュー、更新時異常を排除するための正規化、などごく自然にRDBMSを運用すると使用する技術にもキチンとした理論が存在することも感銘を受けた。リレーショナルデータベースの世界では、このような問題または要求があり、それを解決するためにこのような理論があり、それに従って実装、という流れで発展してきている。これは、動けば良い的な感が強い手続き型の世界とは異質である。しかし、一度理論から実装までの流れがアタマに入ってしまえば違和感は大してなくなる。具体的な実装から入るのは分かりやすく手軽だが汎用性に欠けることが多い。リレーショナルデータベースはまず理論ありきなため汎用性に長けることになったが、分かりやすさで劣るのは仕方の無いことなのだろう。

本書の前半ではリレーショナルデータベースの理論寄りの内容で、後半からはRDBMSの話でやや具体性が強くなる。この点から、リレーショナルデータベース―入門時点では特に―は理論と実装をバランス良く学ぶことが重要なのだと感じる。

RDBMSが何故三層構造を取るかといえば、抽象度の異なるものは別々に扱いつつ、一つの統合したデータモデルとして扱うためである。実世界を写像として切り取った概念スキーマ、ユーザにとって都合の良い見方を提供する外部スキーマ、実装であるところの内部スキーマ

これに続いて、データをどのようにファイルに格納すべきかの話、クエリのオプティマイザの基本的な考え方、が続く。トランザクションはアプリケーションからみたときは更新の一単位となるが、障害回復の一単位という視点も重要となる。それと同時に、データベースは多数のユーザから同時に使用されるのが当然であり、そこで同時実行制御が重要で、その単位はトランザクションとなる。いわゆるisolation levelについても、背景にはちゃんと理論が存在している。ただ、ここはさすがにちょっと俺のレベルでは完全な理解が出来なかったが……実装と理論が乖離していたとして、どのような違いがあるかを知っておくだけでも違うと思われる。

以上、かなりまとまりのない書籍感想になってしまったけれども。本書がなにより面白かったのは、リレーショナルデータベースの世界は、理論から実装まで一つの線で繋がっている、ということ。俺の感想文はぐちゃぐちゃだけど、本書の一貫性はホントに素晴らしい。もちろん、現実世界では、実装が追いついてないだとか、ベンダー固有まみれで互換性が無いだとか、色々ある。でも、リレーショナルデータベースは基本的には一本の線で繋がっている。そのことに、ある種の美しさを感じたのは確かである。

正直、リレーショナルデータベースに取り付かれた人とかは特有の近寄りがたさがあった。でも、今ならそれが理解できる。この奇妙な美しさは、確かに人を虜にさせてもおかしくはない。本書のアチコチでは理解不足のまま終わった点は以降の課題として俺の中で残ったものの、リレーショナルデータベースの魅力を十二分に味わえただけでも読む価値はありました。