いくらRDBの操作を抽象化してくれる便利なライブラリ(ORマッパーとか)を使っていても、それでもRDBを使う限りは、テーブル設計の考え方にしろ抽出ロジックの考え方にしろ、SQLを知っていないとやりづらいと思うのです。
でも正直、「SQLこう学べば一発でわかるようになるよ」と言えるほど教えるノウハウはない。なので、僕がどうSQLを勉強したか書いておこうと思います。
正直、情報処理の試験で問われるまでSQLを使う用事がなかった
プログラミングの歴だけは長いのですが、SQLを勉強する必要が出たのは、新卒で入社した会社で「ソフトウェア開発技術者(現・応用情報処理技術者)を取りなさい」と言われてからです。
いきなりお勉強的なムードからSQLを学ぶ必要が出てしまったので、最初は全くやる気にならなかった・・・ので、これはいかんと思って、何とか手を動かそうと思って、手にとったのがSQL書き方ドリルという本。
技術評論社
売り上げランキング: 7,802
この本の付録についてる「SQUAT(スクワット)」というSQLトレーニングツールがよくできていて、いろんなSQLを書いてどんな実行結果が出るかを試してみて、やっとSQLが理解できました。
SQLを学ぶときの障害って、
- 環境構築するのが面倒。
- データを用意するのが面倒。
という2つがあると思っていて、この両方をクリアしてくれるのはこの本ぐらいなんじゃないかなーと思います。
前者の環境構築面では、今ではSQL fiddleというブラウザでSQLの実行結果を確認できるツールがあるので、結構気楽に実行結果を確認できると思うのですが、やっぱりデータセットを用意するのが面倒ですね。最初は出来合いのそれっぽいデータセットでSQLを叩くのが上達の近道だと思います。
そのあとはミックさんのウェブサイトを読み込んでいた
ミックさんというデータハウス系のDBエンジニアの方が書かれている「リレーショナル・データベースの世界」というウェブサイトがよくできていて、かなりこのサイトで勉強させてもらった記憶があります。
僕がSELECT句を書くときに、
SELECT col_1 , col_2 , col_3 FROM mst_a ;
と、行の後にカンマを打つのではなく行の先頭(要素と要素の間)に書くようになったのは明らかにこのサイトの影響です(SQLプログラミング作法)。
そんなミックさんの書かれた達人に学ぶSQL徹底指南書という本が、僕の中のSQLバイブルです。
翔泳社
売り上げランキング: 15,008
これとOracle SQLパズルというサイトを参考にSQLを考えれば、大抵のものは書けた気がします。
ところで「プログラマのためのSQL」というミックさんが翻訳されている、「これが本当のSQLのバイブル!」と呼ばれている本があるのですが、これは僕の肌には全然合いませんでした・・・分厚いし、読んでてつらかった。
翔泳社
売り上げランキング: 92,679
テーブル設計はどう勉強した?
SQLとテーブル設計は別物ではありますが、SQL使う用事があるならテーブル設計もしなくちゃいけない状況にあることがほとんどです。
RDBのテーブル設計のやり方(正規化とかそういうの)は、ソフトウェア開発技術者の勉強の過程でさわりぐらいは勉強していたので、僕が読んでいたのはこんな感じの、もうちょっと業務に近いテーブル設計の本です。
翔泳社
売り上げランキング: 151,034
元々はこんな本が鉄板でおすすめされていて、買ってはいたのですが、積読しておりました。SQL書き方ドリルと同じ著者の方ですね。久しぶりに本を開いてみたのですが、確かに良著で、当時なんで積読していたのかな・・・と不思議でなりません。
翔泳社
売り上げランキング: 80,726
T字形ERというデータモデル設計法
上記のようなテーブル設計とは別に、かなり興味を持って勉強していたのがT字形ERというデータモデル設計法です。
たまたま前にいた会社の自由参加型の研修に応募したときに出会った考え方なのですが、佐藤正美という先生がなかなかヘンクツで面白い人で引きこまれたのでした。
太っ腹なことに、研修で使っているテキストも公開してくれています:TMの最新バージョン
書籍にもなっていて、T字形ER自体を一番詳しく説明している本は以下の本になります。
ソフトリサーチセンター
売り上げランキング: 256,711
とはいえ、かなり難解な語り口調で書かれているので、本だけで理解するのはなかなか大変かも知れません。
僕の場合は、会社の研修に加えて、早稲田大学のエクステンションセンターというところで行われている事業の実態がわかる事業分析技術・データベース設計技術という講義を自費で受講しに行っていました。
講義の内容はなかなかタフなもので、会社を早くあがってこの講義に駆けつける、というのがえらい大変だったな・・・という思い出があります。この講義のあとに先生交えて受講生同士で飲みに行くのが楽しかったなーというのも、思い出の一つですw
T字形ERはRailsでのテーブル設計と相性が良い考え方でもあるので、また折に触れて整理した状態でご紹介したいです。