《正規化 (normalization)》
Create:2002/02/11
[BACK] [NEXT] [メニュー]
   データベースの正規化(normalization) とは、データベースの冗長性を減らし、照時の矛盾を
   減らすことをいう。
   一般的に、正規化は第3正規形まで行う。
   第3正規形まで正規化することによって、冗長性のないデータ項目のグループが作れるが、
   処理効率を考えると必ずしも良いとはいえない。

    ・第1正規化
      繰り返しデータをレコードとして、独立させること。

    ・第2正規化
      主キーの一部だけから特定できる項目を別の表にすること。
      主キー(primary key) とは、その項目を選び出すとその行(横全部)が
      一意に決まる列を言う。

    ・第3正規化
      主キー以外の項目で特定できる項目を別の表にすること。


   例)
    次の受注表を正規化する

     ┌───┬─────┬───┬──┬──┬────┬────┐
     │受注No│ 受注日 │受注先│商品│数量│ 単価 │合計金額│
     ┝━━━┿━━━━━┿━━━┿━━┿━━┿━━━━┿━━━━┥
     │   │     │   │ S │  3│  1,000│    │
     │  1 │00/10/01 │ A  │  │  │    │  4,900│
     │   │     │   │ T │  2│   950│    │
     ├───┼─────┼───┼──┼──┼────┼────┤
     │   │     │   │ S │  1│  1,000│    │
     │  2 │00/10/01 │ B  │ U │ 10│  1,200│ 22,000│
     │   │     │   │ V │  5│  1,800│    │
     ├───┼─────┼───┼──┼──┼────┼────┤
     │  3 │00/10/02 │ B  │ T │  8│   950│  7,600│
     ├───┼─────┼───┼──┼──┼────┼────┤
     │  4 │00/10/02 │ C  │ U │ 25│  1,200│ 30,000│
     ├───┼─────┼───┼──┼──┼────┼────┤
     │ : │  :  │ : │ :│ :│  : │  : │
     └───┴─────┴───┴──┴──┴────┴────┘


   解説)
     第1段階として、第1正規化を行う。

     初期状態では、商品の項目が受注先ごとにまとめて掲載されており、
     右から4つの列が1つの表の中に2つ以上のデータを含んでいる。
     このようなデータを繰返しデータと言うが、この部分が1行に1つの
     データとなるように行を増やす。

     ┌───┬─────┬───┬──┬──┬────┬────┐
     │受注No│ 受注日 │受注先│商品│数量│ 単価 │合計金額│
     ┝━━━┿━━━━━┿━━━┿━━┿━━┿━━━━┿━━━━┥
     │  1 │00/10/01 │ A  │ S │  3│  1,000│  3,000│
     ├───┼─────┼───┼──┼──┼────┼────┤
     │  1 │00/10/01 │ A  │ T │  2│   950│  1,900│
     ├───┼─────┼───┼──┼──┼────┼────┤
     │  2 │00/10/01 │ B  │ S │  1│  1,000│  1,000│
     ├───┼─────┼───┼──┼──┼────┼────┤
     │  2 │00/10/01 │ B  │ U │ 10│  1,200│ 12,000│
     ├───┼─────┼───┼──┼──┼────┼────┤
     │  2 │00/10/01 │ B  │ V │  5│  1,800│  9,000│
     ├───┼─────┼───┼──┼──┼────┼────┤
     │ : │  :  │ : │ :│ :│  : │  : │

     このデータを元に、主キーを見つける。
     この主キーは、特定の行を取り出したい場合に有効になる。
     1項目だけを見れば、特定の行を取り出せるようにしたのが主キーの設定
     ということ。
     この表の場合は【受注No】と【商品】に注目すると、横1行のすべての項目
     が特定できる。よって、主キーはこの2つになる。
     このように、列の繰返しの部分をなくすことを第一正規化といい、
     このようなデータを第1正規形(first normal form) という。

     次の段階として、第2正規化を行う。
     この段階では、第1正規化で得た主キーの一部だけで特定できる項目を
     別の表に分る。
     主キーの一部とは、【受注No】か【商品】のどちらかで特定できれば良いということ。
     例えば、第1正規形で【受注No】に注目すると次のような表ができる。

      ┌───┬─────┬───┬────┐
      │受注No│ 受注日 │受注先│合計金額│
      ┝━━━┿━━━━━┿━━━┿━━━━┥
      │  1 │00/10/01 │ A  │  4,900│
      ├───┼─────┼───┼────┤
      │  2 │00/10/01 │ B  │ 22,000│
      ├───┼─────┼───┼────┤
      │ : │  :  │ : │  : │

     また、【受注No】と【商品】に注目し・・・
      ┌───┬──┬──┬────┐
      │受注No│商品│数量│ 単価 │
      ┝━━━┿━━┿━━┿━━━━┥
      │  1 │ S │  3│  1,000│
      ├───┼──┼──┼────┤
      │  1 │ T │  2│   950│
      ├───┼──┼──┼────┤
      │  2 │ S │  1│  1,000│
      ├───┼──┼──┼────┤
      │  2 │ U │ 10│  1,200│
      ├───┼──┼──┼────┤
      │  2 │ V │  5│  1,800│
      ├───┼──┼──┼────┤
      │ : │ :│ :│  : │

     さらに、【商品】に注目すると以下のようになる。
      ┌───┬──┬──┐ ┌──┬────┐
      │受注No│商品│数量│ │商品│ 単価 │
      ┝━━━┿━━┿━━┥ ┝━━┿━━━━┥
      │  1 │ S │  3│ │ S │  1,000│
      ├───┼──┼──┤ ├──┼────┤
      │  1 │ T │  2│ │ T │   950│
      ├───┼──┼──┤ ├──┼────┤
      │  2 │ S │  1│ │ U │  1,200│
      ├───┼──┼──┤ ├──┼────┤
      │  2 │ U │ 10│ │ :│  : │
      ├───┼──┼──┤
      │  2 │ V │  5│
      ├───┼──┼──┤
      │ : │ :│ :│

     このように「○○がわかれば、横1行全部がわかる」と言うようなものを
     見つけ、その関連でグループ分けを行うのが、第2正規化になる。
     ここでいう「○○」というのが、そのレコードの主キーになる。

     以上をまとめると、次の3つの表に分かれた。このようなデータを
     第2正規形(second normal form) という。
      ┌───┬─────┬───┬────┐
      │受注No│ 受注日 │受注先│合計金額│
      ┝━━━┿━━━━━┿━━━┿━━━━┥
      │  1 │00/10/01 │ A  │  4,900│
      ├───┼─────┼───┼────┤
      │  2 │00/10/01 │ B  │ 22,000│
      ├───┼─────┼───┼────┤
      │ : │  :  │ : │  : │

      ┌───┬──┬──┐ ┌──┬────┐
      │受注No│商品│数量│ │商品│ 単価 │
      ┝━━━┿━━┿━━┥ ┝━━┿━━━━┥
      │  1 │ S │  3│ │ S │  1,000│
      ├───┼──┼──┤ ├──┼────┤
      │  1 │ T │  2│ │ T │   950│
      ├───┼──┼──┤ ├──┼────┤
      │  2 │ S │  1│ │ U │  1,200│
      ├───┼──┼──┤ ├──┼────┤
      │  2 │ U │ 10│ │ :│  : │
      ├───┼──┼──┤
      │  2 │ V │  5│
      ├───┼──┼──┤
      │ : │ :│ :│

     次の段階として、第3正規化を行う。
     第3正規化は、主キー以外(受注No と商品以外)に注目して、グループ分けを行う。
     この問題の場合では、これ以上分けることはできない。

     よって、正規化した結果は次のようになる。
      ┌───┬───┬───┬────┐┌───┬──┬──┐
      │受注No│受注日│受注先│合計金額││受注No│商品│数量│
      └───┴───┴───┴────┘└───┴──┴──┘
      ┌──┬──┐
      │商品│単価│
      └──┴──┘

[BACK] [NEXT] [メニュー]

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!