正規化


関係データベースにおける正規化とは、データベースの一貫性を持たせるために、データの冗長性を少なくし、関連性の強いデータ項目(属性)をまとめて、一事実一箇所(1 fact in 1 place)にすることです。
正規化したデータベースは冗長性がなくなり、データの不整合の発生を防ぐことができます。


正規化の種類

正規化の方法は数多くあるが、情報処理技術者で出題されるのは第1正規形、第2正規形、第3正規形とボイス・コッド正規形です。
  • 第1正規形
    データの繰り返し部分を別表にする。
  • 第2正規形
    1つのデータが定まると従属的にきまるデータを別表にする。
  • 第3正規形
    推移的に値がきまるデータを別表にする。
  • ボイス・コッド正規形
    すべての属性がキーに完全従属するようにしたもの。

正規化の方法

売上伝表のデータについて考えます。
売上伝表が以下のようになっているとします。
伝表番号 顧客番号 顧客名 顧客担当者名 配送先住所 商品番号 数量 単価
商品番号 数量 単価
商品番号 数量 単価
  • 非正規形から第1正規形
    上記表から、繰り返しデータが入っている箇所(商品番号、数量、単価)を別表にします。このとき2つの表のレコード関係付けるキーとして伝表番号を使います。
    伝表番号 顧客番号 顧客名 顧客担当者名 配送先住所
    伝表番号 商品番号 数量 単価
    これが第1正規形です。
  • 第1正規形から第2正規形
    第1正規形の表から、従属的にきまるデータを別表にします。
    上記の表では、『顧客番号』から「顧客名」が、『商品番号』から「単価」が決まるので、これを別表にします。
    伝表番号 顧客番号 顧客担当者名 配送先住所
    顧客番号 顧客名
    伝表番号 商品番号 数量
    商品番号 単価
    これが第2正規形です。
  • 第2正規形から第3正規形
    第2正規形の表から、推移的に決まるデータを別表にします。
    顧客番号から顧客担当者名が決まり、顧客担当者名から配送先住所が決まる場合、顧客番号から見て配送先住所は推移的に決まることになります。
    伝表番号 顧客番号
    顧客番号 顧客名
    顧客番号 顧客担当者名 配送先住所
    伝表番号 商品番号 数量
    商品番号 単価
    これが第3正規形です。
  • 第3正規形からボイス・コッド正規形
    下の表は『顧客番号+顧客担当者名』で「配送先住所」が決まっていて、『顧客担当者名』から「配送先住所」が決まっているのでこれを分割します。
    顧客番号 顧客担当者名 配送先住所

    顧客番号 顧客担当者名
    顧客担当者名 配送先住所
    これがボイス・コッド正規形です。


正規化のデメリット

正規化を行うことで一連のデータが複数の表に分散されるため、アクセスに時間がかかるという問題があります。
そのため、冗長なデータ構造になってもデータの更新頻度が低い場合には、あえて正規化を行わず、アクセス速度を重視することもあります。

戻る 一覧へ