正規化とは
実績あの事象や情報を矛盾なく管理するために、形式化することやその手順のことを
正規化という
正規化したものを正規形といい,
条件を満たしていないものを非正規形という
第1正規形
- 各列が原子値(それ以上分解できない値)である
- 繰り返しの集合を持たない
- 主キーが存在する
例1:連絡先データベース
非正規形
問題点:
- 電話番号とメールアドレスが複数の値を含む
- データの検索や更新が困難
- 値の数が不定
↓
正規形
このように3つのテーブルに分けることで、データの検索や更新・削除が簡単になり、データの整合性やデータ操作の一貫性が確保される。
第2正規形 (2NF)
- 第1正規形(1NF)である
- 部分関数従属が存在しない(完全関数従属である)
部分関数従属とは?
複合主キーの一部の列だけで他の列が決定される関係のことを指す。 第2正規形では、主キー以外の列は、主キー全体に対して完全に依存している必要がある。
例:注文データベース
非正規形
問題点:
- 商品名と単価は商品IDのみで決定される(部分関数従属)
- データの重複が発生している
- 更新時の不整合が起きやすい
↓
正規形
このように,注文データベースを注文明細テーブルと商品テーブルに分けることでデータの重複が減少し、データの一貫性が向上や更新時の異常が防止、効率的なストレージの使用が可能になる
第3正規形 (3NF)
- 第2正規形(2NF)である
- 推移的関数従属が存在しない
推移的関数従属とは?
A → B かつ B → C という関係がある場合、A → C という関係が推移的に成立すること。 つまり、主キー以外の列が、他の非キー列に依存している状態を指す。
例:書籍販売データベース
非正規形
推移的関数従属の例:
注文ID → 出版社ID → 出版社名、出版社住所
問題点:
- 出版社情報が重複している
- 出版社情報の更新が複数箇所必要
- データの不整合が発生しやすい
↓
正規形
このように3つのテーブルに分けることで、データの重複が最小限に抑えられ、データの一貫性が確保でき、データの更新が容易になり、効率的なストレージの使用が可能になっている。