【正規化について】



このHPは正規化についてまとめたものです。




1-1 正規化とは


「正規化」とは、データベース設計手法の1つで、関連するデータ項目ごとにテーブルとして独立させる作業のことを言う。


正規化の目的はデータの一貫性を保つこと。例えば、ある項目を修正することになった場合、いろいろなテーブルにまたがった複数の同じ項目をすべて正しく直さなければ矛盾が発生するのでは、修正の手間がかかり、このましくないそれを防ぐ手段が、正規化。

以下に例をあげて、正規化の手順を説明する。



■第1正規化


以下のテーブルはある塾に通う受講生のテーブル。


「科目」「担当講師」の列に複数のデータが登録されている。この様な状態を「非正規化」という。リレーショナルデータベースのテーブルには、各フィールドに1つのデータしか入れることができないので、レコードごとに分轄し、正規化する必要がある。正規化すると、以下の様なテーブルになる。

 



「科目」「担当講師」の列には、1つしかない状態に更新された。この作業を「第1正規化」といい、これによって作成された状態を「第1正規形」という。



■第2正規化


 第1正規化によって作られた【受講生テーブル】では、「生徒名」がわかれば「高校名」と「出身中学名」もわかる。また、「担当講師」が決まれば「科目」が決まる。ある項目が決まれば自動的に他の項目も決まるのであれば、同一のテーブルで管理しない方が効率的。

なぜなら、例えばある生徒が別の高校名に転校した場合、第1正規化の受講生テーブルでは、該当する受講生の行をすべて変更する必要がある。


そこで、以下の様に表を2つに分割してみる。





新しく作成された受講生テーブルでは、「生徒名」の列がユニークになっている。また、ユニークになるためのフィールド(この場合では「生徒名」)を、ユニークキーという。


「受講生」が分かれば、表の中で行を1つに絞り込むことができる状態になっているということ。また、【受講科目テーブル】では、「生徒名」と「科目」の2つの列でユニークになっている。この場合は、「生徒名」フィールドと「科目」フィールドがユニークキーとなる。


この様にユニーキーによって、テーブルを分割する手順を「第2正規化」といい、これによってできた状態を「第2正規形」という。



■第3正規化


第2正規形によって作成された1つめのテーブルを見ると、「高校名」より「出身中学名校」が1つ決まる。そのため、「高校名」と「出身中学名校」を同時に持っているのは非効率的。そこで、以下の様にテーブルを分割してみる。




この様に1つのデータから推移的に別のデータが分かる場合、それを別の表に分割する作業を「第3正規化」と呼び、推移的に分かるデータが存在しない表を、「第3正規形」と言う。