正規化の目的
タプルの更新時に更新時異状を排除する
データを複数のテーブルに分けて格納した方が、安全、確実にデータを管理しやすい。
【更新異状】
タプル挿入異状:データ挿入時にデータが揃っていないのにデータを挿入する必要が出てきてしまう。
タプル更新異状:データを更新する場合には、一度に複数のデータを更新する必要が出てきて、更新を忘れてしまうとデータに矛盾が生じてしまう
タプル削除時異状:データを削除する場合に消したいデータ以上にデータが消えてしまう可能性がある。
正規化を行わない場合
①データ更新を行わない場合
データウェアハウスやアクセスログなど、データを追記するだけで更新を行わないため
②データの履歴を残す場合
社員異動履歴などの古いデータを残す場合は、更新されては困るため更新を行わないため
③高速化が特別に必要な場合
データの更新時異状よりも高速化が優先される場合、あえて正規化を行わないことがある。この場合は、更新異状への対策を別に考える必要がある。
用語の整理
スーパーキー テーブルの各行を一意に識別できる属性集合のこと
候補キー、キー
関係のタプルを一意に識別できる属性または属性の組みのうち極小のもの。 関係スキーマだと実線の下線をつける
主キー
候補キーの中から一つを選んだもの。(データベース設計者が決める)
データの値が空でなく、なおかつ重複しない属性 (候補キーの一つだから、関係スキーマだと実線の下線をつける)
自然キー 自然に登場し、主キーの役割をはたせる属性のこと
代理キー、非キー、代替キー
主キーに選ばれなかった候補キーのこと。 全ての代理キーは、主キーに綺麗に関数従属しているべきである
外部キー
他のテーブルの主キーになっている属性のこと 関係スキーマだと波線の下線をつける。
複合キー(複合主キー、複合外部キー) 主キー、外部キーが2つ以上の属性の集合で成り立っている場合のキーの集合のこと。
人工キー、代替キー 複合キーは属性の数が多くなると扱いにくいので、連番などの一つの属性で一意となるキーで代替することがある。その代替するキーのこと。
導出属性
他の属性を演算することで導くことができる属性のこと。例えば、単価x数量=金額のように求められる金額は導出属性になる。
メタデータ あるデータが付随して持つ、データ自身に関する抽象度の高いデータのこと(データのデータ)。
関数従属性
ある属性Xの値が決まれば、別の属性Yの値が一意(一つ)に決まるという性質。X→Yと記述し、Xを決定項、Yを従属項という。XはYを決定する、YはXに従属すると読む
自明な関数従属性 X→Yにおいて、YがXの部分集合である場合、自明な関数従属性であると呼ばれる
自明でない関数従属性 X→Yにおいて、Xはそのリレーションの候補キーでないため繰り返し登場する。そのため、定義にあるようなXの値が同じならばYの値も同じであるということが自明でない関数従属の性質
多値従属性、組生成従属性 一つの属性の値がわかれば、常の別の属性の集合の値が決まるという性質。X\(\twoheadrightarrow\)Yと記述しXはYの集合を決定すると読む。具体的な例として、教師の名前がわかれば生徒の一覧がわかる。
情報無損失分解
分解した関係を自然結合した時に元に戻せる分解の仕方のこと。
結合従属性 分解によって得られる表が結合によって、もとの表に戻ることが可能である性質のこと
完全関数従属性 関数従属性X→Yにおいて、Xの全ての真部分集合X’についてX’→Yが成立しないこと
※ 真部分集合:集合{A,B,C}の場合、部分集合は8個ある。ここから全体集合{A,B,C}を除いた集合のこと 部分関数従属することがなくなった状態のこと
部分関数従属性 主キーの一部に関数従属するもの
推移的関数従属性 関係Rの異なる属性または、属性の集合であるX,Y,Zについて、X→Y, Y not→ X, Y→Zの3つの制約が成立している関数従属性のこと。
Xが決まるとYが決まる、Yが決まるとXに関係なくZが決まる、Yが決まってもXは決まらないという性質
真部分集合 部分集合のうちの全体集合を除いた集合
正規形
非正規形
何も正規化がされていない。繰り返し項目があるなど。
第一正規形
定義:テーブルが繰り返しのグループを持っていないこと。
→ 全ての属性がスカラ値であるということ
→「繰り返しの列」や「セルの結合」がない。
第二正規形
第一正規形でかつ部分関数従属がない
主キーの一部によって一意に決まる属性を別表に移す
定義:第1正規形を満たし、かつ部分関数従属を持たないこと
関係Rが第1正規形であり、Rの全ての非キー属性はRの各候補キーに完全関数従属している
※ 第2〜ボイスコッド正規形は、関数従属性を用いて正規化する。 ※ 第4〜6正規形は、結合従属性を用いて正規化する。
第三正規形
第二正規形でかつ推移的関数従属がない。
主キー以外の属性によって一意に決まる属性を別表に移す
定義:あるテーブルが第2正規形を満たし、Xが候補キーであるか、またYが候補キーの一部である場合に、常にX→Y(関数従属)が成立すること
関係Rが第2正規形であり、Rの全ての非キー属性はRのいかなる候補キーにも推移的関数従属しない → テーブルの非キー列は、主キーに直接、関数従属すべきである。
→ 「主キーに関数従属する列にさらに関数従属する列」は存在してはならない
基本キー正規形(基本的に使わない)
第三正規形を少し発展させたもの。 定義:第3正規形でを満たし、2つ以上の一意な複合キーが存在し、かつそれらが重なりあっていること
ボイス(ー)コッド正規形
定義:全ての関数従属(X→A)において、Xがテーブル全体のスーパーキーであるということ
自明でない関数従属性が全て取り除かれた状態
第2正規形では、候補キーの真部分集合から非キー属性への関数従属を取り除いた 第3正規形では、非キー属性から別の非キー属性への関数従属を取り除いた
ボイスコッド正規形では、非キー属性から候補キーの真部分集合への関数従属を取り除く
第四正規形
定義:テーブル内に多値従属性を持たないこと(第4正規形を満たしていれば、ボイスコッド正規形も満たしていることになる。) ※ 第2〜ボイスコッド正規形は、関数従属性を用いて正規化する。 ※ 第4〜6正規形は、結合従属性を用いて正規化する。
第五正規形(=結合射影正規形、射影結合正規形)
定義:自明でない結合従属性と暗黙的ではない結合従属性を全て取り除かれた状態
※ C.J.Date曰く、最後の正規形でこれ以上リレーションを分けても意味がない
第六正規形(基本的に使わない)
定義:自明な結合従属性(つまり、そのリレーション自身を含む結合従属性)存在しないようになるまで、可能な限り、全ての結合従属性を排除したもの。
ドメインキー正規形(基本的に使わない)
定義:全てのドメイン制約と関数従属が有効になっているスキーマのこと
正規化で排除しようとするもの
正規化で排除しようとするもの
- 第1正規形への変形:繰り返し列
- 第2正規形への変形:複合主キーの一部への関数従属(部分関数従属)
- 第3正規形への変形:間接的な関数従属(推移的関数従属)
- ボイスコッド正規形への変形:
- 第4正規形への変形:
- 第5正規形への変形:
※ 第2正規形〜ボイスコッド正規形は、自明でない関数従属性を取り除く作業