【DB設計】第1正規形について調べてみた
DBの正規化とは
DBの正規化とはDB上のデータを重複なく保存するためにDBの構造やデータの持ち方を整えていくことです。
大切なことは、ゴールがDBのデータの重複をなくすということです。
正規化を行うことで、データ更新時のパフォーマンス向上やバグ削減を行えたり、DB上でのデータの矛盾を減らしたりすることができます。
ではここから、DB正規化の最初のステップである第1正規形についてご紹介してきます。
(なおここからDBはRDBを用いる前提で用語などを使用してきます)
第1正規形
考え方
RDBの主キーの役割として、「主キーが決まればそれに従属する値が決まる」という役割があります。
「この役割をしっかり守りましょうや」というのが第1正規化のルールです。
つまり、第1正規形とは「1つのフィールドには1つの値しか含まない」ということになります。
具体例
以下はシステムのユーザー情報に関するテーブルです。
ID(PK) | name | age | hobby |
1 | Tom | 20 | サッカー |
2 | Max | 23 | 空手
波紋の呼吸 |
主キーが2のときのhobbyに注目してください。
hobbyが「空手」と「波紋の呼吸」の2つの値が設定されています。
これでは、主キーを設定しているのにhobbyの値が決まりません。
これが第1正規形に反している状態になります。
修正1
ではこれを第1正規形に合うように修正していきます。
まず考えられるのが、レコードを分けることです。
つまり以下のように複数の値があったhobbyを分けてしまいましょうということです。
ID(PK) | name | age | hobby |
1 | Tom | 20 | サッカー |
2 | Max | 23 | 空手 |
2 | Max | 23 | 波紋の呼吸 |
しかしこれでは、主キーが重複してしまっています。
よって、修正方法としては誤っています。
修正2
結論、こちらの修正方法が第1正規形的には正しい修正方法になります。
hobby用のテーブルをもう一つ作成します。
user_id(PK)(FK) | hobby(PK) |
1 | サッカー |
2 | 空手 |
2 | 波紋の呼吸 |
ユーザーIDとhobbyを主キーとしたテーブルを作成し、ユーザーIDを外部キーとすることで「1つのフィールドには1つの値しか含まない」という第1正規化のルールを守ることができます。
以上!!!!!!!