ホーム >
リレーショナル・データベースの世界
私の仕事は、DBエンジニアです。といっても、別に望んでデータベースの世界へ来たわけではなく、辞令によって、入社 1 年目の私は Oracle と向かいあうことになりました。当初、私はデータベースが面白くありませんでした。「ネットワークは花形、データベースは日陰」という言葉も囁かれていました。今でも囁かれているかもしれません。
ですが、しばらくデータベースを触っているうちに、私はこの世界にとても興味深いテーマが多くあることを知りました。なぜもっと早く気づかなかったのか、後悔することしきりです。もちろん、自分の不明が最大の原因ですが、この世界に足を踏み入れた当時、先生も、導きの書となる入門書もなかったことも事実です。今でこそバイブルと仰ぐ『プログラマのためのSQL 第2版』も新入社員には敷居が高すぎました。
そこで、です。このサイトの目的は、データベースの世界に足を踏み入れた当時の自分に向かって、多少は見通しを持つことのできた現在の私が、データベース入門のてほどきを行うことです。当時「こんなサイトがあれば」と感じた、そういうサイトを作ることです。
以下の条件に当てはまる人を読者に想定しています。
- なぜ"関係"モデルという抽象的な用語を使うのか分からない。"表"モデルでいいじゃない。
- なぜ「= NULL」ではなく「IS NULL」と書かねばならないのか分からない。
- E.F.Codd、C.J.Date、J.Celko、F.Pascal の本を読んだことがない。
- IN述語とEXISTS述語では、IN の方が直観的に分かりやすいから好きだ。
- IN述語、EXISTS述語、LIKE述語・・・「述語」って何だ?
- テーブル設計のときは滅多に NOT NULL制約を付けない。しかもそれが大罪であることの自覚がない。
- SQL で分岐とループを表現する方法を知りたい。
- SQL で CASE式を使ったことがない。
- SQL で 自己結合を使ったことがない。
- HAVING句を影の薄い脇役だと思っている。
- GROUP BYとPARTITION BYの違いを一言で説明できない。
- SQL で木構造のデータを扱いたい!
-
パフォーマンス・チューニング
- SQLを速くするぞ
なるべくベンダー非依存の技術を集めました。同じ結果を得る SQL でも書き方次第でかなりのパフォーマンス向上が望めるものです。
-
性能改善の鍵,インデックスの特性を知る
データベースのインデックスでよく使われるアルゴリズム B-tree(B+tree) および ハッシュの原理についての解説。なかなかよくまとめられた、と自賛の一品です。
-
実践向け
-
CASE式のススメ
便利なのに意外に使われていないCASE式を、もっと活用しましょう。レイアウトの見やすい CodeZine 版はこちら → 前編 後編。
-
自己結合の使い方
CASE式に劣らず強力だけど、動作がイメージしづらくてあまり利用されていない自己結合についての解説。「集合指向言語としてのSQL:その1」
-
HAVING句の力
「集合指向言語としてのSQL:その2」です。影の薄い脇役と思われがちなHAVING句の復権のために。いい出来だと思う。
-
外部結合の使い方
結合シリーズ第2弾。さあ、みんなで結合しよう。
-
相関サブクエリで行と行を比較する
「集合指向言語としてのSQL:その3」。これもなかなか。「自己結合の使い方」と併せ読むと面白いかも。
-
SQLで数列を扱う
「数列」というのは、あくまで順序集合の一番分かりやすい例として出したものなので、方法論自体は一般性の高いものです。なにげに量化の話まで入れてしまった欲張りな回。
-
SQLで連番を扱う
初出は『Web+DB Press』Vol.45。「連番」というのも、SQL ではなかなか素直に扱えない対象です。しかし、近年では ROW_NUMBER、RANK など手続き型の考え方で操作できる関数が追加されるようになったため、かなりとっつきやすくなっています。
-
SQLで集合演算
UNION、INTERSECT、EXCEPTなどを中心に、SQLでの集合演算の利用方法を解説した記事です。「集合指向言語としてのSQL:その4」
-
帰ってきたHAVING句
ジュワッ! 「HAVING句の力」第2弾です。これは HAVING と GROUP BY の解説としては決定版といって差し支えないでしょう。類別と特性関数の話も出せて満足な一品。
-
更新なんてこわくない!
SQL というと、どうしても検索に主眼が置かれますが、実は最近は更新の手段もかなり充実しており、DB 内部でさまざまなデータ編集をすることが可能になっています。
-
スカラ・サブクエリの使い方
スカラ値と複合値というのは、「第1正規形とは何か」という関係モデルの基礎に関わる重要な区分です。それを理解すると SQL の中でのスカラ値の使い方が分かります。
-
SQLアタマ養成講座 (PDF) (HTML)
初出は『Web+DB Press』Vol.44。SQLの重要な三機能:分岐(CASE式)、ループ(相関サブクエリ、OLAP関数)、カット(GROUP BY、PARTITION BY)の使い方を解説したもの。「中級入門」の対象者を意識して書きました。
-
SQLで木と階層構造のデータを扱う(1)――入れ子集合モデル
近年、データベースの世界で要望の高まりを見せている木構造の扱い方を、「入れ子集合モデル」という独創的な方法に基づいて解説します。このモデルは、初めて知るときはけっこう感動します。
『Web+DB Press』版はこちら。
-
SQLで木と階層構造のデータを扱う(2)――経路列挙モデル
木構造の扱い方第2弾です。今度は、ノードをディレクトリに見立てて、文字列操作を駆使します。ファイルシステムの発想とも共通点の多い興味深い方法論です。
-
SQLで木と階層構造のデータを扱う(3)――入れ子区間モデル
入れ子集合モデルには、整数を座標に使っているため、更新時のパフォーマンスが悪いという欠点がありました。それを克服するため、整数から有理数へ一般化したモデル。これも初めて知るときには震えがきます。
-
SQLで数学パズルを解く (数論編) (組み合わせ論編)
どうせ SQL を学ぶなら、楽しみながら学べた方が嬉しいもの。問題、解法も随時受付中。
-
SQL For Practitioners
知っていると時々便利な Tricks & Tips。随時更新の予定です。
-
設計・その他
-
テーブル設計のグレーゾーン
SQL のテクニックから離れて、テーブル設計の話。それもあまり行儀のよくない一癖ある連中ばかり集めてみました。
ビューの功罪
ビューは諸刃の剣です。ご利用は計画的に。
SQLプログラミング作法
大したことではないのですが、SQL にもマナーはあった方がいいでしょう。
手続き型から宣言型・集合指向に頭を切り替えるための7か条
SQL を学ぶときに一番の障壁となるのが、手続き型言語から無意識のうちに身に付けた考え方です。手続き型言語から SQL へ、うまくジャンプするためのコツをまとめました。
-
基礎理論
なぜ"関係"モデルという名前なの?
なぜ「表モデル」という名前ではないのか?その疑問に答えるための小文。関係の正確な定義を知りたい人向け。
アドレス、この巨大な怪物
関係モデルはなぜ考え出されたのか。それはアドレスという怪物からデータベースを解放するためのアイデアでした。
この文章の後半、プログラミング言語一般に議論を広げた部分は、大雑把過ぎるので読み流してください。いずれ修正します。
SQLの中の述語論理
IN述語、EXISTS述語、LIKE述語 ・・・・・・ 述語って何だ? それは関数 ―― 正確には述語論理の基礎概念である「命題関数」 ―― のことです。データベースの世界から見た述語論理入門。
- そんなあなたが大好きよ
いやあ、SQL って本当に、いいもんですね。
-
GROUP BYとPARTITION BY
普段なにげなく使っているGROUP BYとPARTITION BY。本当はどういう機能を果たしているか、分かりますか? SQL の背後にある集合論と群論の考え方を解説します。
-
再帰集合とSQL
ランキングや累計を求めるクエリでは、ノイマン型の再帰集合が重要な役割を果たします。そのアイデアの源泉は、自然数の帰納的定義という集合論の基礎にまで遡ります。その理論的背景を探るコラム。
-
歴史
- リレーショナル・データベースの歴史 (1) (2) (3)
リレーショナル・データベースが誕生してから30年の歴史を、データベース界の指導的論客である C.J.Date が概観した連載の要約です。
ちなみにこの連載、好評だったのか本にもなってます。
- 国家・データベース・イノベーション
リレーショナル・データベースの歴史を見ると、関係モデルというアイデアが破壊的技術であり、その誕生史はそのままイノベーションのジレンマを地で行く展開だったことが分かります。
-
NULLにまつわる諸問題
3値論理――神のいない論理
3値論理という奇妙な体系にまつわるトピックを紹介します。なぜ「= NULL」ではなく「IS NULL」と書かなくてはならないのか分からない人へ向けて書きました。
3値論理とNULL
CodeZine用に具体例をかなり増やしました。説明も昔に比べてうまくなった気がする。
SQLにおける論理演算 New!
あまり NULL 絡みの話はしておらず、どちらかというと論理演算の便利さを紹介したのですが、まあ分類で言うとやはりこの位置かな。
NULL撲滅委員会
万国のDBエンジニア団結せよ。
存在と無
NULL と空集合の違いって分かります?
130値論理
身の毛もよだつ多値論理の話。こえー。
-
その他
『SQLパズル 第2版』サポートページ
私が訳者を務めたJ.セルコ『SQLパズル 第2版』(翔泳社, 2007)のサポートページ。
『SQL徹底指南書』サポートページ
拙著『達人に学ぶ SQL徹底指南書』(翔泳社, 2008)のサポートページ。皆様に愛されて3刷になりました。
「SQLアタマアカデミー」サポートページ
『Web+DB Press』(Vol.44〜)で連載中の「SQLアタマアカデミー」のサポートページ。
「みんなまとめて面倒みよう〜真のDBエンジニアになるために必要なこと〜」
2008年2月13日にデブサミで行った講演の資料。
セルコ・セレクション
データベース界の偉大な導師J.セルコの記事の要約。
推薦図書