
データベースの正規化理論について説明します。
正規化とは,データの冗長性を少なくして,関連性の強いデータ項目(属性)郡をまとめて,一事実一箇所(1 fact in 1 place)になるようにすることです。
初級シスアド,二種受験の人は第3正規形まで理解して下さい。データベーススペシャリストの方は,これがデータベースの中心理論ですので,極めて下さい。その他の高度の人は,全体の構造を理解して詳細は調べ方のみを知っていればいいでしょう。
ある学習塾で,生徒がどの教科をどの先生に習うかを整理してます。
一覧表にします。
|
生徒 |
中学 |
教室 |
科目 |
先生 |
|
太郎 |
東中 |
東教室 |
国語,社会,数学 |
近藤先生(国語),桐山先生(社会),後藤先生(数学) |
|
花子 |
西中 |
西教室 |
英語,社会,数学 |
立川先生(英語),桐山先生(社会),太田先生(数学) |
|
一郎 |
東中 |
東教室 |
数学 |
後藤先生(数学) |
上記の一覧表から,各枠に複数の事柄をいれるのをやめます。そうすると次のようになります。
|
生徒 |
中学 |
教室 |
科目 |
先生 |
|
太郎 |
東中 |
東教室 |
国語 |
近藤先生 |
|
太郎 |
東中 |
東教室 |
社会 |
桐山先生 |
|
太郎 |
東中 |
東教室 |
数学 |
後藤先生 |
|
花子 |
西中 |
西教室 |
英語 |
立川先生 |
|
花子 |
西中 |
西教室 |
社会 |
桐山先生 |
|
花子 |
西中 |
西教室 |
数学 |
太田先生 |
|
一郎 |
東中 |
東教室 |
数学 |
後藤先生 |
これが,第1正規形です。先生の列に注目して下さい。一つの枠内に配列(繰り返し)をいれないことが第1正規形です。ファイルを設計するときに,この規則だけは守るといいです。
上記の第1正規形のテーブルのうち,生徒から中学が決まります。また,生徒と科目から先生が決まります。この表のキーは,生徒+科目です。よって,中学はこのキーの一部,生徒によって決まります。キーと項目との関係で,複合キーから決まるもの,複合キーの一部がキーとなって決まるものに分解してできたものを第2正規形といいます。複合したキー(生徒+中学)に対応するものだけの表と,生徒に対応したものだけの表に分解します。キーとの対応で分割されたものが第2正規形です。
生徒表(第2正規形)
|
生徒 |
中学 |
教室 |
|
太郎 |
東中 |
東教室 |
|
花子 |
西中 |
西教室 |
|
一郎 |
東中 |
東教室 |
生徒受講表(第3正規形)
|
生徒 |
科目 |
先生 |
|
太郎 |
国語 |
近藤先生 |
|
太郎 |
社会 |
桐山先生 |
|
太郎 |
数学 |
後藤先生 |
|
花子 |
英語 |
立川先生 |
|
花子 |
社会 |
桐山先生 |
|
花子 |
数学 |
太田先生 |
|
一郎 |
数学 |
後藤先生 |
生徒表(第2正規形)において,生徒から中学が決まります。中学から教室が決まります。教室は,生徒からみると,推移的に決まるといいます。推移的に決まる項目考慮して分割すると第3正規形です。キーから二次的に決まるもの(推移的関数従属)を取り除いたものが第3正規形です。例の場合だと,第5正規形まで到達してしまいます。
生徒台帳(第5正規形)
|
生徒 |
中学 |
|
太郎 |
東中 |
|
花子 |
西中 |
|
一郎 |
東中 |
中学台帳(第5正規形)
|
中学 |
教室 |
|
東中 |
東教室 |
|
西中 |
西教室 |
下記の生徒受講表は,生徒+科目から先生が決まります。また,生徒+先生から科目が決まります。さらに,先生から科目が決まります。これを分割するとボイス・コッド正規形です。このようにキーとそれ以外の項目の関係が一方方向でないとき,それを取り除くとボイス・コッド正規形といいます。上記の第5正規形もボイス・コッド正規形です。
生徒受講表(第3正規形)
|
生徒 |
科目 |
先生 |
|
太郎 |
国語 |
近藤先生 |
|
太郎 |
社会 |
桐山先生 |
|
太郎 |
数学 |
後藤先生 |
|
花子 |
英語 |
立川先生 |
|
花子 |
社会 |
桐山先生 |
|
花子 |
数学 |
太田先生 |
|
一郎 |
数学 |
後藤先生 |
この表をボイス・コッドの正規形にすると次の表ができます。この場合は,第5正規形まで到達します。
受講表(第5正規形)
|
生徒 |
先生 |
|
太郎 |
近藤先生 |
|
太郎 |
桐山先生 |
|
太郎 |
後藤先生 |
|
花子 |
立川先生 |
|
花子 |
桐山先生 |
|
花子 |
太田先生 |
|
一郎 |
後藤先生 |
先生台帳(第5正規形)
|
先生 |
科目 |
|
近藤先生 |
国語 |
|
桐山先生 |
社会 |
|
後藤先生 |
数学 |
|
立川先生 |
英語 |
|
太田先生 |
数学 |
(後日追加予定)キー以外で多値従属性を表現しない
自明でない結合従属性を取り除く
(後日追加予定)