正規化は、混在した事実を主題別に分けて重複を減らす処理です。重複は更新・挿入・削除時の不整合につながります。
正規化で異常が解消される過程のシミュレータ
1. 正規形を選択
2. 異常を起こす操作を実行
正規形を変え、同じ操作を繰り返してください。下線付きの列が主キーです。
1NF1セル1値
2NF部分関数従属を除去
3NF推移的従属を除去
BCNF決定項が候補キー
関数従属性から分割先を考える
学生番号で名前が決まる関係を「学生番号→名前」と書きます。色付きチップが関数従属性を示します。段階を進めると関連した事実が別テーブルにまとまります。
1NFは1セルに1つの値を置きます。 2NFは複合キーの一部だけに依存する列を分離します。 3NFは非キー列を介した推移的な依存を分離します。 BCNFでは、すべての決定項が候補キーであることを求めます。
実務と面接
正規化は重複を減らしますが、検索時のJOINが増える場合があります。読込み主体の用途では意図的な非正規化も使います。3種類の異常を具体例で説明できるようにしましょう。