ホーム > MySQL > 正規化

MySQL -正規化-

正規化とは

データを効率良く管理できるように、複数のテーブルに分割することです。

正規化

正規化するテーブルの例


第1正規化

今回のテーブルの第1正規化例

リレーショナルデータベースでは、テーブル1つの行/列には、1つの値を入れることが必要であり、導出列 (他の列の値から計算で求められる列)は、ディスクの容量を無駄に消費するので取り除きます。


  1. 導出列(他の列の値から計算で求められる列)を取り除きます
     

  2. テーブルの1つ行/列が1つの値になるようにテーブルに分割します。
     


第2正規化

主キーに完全関数従属している列と部分関数従属している列を別々のテーブルに分けます。

関数従属とは
ある列(又は列の組み合わせ)によって別の列の値が決まること
完全関数従属とは
ある列が複数の列に関数従属し、かつそのうちの一部のれつだけには関数従属しないこと
(複数の列セットである列の値が決まること)
部分関数従属とは
ある列が複数の列に関数従属しているように見えて、実際は、そのうちの一部の列にしか関数従属していないこと


今回のテーブルの第2正規化例

  • メインテーブルは、第1正規化の時点ですでに第2正規化になっている。
    (主キーが列の組み合わせではないので、完全関数従属と部分関数従属に分割できない)
  • 主キーが組み合わせキーであるサブテーブルを分割する



第3正規化

第2正規化を元に、主キーと推移的に関数従属する列を別のテーブルに分けます。

推移的に関数従属するとは
主キーとは直接的に関数従属になっていないが、間接的に関数従属になっていること
 
 
 


今回のテーブルの第3正規化例

  • 主キーから見て、直接的に関数従属している列と間接的に従属している列のテーブルに分ける
  • 各テーブルを紐ずけ為のキーを含める
  • サブテーブルは、すでに第3正規形になっている。

その他

第3正規形を厳密にした正規形として「ボイス・コッド正規形」があります。
また、「第4正規形」「第5正規形」もあります。

一般的なデータベースでは、第3正規形まで正規化すれば十分なことが多いです。

正規化はなるべく行うべきですが、常に完全にしなければならない訳ではありません。
データベースの運用に応じて正規化を崩すのも、テクニックの1つです。