はじめに
この記事では
リレーショナルデータベース(以下、DB)技術のあんなことや
こんなことについてまとめた記事です。
ベストプラクティスや間違いがあれば
書き直していく予定です。
今回は「正規化」についてまとめてみました。
キッカケ
かれこれ3年近くお客様のDBを触っていますが
扱っているDBについて
どのような考えで設計されているのか
たまに疑問に思うことがあるので
DBのあるべき姿について学びたいと思うようになりました。
正規化って何ぞや
要するに
・あるべき姿を追い求めること
・扱う上で効率良いデータに仕立て上げること(異状な形ではないこと)
※「異常」ではなく「異状」であることに注目
データを更新する際に発生する異常を「更新異状」という
正規化の基本
英語でカッコよく言うと
「1 fact 1 place」
1か所1事実
データを正常に扱う上では正規化は欠かせないが
正規化というのはテーブルの分解を行うということ
分解するということは
参照するときには結合しなければならない為
処理が遅くなる可能性もある。
そういったことも踏まえて
あえて正規化を行わないこともある。
正規化が必要ないモノ(データの更新を行わないモノ)
アクセスログといったデータを追記するだけのモノ
データウェアハウス
蓄積させていくものに関しては更新を行わない為
正規化は必要ありません。
正規化が必要ないモノ(データの履歴を残すモノ)
社員の異動履歴や変更履歴など
履歴として残すモノは更新する必要がない為
正規化は必要ありません。
正規化が必要ないモノ(高速化が必要なモノ)
更新異状は2の次で
スピードが優先される場合は
更新スピードに影響が出るため
正規化の必要はありません。
※ スピード優先でもデータに整合性を取りたい場合は
別の方法で正規化を検討する必要があります。
正規形の種類 (全6種類)
非正規形
第1正規形
第2正規形
第3正規形
第4正規形
第5正規形
第4正規形や第5正規形は「ボイスコット正規形」というそうです。
※復習で初めて知りました。
基本的には第3正規形までできれば
かなりきれいなDBになると思う。
(第3までしか正規化したことないのでそう思うだけ)
まとめ
更新異状を起こさない為には正規化が大事であり
正規化というのは必ずしも必要なモノではない。
更新時異状が起こりやすいと考えられるテーブルに関しては
正規化を検討すべきである。
正規化は全部で6種類存在するが
基本的に第3正規形までを扱えれば良い。
正規化が必要ないデータもあることに注意すること