正規化とは

はじめに

今回の記事では正規化について書いていきます。

では、はじめに正規化とはなんのためのするのでしょうか?
正規化を行うことにより情報の重複をなくし整合的にデータを取り扱えるようするために行います。

ただし正規化しすぎると逆に効率が悪くなる場合があるので注意が必要です。

正規化の手順

正規化をこなうための手順が以下になります。

  1. 第1正規形
  2. 第2正規形
  3. 第3正規形
  4. ボイスコッド正規形
  5. 第4正規形
  6. 第5正規形

理論的には第5正規形までありますが、基本的には第3正規形までで十分と言われています。
なので今回は第3正規形まで説明していきます。

非正規形

正規化を説明するために今回は受注伝票の例を挙げます。
受注表を以下に示します。
f:id:setomoki:20170228145639p:plain

この受注表の項目を箇条書きにすると以下になります。

  • 注文番号
  • 日付
  • 顧客番号
  • 顧客名
  • 顧客住所
  • 顧客電話番号
  • 商品番号
  • 商品名
  • 単価
  • 受注数
  • 金額
  • 合計金額

この箇条書きした項目を整理していき正規化をしていきます。

第1正規形

はじめに箇条書きのものを表にします。
f:id:setomoki:20170228153829p:plain
この時に「金額」や「合計金額」は他のデータから計算できるので取り除きます。

この表から第1正規形にするために、
繰り返されている情報を別のテーブルに分けます。
テーブルを分けると以下のようになります。
f:id:setomoki:20170228160033p:plain
この時に注文明細と注文情報を関連付けるために注文明細のテーブルに注文番号をいれます。

第2正規形

第2正規形にするためには主キーの一部によって一意に特定できるものをわけていきます。
つまりは、複数の主キーをもつテーブルが対象になるということです。

注文明細のテーブルの主キーは「注文番号」と「商品番号」です。
この時に「商品番号」が決まれば「商品名」と「単価」が決まります。
「注文番号」と「商品番号」が決まれば「受注数」が決まります。
このように主キーの一部によって決まる項目を別のテーブルにします。
第2正規化を行うと以下のテーブルになります。
f:id:setomoki:20170228160946p:plain

注文情報のテーブルは主キーが「注文番号」のみになるので変更はありません。

第3正規形

第3正規化にするためには主キー以外に関係をもっているものを分けていきます。
注文情報のテーブルの主キーは「注文番号」ですが、
「顧客番号」が決まれば「顧客名」「顧客住所」」「顧客電話番号」が決まります。

このように主キー以外のもので一意に決めれるものをわけます。
第3正規化を行うと以下のテーブルになります。
f:id:setomoki:20170228161736p:plain

その他のテーブルは主キー以外に関係があるものがないのでここまでで第3正規形になります。
ここまでの全てのテーブルをまとめると以下になります。
f:id:setomoki:20170228161928p:plain

最後に

今回は正規化について簡単に説明していきました。
ボイスコッド正規形からは今回は説明しませんのでどのようなものか気になる方は各自で調べてみてください。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
この記事はほぼサーバなどを触ったことがない人物が学んだことを整理するために書いていますので間違いなどが多々あると思います。間違いなどありましたら是非コメントなどで教えていただけると幸いです。