今回は、無駄のないデータベースを設計するための正規化について解説したいと思います。
データベースの正規化とは
正規化とは、データベースのデータ構造をより効率的で、重複や無駄のないシンプルな構造にするための手順です。
正規化されたデータベースを正規形と呼びます。
正規化には順番があり、非正規形から第一正規形、第二正規形、第三正規形という段階を踏みます。
正規化の目的(メリット)
正規化の目的は主に2つです。
- エンティティの独立性を高める
- データの整合性を高める
正規化のデメリット
正規化を進めれば進めるほど小さなテーブルが増えてしまい、パフォーマンスが低下してしまいます。
テーブルが増えれば関連するテーブルを検索するたびにSQLを実行する回数が増え、速度が低下するからです。
正規化の手順
第一正規形
第一正規形は重複するカラムをなくすことです。
例を見ていきましょう。
田中さんと鈴木さんがそれぞれ食べたフルーツのテーブルを作成しました。
| id | name | fruits1 | fruits2 | fruits3 |
| 1 | 田中 | banana | orange | apple |
| 2 | 鈴木 | kiwi | grape | orange |
このテーブルを第一正規形で直していきましょう。
改めて記述すると、第一正規形は重複するカラムをなくすことです。
直すと以下のようになります。
| id | name | fruits |
| 1 | 田中 | banana |
| 1 | 田中 | orange |
| 1 | 田中 | apple |
| 2 | 鈴木 | kiwi |
| 2 | 鈴木 | grape |
| 2 | 鈴木 | cherry |
第三正規形
第二正規形と第三正規形はとても似ているので、第二正規形は割愛して第三正規形を説明したいと思います。
第三正規形は属性ごとにテーブルを分けることです。
第一正規形まで直した以下のテーブルを第三正規形に直しましょう。
| id | name | fruits |
| 1 | 田中 | banana |
| 1 | 田中 | orange |
| 1 | 田中 | apple |
| 2 | 鈴木 | kiwi |
| 2 | 鈴木 | grape |
| 2 | 鈴木 | cherry |
第三正規形まで直すと以下のようなテーブルになります。
人テーブル
| id | name |
| 1 | 田中 |
| 2 | 鈴木 |
フルーツテーブル
| fruits | name_id |
| banana | 1 |
| orange | 1 |
| apple | 1 |
| kiwi | 2 |
| grape | 2 |
| cherry | 2_ |
この先にも第四正規形・第五正規形がありますが、先述した通り、正規化しすぎるとパフォーマンスが低下するというデメリットが大きくなるので、第三正規形までが一般的です。
今回は無駄のないデータベースを設計するための正規化という技術を学びました。
データベース設計は初めは難しいと感じますが、慣れれば簡単です。
諦めずに頑張りましょう!










