kagamihogeの日記

kagamihogeの日記です。

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

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

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

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

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

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

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

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

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

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

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

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

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

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック

読みやすいコードとはどういうものか、について書かれた薄めの本。非常に興味深い事に、コードの読みやすさについてに書かれていてなおかつ、日本語で読みやすい本となっている。類書で俺個人の好みで言えばClean Code アジャイルソフトウェア達人の技 - kagamihogeのblogの方を推薦するのだが、いかんせんソレナリに分厚い上に長ったらしい。率直に言って、初心者にオススメできるものではない。

しかしながら、本書は内容を絞りに絞り、そして、文体を口語のやわらかい口当たりにすることで、とても親しみやすい仕上がりになっている。200ページちょいなので昨今のラノベ一冊ぐらいの分量な気がする。テクニック的なことはさておき、読みやすいコードとはどういうもので、それがどのような価値を持つかをさっくりと学ぶには定番の一冊でしょう。といっても、webの反応見る限り既にそうなってるようだけど。

うすいから実用性が低いかというとそうでもなく。本書の目的は、読者に読みやすいコードについて最低限必要な情報を素早く提供することにある。今日に先ずこの本読んで明日の改善にさっそく活かすもよし、Clean Codeへと読み進んでみるもよし。

ただ、これはチョー個人的感想だけど、メリケンかぶれ(なんと失礼な表現だ…)のジョークは失笑不可避である。筆者も承知の上でやってるんだろうけど、なんかまぁ向こうの文化固有のイラスト+ジョークは、セリフんとこだけ日本語にしてもアンマ伝わりにくい気がするんだけど。どーなんでしょうね。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

歴史の愉しみ方 - 忍者・合戦・幕末史に学ぶ (中公新書)

歴史を専門に扱っている学者なり研究者なりが、成人向けに新書サイズでお手軽に歴史をたのしめるための本を出していることは良くある。ただ、事実に忠実になろうとする余りか堅っ苦しい文体に終始して息が詰まりそうなのとか、無知蒙昧な貴様らに歴史の重みを知らしめてくれるわとでも言いたげな難解極まりないものも多い。それはそれで俺のようなパンピー層向けでなく学術的意味はあるのだろうけど。本書は、著者の優れた古文書作成スキルからの引用と、適度に気の抜けたどこか愛嬌を伺わせるがしかし日本史に対する深い愛による文章によって、歴史の愉しみ方をゆるふわに知ることが出来る。

この本では、日本の歴史の中で先人たちが残してきた文書を兎に角大量に紹介する。ただ、いたずらに今となっては読みにくい古い日本語をそのまま載せるのではなく、意訳したものに留めている。この本もその他の歴史本のレイに限らず、最近の若者は本物の歴史を読まなくなった、歴史考証のおかしいドラマが増えた、という嘆き節から始まる。が、嘆いていてもしょーもないので、多少の正確性は無視してまずはオモシロ案件を紹介することで、歴史を自分の力で知っていくことの楽しさを説いているように見える。本書の中で、著者は古い文書を捜し求めるのに時に大変な労力を注いでいる描写がしばしば見られ、傍目狂気とも思える行動を楽しげに描いてしまっている。中々エンターテイメント性の高い学者さんである。

ただ、第4章「震災の歴史に学ぶ」だけはニュアンスが異なり、やや悲観的な文章が目立つ。筆者は東日本大震災をきっかけとして、歴史学者として震災に何が出来るのか、と自問するようになったという。その結果、日本で過去に起きた大震災を研究し、未来に生かす方策は何かを考えるようになった。本書によれば、日本に大地震がおおよそ100年〜150年に一度、500年に一度超大規模の地震が来るのは、地質調査や江戸以降の文献から分かってきてはいるらしい。細かいことは本書に譲るが、人間の伝統というものは我々が考えているほどには永続的ではないが、自然というのはもっと伝統的というか周期的なものだ、という警句は深いものがある。

そして最後はまたうってかわって戦国時代あたりのお話になるのだが、最後の章の関が原見物作法がブッ飛んでいるのでこれを是非紹介しておきたい。これによると、日本史マニア的には新幹線は歴史の流れを感じるための絶好の機会なのだという。東京を経って新大阪、逆に新大阪から東京へ向うときの心構えが説かれている。

山崎合戦の跡をみる心づもりをする。本能寺の変後、秀吉が明智光秀を破った古戦場。サントリーの山崎蒸留所がみえてきたらその裏山が天王山。光成の主君、秀吉公の宝寺城があったところだ。秀吉公に可愛がってもらった懐かしさを思い出す。「山崎は水がいい。秀吉様はここの茶室待庵で茶を楽しまれた。いまはウィスキーの工場」などと考える。

歴史の愉しみ方 - 忍者・合戦・幕末史に学ぶ (中公新書) p.197 第5章 戦国の声を聞く 関ヶ原見物作法 2 光成篇

最後のカッコ付きの文句は、過去の歴史に身を委ねるようなロマンティストと現代の建造物も忘れることはしないリアリストが同居する素晴らしい一文でありましょう。

歴史の愉しみ方 - 忍者・合戦・幕末史に学ぶ (中公新書)

歴史の愉しみ方 - 忍者・合戦・幕末史に学ぶ (中公新書)