[RDB] 正規化メモ

リレーショナルデータベース(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という省略記法もある。

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

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

コメントを残す