1.正規化の形
正規化は効率を高めます。
データベースを構築するにあたり、「正規化」というのが重要になってきます。なぜデータベースを構築する際「正規化」が必要になるのでしょうか。
「正規化」とはデータの重複をなくし、メンテナンス性を高めるように設計を行うことです。正規化を行うこと
により、使用中のパフォーマンスを向上させたり、データ量を最小限に抑えることができます。
通常、そのまま入力され蓄積されたデータは無駄なデータが多くなります。この状態を「非正規化」といい、このデータを効率よく「グループ化」し、パフォーマンスを向上させていくことを「正規化」といいます。
この「正規化」の方法には第1正規化、第2正規化、第3正規化の3種類の手法が用いられます。正規化の方法は、まずは第1正規化を行い、さらに第2正規化、第3正規化と進めていきます。
実際に正規化の手法を説明しましょう。
2.第1正規化
最初の正規化は空白をなくすることです。
第1正規化とはデータ上で繰り返しの部分を別のデータとして取扱い、データ全体の繰り返しをなくする方法です。第1正規化で正規化を行ったデータを「第1正規形」と言います
下図の例を基に説明していきます。
次のような販売管理データがあるとします。
上記のデータの場合、「得意先」の部分が複数存在します。この「得意先」は人によって担当している得意先の数が違ってきます。
このため、得意先が少ない場合に「空白(得意先が入力されていないデータ)が存在し、データ全体に「無駄」が発生いたします。そのため、下のように空白の項目を無くするようにデータを作り変えます。これを第1正規化といいます。
第1正規化の基本は横方向に繰り返し行っている項目を無くし、項目に「空白」を作らないのが基本となります。
▲第1正規化の方法
正規化されたデータで注目してもらいたい所があります。
上記のデータをよく見ると、「社員番号」を見ていくと得意先が分かります。「氏名」でもいいのでは?と思うかもしれませんが、同じ会社と同じ部署、同じ営業所に同姓同名がいる場合もあります。特に1000人規模の会社だとあり得ます。唯一個人の社員を特定できる項目は「社員番号」となります。
このようにある特定の項目でデータと特定できる項目を「主キー項目」と言います。
この「主キー」を基にして、他の項目が決まることを「関数従属」と言います。
関数従属は3つあり、「完全関数従属」・「部分関数従属」「推移関数従属」となります。
ここからは少し難しくなりますが、第2正規化・第3正規化はこの3つの「関数従属」がキーポイントになってきます。
3.第2正規化
第2正規化は主キーを使って正規化を行います。
関数従属の1つに「完全関数従属」があります。これは主キーが分かればすべての項目が全部分かるという関数従属になります。この「完全関数従属」を使って正規化していきましょう。
第1正規化したデータを基に、社員関係の情報と得意先の情報を二つに分けてみましょう。
図の中央ように分けることができます。
▲第2正規化の方法
このように分けた場合、社員番号部署コードを指定すると、取引先名が特定できます。
この形が「完全関数従属」を使って正規化した形になります。
さらに主キーの周辺をよく見るともう少し分けることが出来る部分がありますよね。「営業所」です。
これも分離してみましょう。図の下部のようになります。
このように主キーの一部で部分的に従属しているところを「部分従属関数」といいます。
このように第2正規化は主キーを中心にしてデータを効率よく正規化していく方法となります。
4.第3正規化
第3正規化は主キー以外の部分を正規化します。
第2正規化は「主キー」を中心としてデータを正規化していきました。しかし、まだ正規化できる部分があります。「主キー」以外のコードがある部分です。
「得意先CD」と「業種CD」です。これもまとめて正規化できます。
このように第3正規化は「主キー」以外の部分を正規化していく方法となります。
「得意先CD」と「業種CD」は「主キー」とは直接的な従属関係がありません。しかし「主キー」から得られたデータの一部に従属しています。このように「主キー」から直接でない従属関係を「推移関数従属」と言います。
この「推移関数従属」を使って正規化したものが「第3正規化」となります。
▲第3正規化の方法
今回は簡単なデータで説明していきました。実際の業務などで使用するデータはもっと複雑に絡み合い、使用用途がいろいろと出てきます。
どのデータを使用し、どんな処理方法を行うかによって正規化の方法が違ってくる場合もあります。設計をするにあたり、「どのデータを使用するか」、「どんな処理を行い、どんな結果を求めるのか」を考え、それによりデータベースの構築・正規化を行わなければなりません。そうなってくると「経験」が必要になってきますが、それ以前にまずは「知識」が必要です。
データベースの正規化の方法は完全なる「答え」がありません。設計する人や会社によって当然違ってきます。そのため「難しく」思えますが、コツさえ分かれば逆に面白い分野でもあります。