たかぎとねこの忘備録

プログラミングに関する忘備録を自分用に残しときます。マサカリ怖い。

正規化を復習する

新しいアプリを作る際に、データベースの設計を行おうとしたのだがどこまで冗長性を排除すればいいのだっけと思ってしまったのでもう一度正規化について学んでみようと思う。

いつもお世話になっている書籍を読み返しながら要点だけメモしてみる。

達人に学ぶDB設計 徹底指南書 | ミック | 工学 | Kindleストア | Amazon

正規形とは

そもそも正規形とはデータの冗長性をなくして、一貫性と効率性を保つようにするためのデータのフォーマットのことらしい。

正規形は第一から第五まで存在するが、基本的には第三正規形まで行えれば十分とのこと。

なので第一から第三までを軽く復習していこうと思う。

第一正規形とは

ひとつのセルの中にひとつの値しか含まれない状態を第1正規形というらしい。

ちなみに、一つのセルに一つだけの値が含まれていることをスカラ値と呼ぶのだとか。

関数従属性とは

主キーが決まれば、各列を一意に決めれることを関数従属性という。

そして、この関数従属性をテーブルのすべての列が満たすように直していくことを正規化という。

ちなみに主キーを構成する列にNULLは許されないので要注意。

第二正規形とは

テーブルに存在する部分関数従属を全て無くして、完全関数従属のみのテーブルに整理することを第二正規形という。

部分関数従属とは、主キーの一部の列に対して従属する列があること。

完全関数従属とは主キーを構成するすべての列に、列が従属していること。

具体的にはテーブルの分割を行なって部分関数従属を解消していく。

無損失分解

第二正規形は可逆的な操作なので、正規化するまえのテーブルに戻すことができる。

つまり、正規化によって情報は失われないということ。これを無損失分解という。

第三正規形とは

主キー[A]に対して、ある列[B]がその主キー[A]に従属しているが、別の列の[C]もまた列[B]に従属している段階的な関数従属のことを推移的関数従属性という。

これを解消する処理を第3正規化という。

なんとなく思い出してきた気がする。。。