2008年6月10日火曜日

SQLに関してメモ

AppleのWWDCのライブを覗いている合間にメモ。

SQLは集合を扱うのに向いている。
しかし我々は手続き型言語の思考回路にとらわれている。
手続き型言語の思考回路で集合を考えると、ついループと条件分岐の発想をしがちである。
ところがSQLはそれをスマートかつ効果的な形で表現するパワーを持っている。

一番駄目だと思うのは、SQLで取り出した集合を再度プログラム言語側で手続きルーチンでループして加工したり構造を変えたり、融合させたり、分離させたりすること。
(Viewをレンダリングするときにループさせるのはしようがないよね)

これじゃ全くSQLの恩恵を受けていない!

これらは手続き型言語でやることではなくって、SQLがスマートにできること。
だから、こういった物はSQL側にまかそう。
たいていはサブクエリーやJOINや集約やUNIONとか使って実現できるはず。
時にはSQL関数だって使える。

また、できるだけ一回のクエリーで望む集合を取り出そうとしよう!

そうでないと、それぞれ複数のクエリーで取り出した集合をメモリ上で手続き型言語によって再構築しなければならない。それはクールじゃない。

最終的に取り出したい集合のイメージをしっかりと持ってくエリーを組み立てることが大切。
SQLにおいては集合の取り出し方ではなくって、どんな集合が欲しいのかの方が大切。

昔々、webの世界でRDBMSを使うことはそれはそれは高価なことだった。
webのわずかばかりの機能にそんな高価なRDBMSを使うことは採算的にあわなかった。
ところがオープンソースのRDBMSの発展によってRDBMSは低コストで使えるようになった。
またwebも少しずつRDBMSの持つ複雑な問い合わせ機能に依存する機能をほしがるようになった。
そしてwebでRDBMSを使うことはコモディティー化した。
最近では単に永続データを実現する為に、単なるデータ置き場として使われているようだ。
また、最近のSQLを書かなくてもいいフレームワークがそれにいっそう拍車をかける。
そしてみんな複雑なSQLは書かなくなって、フレームワークに任せるようになった。

でも、もっとSQLはデータを取り扱うときにパワーはあるし、それをもっと使うべきでしょう。
フレームワークは簡単なSQLは「書かなくってもいい場合がある」ということを助ける。
だから、フレームワークが発行する簡単な物があってそれで実現できればそれにたよればいい。
しかしフレームワークが実際にどのようなSQLを発行しているのかをハックすることは大事だと思う。

0 件のコメント: