#正規化とは
データベースのデータ構造をより効率的で重複や無駄のないシンプルな構造にするための手順のことです。
正規化をしたあとのデータベースの構造を正規形
してないデータベースの構造を非正規形と言います。
正規化には順番があります。
非正規形→第一正規形→第二正規形→第三正規形・・・
##なぜ必要か
映画館の場所と、鑑賞できる作品に対する1日あたりの観客動員数を、管理するためのテーブルがあったとします。
※mobilization = 1日あたりの動員数
id | store | movie1_title | movie1_mobilization | movie2_mobilization |
---|---|---|---|---|
1 | 原宿 | 名探偵コナン | 1,000 | 1,500 |
2 | 新宿 | ハリーポッター | 2,000 | 3,000 |
3 | 渋谷 | クレヨンしんちゃん | 3,500 | 3,000 |
#####このテーブルの問題点
・重複するカラムがある
・一つのテーブルに、映画館と観客動員のエンティティが存在している
#####重複してる
movie1_titleやmovie2_titleなど、1つの映画館に対して繰り返されている。
カラム追加したいときに、 movie3_title、movie3_mobilizationとなってしまい、冗長になります
#####一つのテーブルにエンティティが混在している。
1つのテーブルに「映画館の場所情報」と「観客動員の情報」という別のエンティティが含まれてます。
この場合、場所が重複してしまうことがあり、テーブルの可読性などが下がります。
#順番
###第一正規形
同一のカラムが存在しないかつ、レコードを構成する1つ1つのマスに、値が1つずつ入っている状態。
テーブル内に重複するカラムをなくすためです。
###第三正規形
主キーに依存しているかつ非キー属性(簡単に言えば、主キーではないもの)同士の依存がない状態。
1つのテーブルに映画館の場所と観客動員のエンティティが混在しているためです。
#正規化のデメリット
正規化は手順を進めるほどに、パフォーマンスが低下します。(小さなテーブルが増えていくから)
関連するテーブルを検索するたびにSQLを実行する回数が増えて、速度が低下します。
そこで正規形は必要最低限のレベルである第三正規形で終えることが多いです。
#####今回は以上になります。最後まで読んでいただきありがとうございます!