正規化

正規化はデータの冗長性を排除し、独立性を高めるために行う。
冗長性があると更新時異状が発生するため、「1事実1箇所」にする事で正規化していく。

正規化を行わない場合、追加や削除を行った場合にデータの整合性が保たれない。
例:あるデータを追加したいが、別のデータが必要になり追加できない。
例:あるデータを削除すると、別のデータが消えてしまう。

また、冗長性があるため、更新処理のコストが高くなる。
例:あるデータを更新すると、同じデータを持つすべてのデータを更新する必要がある。

■正規化するために必要な用語
関数従属性・・・ある列の値Xが決まると、別の列の値Yも決まるとき、YはXに関数従属である。表記:X→Y
推移的関数従属性・・・ある関数従属関係から、新たな関数従属関係が得られるような場合。X→Y、Y→Zのとき、X→Zは推移的関数従属性を持つ。
完全関数従属・・・キーの全てにのみ従属する。{A,B}→Cののときに、A→C、B→Cが成り立たない。
部分関数従属・・・キーの全てまたは一部に従属する。{A,B}→Cの時に、A→CやB→Cが成り立つ場合。

■正規形の種類
実務では、基本的に第3正規形までを使用するが、利便性やパフォーマンスを考慮して非正規化することもある。

非正規形・・・正規化が行われていない状態。受注伝票を1テーブルで表現した様な場合。
第1正規形・・・キーを設定し、繰り返し、導出項目を排除する。
第2正規形・・・部分関数従属性を取り除く
第3正規形・・・推移関数従属性を取り除く
ボイス・コッド正規形・・・非キーからキーへの関数従属性を取り除く
第4正規形・・・対称性のある多値従属性を分解する。
第5正規形・・・結合従属性を維持して分解する。

■参考資料
http://www.slis.tsukuba.ac.jp/~uda.norihiko.fw/lecture/database/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です