<< レコメンド機能を実装する 〜Vogoo! PHP Lib〜 | main | 小規模企業共済 de 節税 〜個人事業主の強い味方〜 >>

RDB(関係データベース)の本質を知る 〜達人に学ぶ SQL徹底指南書〜

以前の『O/Rマッピングの是非』というエントリにて,

まずはデータベースについてきちんと勉強しましょうよ。

と偉そうなことを書いてしまいましたが, データベースについて勉強が足りていないのは, 何を隠そう“私自身”でした(;´∀`)
今まで勉強してきたことは PostgreSQL や MySQL 等の関係データベースシステム(RDBMS) についてであって, 関係データベース(RDB)とは何かという本質的なことを全く理解していなかったということがよく分かりました...



この書籍が出版されることをたまたま知って Amazon で予約購入したのですが, 予想以上の良書。

タイトルだけ見て「SQL の表面上のテクニック解説書か...」と思ってしまいましたが, 全然そんなことはありません。
ベースとなる理論を含めてしっかりと解説しているので, SQL の本質を理解できます。

そもそも SQL って使ってて違和感ありませんか?

SQL を学んだ当初から PHP や Perl と言った言語と比べて何か使いにくいなぁ, とず〜っと思っていました。
が, その理由も分からないまま, データベースのテーブルのデータを取得する手段として型にはまった方法で今まで SQL を使い続けて来ました。

でも, この本を読んで何でそんな違和感を感じていたのか, という疑問が氷解しました。
それは, SQL は集合論(と述語論理)を基にしている, 集合的発想に基く言語だから。

RDB で扱うテーブルは(命題の)集合そのもので, テーブル自体に順序なんて定義されてない。
集合全体を操作対象とするため, SQL にはループは存在しない。

関係モデルはデータの管理方法を従来のアドレス(位置)から内容へと変え, 抽象化した。
だから SQL には変数(アドレスの化身)という概念が存在しない。


ベースとなる理論を知れば, 感じていた違和感の正体もハッキリしました。
SQL を書くときに, 無意識に PHP や Perl 等の手続き型言語の考え方を適用していたのが原因です。
そもそも SQL のベースとなる集合的な考え方をしていなかったんです。

自己結合, HAVING句, 相関サブクエリ, EXIST句...ややこしくて理解に苦しんでいた SQL ですが, 集合指向という SQL の本質を理解すると霧が晴れたようにスッキリと理解できました。


自己結合って同じ集合を 2個作って, その集合に対して演算すればいいのね。
HAVING句ってテーブルの部分集合を作って(GROUP BY), その部分集合に対しての条件を記述するから, GROUP BY で指定してないテーブルの属性を書くとエラーになるのね。
相関サブクエリも自己結合と同じように集合をもう一つ作って考えればよし。
EXIST句って集合を引数にとるから, SELECT * FROM って書き方でも OK なんだ。


本の中でも触れていますが, 頭の中もしくは実際に手で円(ベン図)を描いてイメージすることが大事。

何か, 初めて“SQL が楽しい”と思えるようになりました。


1部では SQL(とその本質)の解説, 2部ではリレーショナルデータベースそのものの歴史について, 著者の私見も交えながら詳しく解説しています。
一人の Webアプリケーションエンジニアが RDB を知るための本としては, 非常に読みやすく, 分かりやすいと思います。
後半の歴史の部分は, 読み物としても面白いですし。


やっぱり理論って大事なんだなぁ, とつくづく思い知らされた一冊でした。
(大学でまじめに講義を受けていれば既に理解できていたことなのかも知れませんが, やっぱり実地で使わないと勉強意欲は湧きませんよねぇ...)

SQL, 関係データベース(RDB)について深く知りたい方は是非読んでみて下さい。


著者のホームページ - ミックのページ
ITPro - 数学の「集合論」に, RDBの正体を見る
はてブへ追加 この記事のはてブユーザ
DB | comments (0) | trackbacks (0) | pagetop↑

Comments

Post your Comment

Trackbacks