Rails

データベース設計の正規化とは?メリット・デメリットも解説!

MySQL

 

今回は、無駄のないデータベースを設計するための正規化について解説したいと思います。

よし
よし
正規化にも何パターンかあるよ!

データベースの正規化とは

正規化とは、データベースのデータ構造をより効率的で、重複や無駄のないシンプルな構造にするための手順です。

正規化されたデータベースを正規形と呼びます。

正規化には順番があり、非正規形から第一正規形、第二正規形、第三正規形という段階を踏みます。

よし
よし
シンプルに言うと、効率よくデータを使うための整理って所かな。

正規化の目的(メリット)

正規化の目的は主に2つです。

  • エンティティの独立性を高める
  • データの整合性を高める
よし
よし
エンティティは、テーブルのカラムと同じことだよ!

正規化のデメリット

正規化を進めれば進めるほど小さなテーブルが増えてしまい、パフォーマンスが低下してしまいます。

テーブルが増えれば関連するテーブルを検索するたびにSQLを実行する回数が増え、速度が低下するからです。

正規化の手順

第一正規形

第一正規形は重複するカラムをなくすことです。

例を見ていきましょう。

田中さんと鈴木さんがそれぞれ食べたフルーツのテーブルを作成しました。

idnamefruits1fruits2fruits3
1田中bananaorangeapple
2鈴木kiwigrapeorange

 

このテーブルを第一正規形で直していきましょう。

改めて記述すると、第一正規形は重複するカラムをなくすことです。

直すと以下のようになります。

idnamefruits
1田中banana
1田中orange
1田中apple
2鈴木kiwi
2鈴木grape
2鈴木cherry

 

第三正規形

第二正規形と第三正規形はとても似ているので、第二正規形は割愛して第三正規形を説明したいと思います。

第三正規形は属性ごとにテーブルを分けることです。

 

第一正規形まで直した以下のテーブルを第三正規形に直しましょう。

idnamefruits
1田中banana
1田中orange
1田中apple
2鈴木kiwi
2鈴木grape
2鈴木cherry

 

第三正規形まで直すと以下のようなテーブルになります。

人テーブル

idname
1田中
2鈴木

フルーツテーブル

fruitsname_id
banana1
orange1
apple1
kiwi2
grape2
cherry2_

 

この先にも第四正規形・第五正規形がありますが、先述した通り、正規化しすぎるとパフォーマンスが低下するというデメリットが大きくなるので、第三正規形までが一般的です。

 

 

今回は無駄のないデータベースを設計するための正規化という技術を学びました。

データベース設計は初めは難しいと感じますが、慣れれば簡単です。

諦めずに頑張りましょう!