データベースの正規化とは?どんな流れで正規化するか、わからなくなっちゃうよ…。
本記事では、データベースの正規化について、初学者向けに徹底解説します。
正規化の役割や流れについて理解できるようになるため、この記事を最後まで読むと、自分でデータベースを正規化できるようになります。
それでは、早速学習していきましょう!
データサイエンスを本気で学ぶなら、プログラミングスクールがおすすめ
おすすめのスクールはこちらからCHECK!
正規化とは?
正規化の意味
正規化は、データベースを設計する時に考慮すべき事柄です。
つまり、正規化とは、どんな項目を入れるか、どんな表を用意するかなどを考えることです。
正規化=normalize、普通ということ。
つまり、表を普通にすることです。
正規化の目的
正規化の目的は、不整合の発生を防ぐことです。
不整合とは、下記のような状態です。
こういった不整合が起きないように、冗長性を排除することが大切です。
冗長性とは、同じ内容をあちこちに書くことだよ。
あちこちに書いてしまうと、変更が生じた時にメンテナンスする箇所が増えてしまい、不整合が生じやすくなります。
つまり、あちこちに書かなくても済むような設計をすればいいという訳です。
冗長性を排除するために、正規化を行います。
正規化の手順
正規化は、表を分割することで実現します。
正規化は、次の手順で実施します。
- 非正規形
- 第一正規形
- 第二正規形
- 第三正規形
- ボイスコッド正規形
- 第四正規形
- 第五正規形
それぞれの正規形で着目すべき関係性は、次の通りです。
通常のデータは、第三正規形まで持っていけば、冗長性は排除できます。
ですので、第三正規形までは理解しましょう。
非正規形
非正規形は、繰り返し項目を持つ表です。
上記のように、1つのレコードに複数の情報が紐付いていることを繰り返し項目といいます。
1レコード中に、明細が複数項目入っています。
DBMSではレコード単位で扱うから、繰り返し項目があるままではDBMSで扱えないね
第一正規形
第一正規形は、繰返し項目を持たない表です。
非正規形は、繰り返し部分を分割します。
第一正規形では、繰返し項目を独立させることで、データベースに格納できる状態にするんだ。
住所区分が同じ項目を繰り返しているけど、これはOKなの?
繰り返し項目とは、同じ情報を繰り返すこと(同じ事実関係を冗長に表現する)ではなく、明細データを繰り返すことです。
1レコードに複数の情報が紐付いていなければ、問題ありません。
第二正規形
第一正規化の条件を満たし、全ての非主キー属性が、主キーに完全関数従属する関数表です。
完全関数従属の説明は、こちらをご覧ください。
完全関数従属にするために、第一正規形の表において、主キー(候補キー)に関する部分的従属関数を別表に分けます。
部分関数従属とは、候補キーの一部に関数従属性(一意に値が決まる関係)が存在することだったね
でもなんで、第二正規形にする必要があるのかな?
例えば、各クラスに転入生が来た時に、テスト未受験のため主キーのテストIDがNULLになるケースがあります。
非NULL制約により、主キーはNULLになってはいけないので、第一正規形のままでは不十分ですね。
第三正規形
全ての非キー属性(主キー以外の属性)が、主キー(候補キー)に対して推移的関数従属しない状態が、第三正規形です。
つまり、非主キー属性に対する関数従属を別表を分けます。
今回の例では、クラス表の非主キー属性「担任」が決まれば、担任連絡先もわかります。
属性「担任」は主キーではないため、第二正規形では正規化されませんでしたが、こういった場合は第三正規形で対応します。
第三正規形なら、担任連絡先が変更になっても担任表だけを更新すればいいんだね!
まとめ
- DBMSで扱える状態にするために、正規化が必要
- 第一正規形は、繰返し項目がない状態
- 第二正規形は、主キーに対する関数従属がない状態(部分関数従属の排除)
- 第三世紀形は、主キー以外の属性に対する関数従属がない状態(推移的関数従属の排除)
統計学を学ぶならスクールがおすすめ
統計学を学んでデータサイエンス力を向上させるなら、データサイエンススクールに通うのがおすすめです。
データサイエンススクールをおすすめする理由は、実際にコーディングやデータ分析をしながら統計学を学べるためです。
試験勉強などのインプットと平行して、アウトプットを増やしながら学習することで、より実践で使えるスキルになるでしょう。
おすすめのデータサイエンススクールは、こちらの記事で解説しています。
あなたの目的にあったスクールを選んでみてください。