データベースの正規化について解説

データベースの正規化についてプログラミング入門

正規化とは

データの重複をなくし、矛盾が発生しないように、データベースのテーブルを設計すること。

正規化する前の状態の事を、非正規化と言います。

非正規化とは、「1行のデータに、複数の繰り返し項目が存在するテーブル」を指します。

まず、非正規化・正規化した図を見てみましょう!

例として、ある会社のエンジニアのプログラミング実績をデータ化することとします。

【非正規化】

非正規化の場合、青い部分が繰り返し項目となっていることが分かります。

また、行によっては、空白が存在していることがわかりますね。

【正規化】

正規化した場合、テーブルの数は増えていますが、データに無駄がないことが分かります。

正規化のメリット

データの追加・更新・削除する時、不整合が起きるのを防ぐことができます。

非正規化の状態で、データの追加・更新・削除をしてしまった場合、漏れが発生してしまう場合があります。

例えば、先ほどの非正規化の図を参考に、考えてみましょう!

言語名の「PHP」を「php」に変更する事にします。

非正規化の場合、修正すべき該当の箇所が2箇所(赤い部分)あります。

ですが、修正が漏れてしまい、1箇所しか変更しなかった場合、あとあとデータの集計をする際に、集計が合わなくなってしまう場合が発生してしまいます。。。

ちなみに、正規化された状態だと、1箇所で済みますね。

正規化の方法

今回は、以下について解説します。

  • 第1正規化
  • 第2正規化
  • 第3正規化

第1正規化

第1正規化とは、「繰り返される項目を別のデータとして管理する」です。

非正規化 → 第1正規化 します。

非正規化
第1正規化

非正規化の青い部分を別データとして管理します。

空白になっている箇所はデータが存在しないので、データとして管理しません。

第2正規化

第2正規化とは、「 ある情報が定まれば、それに従属して定まる情報を別のテーブルとして管理する」です。

まず、第1正規化したデータを確認します。

第1正規化

従業員コードが分かれば、「従業員名」「年齢」が分かります。

同じく、言語コードが分かれば、「言語名」「言語区分コード」「言語区分名」が分かります。

それらをふまえて、第1正規化 → 第2正規化 します。

第2正規化

言語実績テーブルとは別に、従業員テーブル、言語テーブルを追加しました。

第3正規化

第3正規化とは、「 主キー以外の項目で、それに従属して定まる情報を別のテーブルとして管理する」です。

第2正規化

ここまでで、主キーは従業員コード、言語コードに定まりました。

それ以外の項目では、「言語区分コード」がそれにあたります。

それでは、第3正規化を行ってみましょう!

第3正規化

第3正規化では、言語区分テーブルを作成しました。

まとめ

今回は、データベースの正規化について解説しました。

最後まで読んでいただきありがとうございましたm(_ _)m