「漢のコンピュータ道」でも有名な奥野幹也さんが著者のDB本を読みました。
以前参加した勉強会での発表もそうでしたが、現場の泥臭い実装的な知識ではなく、リレーショナルモデルとはなにか、リレーショナルモデルに則った設計やSQLを実践していくとはどういうことなのかといった理論を理解していく内容でした。
正直SQLのアンチパターンなどのはまりやすいパターンから説明してくれる本のほうが読み易く、実践もしやすいですが、根本的な理論をしらないと小手先だけの変更で満足してしまうことにもなりかねないので、ちょっとずつ実践を重ねている自分にはとてもためになりました。
データベースの運用は「SQLかけて、構造の作り方がわかったら、あとは頑張って何とかする」と言った感じでもなんとかなってきた部分もありますが、メモリに全く載り切らない程度の大きめなデータを扱ったり、RDBといわゆるNoSQLの違いって何なの?と思ったりしている人におすすめだと思います。
読了してからだいぶたってしまったけれど、今回も自分なりのまとめを書きます。
1章:SQLとリレーショナルモデル
リレーショナルモデルとはなにか。
SQLによる集合演算は何を意味しているのかといった基礎。
RDBをただ単にデータストアとして使っていて、それを操作するための言語がSQLだからSQL書いてるっていう人にはちょっとした衝撃があると思います。(自分はそうだった。ォオー!!(゚д゚屮)屮)
リレーショナルデータベースの"リレーション"は見出し(=属性:名前とデータ型のペア)と本体(属性値の集合)であるというのもここで初めて知りました。
2章:述語論理とリレーショナルモデル
リレーションにおける演算と述語論理の説明とその関係性について。
ここで、リレーションの演算は全て述語論理をベースにした論理演算であることが紹介されます。よくよく考えればわかるけど、ただ使ってると全く意識しないところでもあるので面白いです。
3章:正規化理論(その1)関数従属性
リレーショナルモデルの矛盾を回避するための正規化理論の説明。
第1正規形から第3、BCNFまでの正規化手順。
4章:正規化理論(その2)結合従属性
第4〜第6正規形への正規化のための結合従属性の排除
5章:リレーションの直交性
直交性の説明、簡単な例
第6正規形とか実用的じゃなさすぎない?という疑問の答えでも会った部分。実装で第6正規形が必要なわけではなくて、直交性を確認してデータに矛盾がないことを示せる状態になるために第6正規形にする必要があるのだと認識しました。
6章:ドメインの設計戦略
ドメイン(=リレーショナルモデルにおけるデータ型)をどう考えるか。
ID, ナチュラルキー, サロゲートキーの理解と使い分け
7章:NULLとの戦い
3値理論が閉世界仮説を壊す。
NULLが存在することの実装上の弊害。
8章:SELECTを攻略する
SELECTのいろいろなパターンの紹介、実装
P172参照
9章:履歴データと上手く付き合う
履歴データとリレーショナルモデルの差
履歴データとの妥協点と対応
10章:グラフに立ち向かう
グラフ・木構造の説明
グラフへのRDBでの対応方法
11章:インデックスの設計戦略
インデックスの仕組み。
パーティションによる効果
12章:Webアプリケーションのためのデータ構造
キャッシュの考えかた。
NoSQLとの併用について
スケールアウトに関して
13章:リファクタリングの最適解
リファクタリングの視点・考え方
リファクタリングのベスト・プラクティス紹介
14章:トランザクションの本質
トランザクションの仕組み・分離レベルについて
正規化・直交性がもたらす効果
ーーーー
リレーショナルモデルの基礎的な考え方、正規化理論、直交化 に関しては知らなかったことばかりで、RDBの理論的な奥深さを思い知らされました。ただ、まだまだ語られてない感がたっぷりなことと、もうちょっと具体的な例が欲しかったこともあって、自分なりに勉強せねばという気になりました。
前半部分はなかなかおもしろいので7章くらいまでだけを読むのもおすすめ!
⊂゚U┬───┬~ 終わり