【IT用語】正規化

正規化(Normalization)とは、データベースの設計において、データの冗長性を減らし、整合性を保つための手法です。データの重複をなくし、データの更新や削除が容易になるように、テーブルを適切に分割するのが主な目的です。


身近な例:学生の成績管理

学校の成績を管理するシステムを考えてみましょう。
初めに、非正規(正規化していない)データを見てみます。

❌ 正規化されていないデータ

学生ID名前科目1成績1科目2成績2科目3成績3
101田中数学80英語85理科90
102佐藤数学75英語80理科78

問題点

  1. データの冗長性(重複)
    • 同じ「数学」「英語」などの科目情報が何度も登場する。
  2. 新しい科目を追加しにくい
    • 例えば「歴史」という科目を追加したい場合、新しい列を追加しなければならない。
  3. 検索や更新が難しい
    • ある学生の特定の科目の成績だけを更新するのが面倒。

第一正規形(1NF):繰り返しを排除

「科目1」「科目2」などの繰り返しフィールドを排除し、1つのデータ(レコード)には1つの値だけを持つようにします。

第一正規形(1NF)

学生ID名前科目成績
101田中数学80
101田中英語85
101田中理科90
102佐藤数学75
102佐藤英語80
102佐藤理科78

🔹 改善点

  • 新しい科目を追加するのが簡単(行を追加するだけ)。
  • 科目ごとに成績を検索・更新しやすい。

第二正規形(2NF):部分関数従属を排除

1NFではまだ**「名前」列が冗長**です。学生IDが分かれば、名前も分かるため、「学生情報」と「成績情報」を分けます。

第二正規形(2NF)

学生情報テーブル

学生ID名前
101田中
102佐藤

成績情報テーブル

学生ID科目成績
101数学80
101英語85
101理科90
102数学75
102英語80
102理科78

🔹 改善点

  • 名前のデータが不要な重複を持たない。
  • 学生が新たな科目を履修しても、成績情報テーブルに追加するだけ。

第三正規形(3NF):推移的関数従属を排除

もし「科目テーブル」も別に分けると、さらに効率的になります。

第三正規形(3NF)

学生情報テーブル

学生ID名前
101田中
102佐藤

科目情報テーブル

科目ID科目名
1数学
2英語
3理科

成績情報テーブル

学生ID科目ID成績
101180
101285
101390
102175
102280
102378

🔹 改善点

  • 科目情報も統一できるため、例えば「数学」の名前を「算数」に変更したい場合、1か所修正すれば全てのデータが変更される。

まとめ

段階内容
1NF繰り返しを排除1レコード1値にする
2NF部分関数従属を排除学生情報と成績情報を分ける
3NF推移的関数従属を排除科目情報を分ける

正規化を進めるとデータの冗長性が減り、更新や検索がしやすくなります。

※●NF:● Normal Form