Strings of Life

PHP/Phalcon/MySQL/JavaScript/RegExp/Ruby/Perl/ActionScript

タグ:RDB

Head First SQL ―頭とからだで覚えるSQLの基本
Head First SQL ―頭とからだで覚えるSQLの基本 [大型本]


本書は、データベース言語SQLの入門書。一般のSQL入門書に比べると、かなり欲張りな内容。1冊で、SQLの基本からテーブル設計の初歩、データベースの管理まで学べる。よくあるSQL入門書は、CRUDとJOIN、サブクエリあたりでおしまい。

4000円台と、技術系の入門書としては高価な部類に入るが、テーブル設計入門のためにもう1冊買う必要がないことを考えると、決して割高ではない。本気でデータベース技術を身につけたい人にはオススメできる。


個人的には、今回はテーブル設計のところを重点的に読んだ(主に第7章)。正規化の概念がそれなりに分かるようになったのが最大の収穫。

JOINやサブクエリも、ある程度掘り下げて書いてあるので、ちゃんと理解したくなったら再読しようと思う(最近、フレームワークのORMに頼りっきりでSQL書いてない…)。

リレーショナルデータベース(RDB)の世界には、「正規化」という、テーブル設計のベストプラクティスがあります。ということで正規化についてメモ。



正規化されたターブルの状態(正規形)には、いくつかの段階がある。まず、第1正規形(First Normal Form, 1NF)では、テーブルが持つ列と値の性質に注目する。

第1正規形:
規則1:列は原子的な値のみを含む
規則2:テーブルは原子的な列のみを含む

「原子的な」とは、「必要な最小限の単位になっている」という意味。各規則の例は以下。
例1:「成分:レタス、トマト、キュウリ」→「レタス」「トマト」「キュウリ」に分解できる
例2:「成分1:レタス」、「成分2:トマト」、「成分3:キュウリ」→「成分」にまとめられる


次に、第2正規形と第3正規形。ここでは、各列の関係に注目する。

第2正規形:
規則1:第1正規形の条件を満たしている
規則2:部分的関数従属性を持たない

第3正規形:
規則1:第2正規形の条件を満たしている
規則2:推移的関数従属性を持たない

列Aの値が変更されると列Bのデータも変更されないければならないとき、列Bは列Aに関数従属している、という。数式だと、B = f(A)というイメージ。また、T.B ->; T.Aという省略記法もある。

部分的関数従属性とは、主キーではない列が、複合主キーを構成する列の一部に従属しているが、複合主キーを構成する列全体には従属していないこと。

推移的関数従属性とは、キーではない列のどれかが、他のキーでない列のどれかと関連を持つこと。

このページのトップヘ