X(Twitter) Zenn GitHub RSS 共有

正規化

作成日時:2024-08-25
更新日時:2024-08-26

挿入時、更新時、削除時異常を防ぐ。
結合は遅いので、更新少ないやつとかはあえて正規化しないのもあり。

正規形

第1正規形

下記の条件を満たす場合。

リレーションR(A1, A2, A3...)は、その各ドメインdom(Ai) (i=1...n)がシンプルである

第2正規形

下記の条件を満たす場合。

  1. Rは第1正規形である
  2. Rの全ての非キー属性はRの各候補キーに完全関数従属していること

部分関数従属する非キーがあってはならない

第3正規形

下記の条件を満たす場合。

  1. Rは第2正規形である
  2. Rの全ての非キー属性はRのいかなる候補キーにも推移的に関数従属しない

ボイス・コッド正規形

下記のいずれかを満たす場合。

1.X -> Yは自明な関数従属である。
2.XはRのスーパーキーである

第4正規形

下記のいずれかを満たす場合。

  1. X->->Yは自明な多値従属性である
  2. XはRのスーパーキーである

第5正規形

下記のいずれかを満たす場合。

  1. *(X1, X2, X3..., Xi)*は自明な結合従属性である
  2. 各XiはRのスーパーキーである

第6正規形

下記を満たす場合。

Rに保持される唯一の結合従属性が自明なものである場合に限り、第6正規形 (6NF)

基本的に第3正規形は第5正規形まで成立している

商品マスタ{商品ID(PK), 商品名}

上記リレーションは第3正規形まで分解した結果。
商品ID→→商品名(要素1つだけの集合)|Φととれるため
このリレーションは第4正規形を満たしていると言える。
商品マスタ{商品ID(PK), 商品名, 料金}
とかならば、自明ではないが、商品IDがスーパーキーだから第4正規形。

また、自明な結合従属性を持つため、第5正規形を満たしていると言える。
(更にいうなら第6正規形も)

多値従属性

Rを関係とし、A, B, Cを、Rの属性集合の任意の部分集合とする。
Rのある(A値、C値)対に対応するB値の集合がA値だけに依存し、C値には独立かつそのときに限り、
BはAに多値従属しているといい、次のように表す。
A→→B

もしくは、
リレーションRの任意の集合ABCにおいて、その射影AB,ACに情報無損失分解できる場合
Rには多値従属性が存在するといえる。

簡単に言えば、ある項目が決まれば複数の集合が決定されるやつ。
スーパーキーを考えると面倒になるので、いったん忘れる。

自明な多値従属性