@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

ただのプログラマがSQLマスターになるために「これだけは知っておきたいデータベースの常識」

誰が読むべきか

WEBアプリケーションの実装経験が2年あり、日常的にSQLを書きます。複雑なロジックでなければSQLを書くことは苦にしません、複雑なロジックも先輩プログラマと相談しながらSQLに起こすことができます。しかしRDBがなんなのかよくわかりません。SQLを書くことでDBからレコードを取得したり、DB内のレコードを更新することはできます。しかしRDBがなんなのか分からない。アプリケーションのアーキテクチャとして決められているのでDBを使っているだけで、なぜファイルではなくDBを使っているのか説明できない。また、自分の知っているDBの機能は極一部で、DBの機能を使いこなしている気がしない。しかし各機能の用途も名前もよく分からないのでどう使っていいの使っていいのかわからない。そういう人向けな本。

素晴らしさは目次で分かる

1章、2章は「データベースとは」でググってトップ10位くらいのサイトを眺めれば出ている内容です。3章は「SQLとは」でググれば出てくる内容です。4章だってPostgresSQLのマニュアルに一通り載っています。「なんだWEBで十分じゃないか」と思うでしょう。でも、そうじゃないんです。内容が革新的かどうかは問題じゃないんです。DBに関する基礎知識を漏らすことなく書いていること。この内容の取捨選択のセンスが素晴らしい。「タイトルに偽りなし」です。
たとえば、

  1. 「2.3 テーブルの正規化」を知らなければテーブル設計はできません。場合によっては「4.2 ビューの作成」「4.3 テーブルや列に制約を設定する」の知識も必要でしょう。
  2. アプリケーションとDBの処理をどこで分けるか判断するには「4.5 データベース側で各種の処理を実行する───ストアドプロシージャ」「4.6 各種のタイミングで処理を自動的に行う───トリガ」の知識が必要でしょう。
  3. 「4.7 トランザクションと障害対策」「4.8 同時に多数のユーザがデータベースにアクセスできるようにする(同時実行制御)」を知らない人にはトランザクションの設計は任せられません。

しかも特定のDBの機能・文法に依存していないため、普段使っているDBがなんであってもお構いなしに参考にすることができます。そして同じ作者が統一したスタイルで説明していることは、Webでつまみ食いはしていても全体を把握できてないと感じてる人にはありがたいことのはずです。

  • 第1章 データベースの第一歩
    • 1.1 データベースとは何か
    • 1.2 データベースとデータモデル
    • 1.3 データベースの設計
    • 1.4 最近のデータベースの流れ
    • 1.5 データベースの主なソフト
  • 第2章 リレーショナルデータベースの考え方
    • 2.1 「表」や「集合演算」が基本
    • 2.2 ER図(Entity-ralationship Diagram)でテーブルの関係を図示する
    • 2.3 テーブルの正規化
    • 2.4 結合のパターン
  • 第3章 リレーショナルデータベースをコントロールする「SQL
    • 3.1 SQLの概要
    • 3.2 行を取り出す
    • 3.3 テーブル内での計算や集計
    • 3.4 テーブルを結合する
    • 3.5 副問い合わせと相関副問い合わせ
    • 3.6 テーブルの作成と行の挿入等の操作
  • 第4章 より高度なデータベース処理
    • 4.1 ユーザ/権限/ロールの設定
    • 4.2 ビューの作成
    • 4.3 テーブルや列に制約を設定する
    • 4.4 インデックスで検索を高速化する
    • 4.5 データベース側で各種の処理を実行する───ストアドプロシージャ
    • 4.6 各種のタイミングで処理を自動的に行う───トリガ
    • 4.7 トランザクションと障害対策
    • 4.8 同時に多数のユーザがデータベースにアクセスできるようにする(同時実行制御)
    • 4.9 複数のサーバにデータベースを分散する
    • 4.10 インターネットとデータベース
  • 第5章 データベース主要用語集
    • 索引

活用方法

まず目次を読みましょう。知っている内容だと思う章は流し読みしてください、把握してる内容と大体同じだと感じたら念入りに読む必要はありません。
もし章タイトルに知らない用語があるならば、その章は丁寧に読んでください。既に知っている機能の別名だったら、別名を頭の片隅に入れておけば問題ないでしょう。誰かと話しているときにその単語が出てきたら「ははぁ、あの機能のことだな」と思ってドヤ顔してください。
まったく知らない機能を見つけたら、普段自分が使っているDBではどうやって使うのかを調べてください。「SQLServer トリガ」などでググればあっという間にサンプルコードが見つかるので、実際に動かして試してみてください。今は使わなくてもいつか使う場面が来ます。その時こそ「こんなこともあろうかと思って調べておいたんだ」と言うべき時です。