支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • 【基本】DBの正規化について知ろう

正規化とは

正規化とは、データの重複をなくし、整合性の取れたデータの取り扱いができるようにデータベースを設計することです。正規化を行うことによって、データベースへのデータの追加・更新・削除などに伴ったデータの整合性の確認や誤った削除を防ぐことができ、メンテナンスのしやすいデータベースを作成することが可能となります。 言語化するとわかりづらい部分もあるので、後ほど例を挙げてご説明します。

正規化をするメリット

正規化をするメリットとしては以下のようなものが挙げられます。 ①汎用性の向上 データの整理がなされることで、システム間の連携や移行などが行いやすくなります。 ②容量削減 無駄な重複を削除することで、その分のデータ領域を確保でき、より多くのデータの保存が可能になります。 ③メンテナンスのしやすさ 1つのテーブルに不必要な重複しているデータを保持しないため、データに変更があった場合の修正箇所が減りメンテナンスがしやすくなります。 「正規化とは」の部分と重複している箇所もありますが、上記のメリットがあるため正規化は推奨されています。

正規化の具体例

ここまで正規化の概要とメリットについてお話ししましたが、わかりづらく感じる方もいらっしゃるかもしれないので、具体例を使用し説明いたします。 例えば、アパレル企業の顧客を管理するデータベースがあるとします。 内容としては、顧客のidや名前や年齢、顧客が購入した商品とその値段が確認できるようなものです。 このようなデータベースを正規化を使用せずに作成すると以下のようなデータベースになります。

【usersテーブル】

user_id user_name age item_name price item_name2 price2
1 田中太郎 25 デニムパンツ 4000 カラーパンツ 5000
2 山田花子 31 タイトスカート 3000 デニムパンツ 4000
3 中島次郎 26 プリントTシャツ 2000
4 佐藤明子 28 タイトスカート 3000
これが正規化されていない状態で、いわゆる「非正規化」のテーブルとなります。 非正規化のテーブルには下記のようなデメリットがあります。 ・ユーザーが存在しない商品名をデータとして登録できない ・重複しているデータが多くあること

では、上記テーブルを正規化したものを確認しましょう。 ※以下の正規化の説明は詳しく説明すると複雑な部分もあるため、初心者向けに簡単にご説明しています。

・第1正規系

【usersテーブル】

user_id user_name age item_name price
1 田中太郎 25 デニムパンツ 4000
1 田中太郎 25 カラーパンツ 5000
2 山田花子 31 タイトスカート 3000
2 山田花子 31 デニムパンツ 4000
3 中島次郎 26 プリントTシャツ 2000
4 佐藤明子 28 タイトスカート 3000
上記のようなデータベースを「第1正規系」と呼びます。ポイントとしては、非正規化のテーブルの中で繰り返しになっている部分を特定し、その部分の繰り返しをテーブルが縦方向に延びるように変更しました。 これで重複をなくし、一つのカラムに1つの値のみ設定されている状態にすることがあります。

・第2正規系

【usersテーブル】

user_id user_name age item_id
1 田中太郎 25 1
2 山田花子 31 2
3 中島次郎 26 3
4 佐藤明子 28 2
【itemsテーブル】
item_id item_name price
1 デニムパンツ 4000
2 タイトスカート 3000
3 プリントTシャツ 2000
上記で行ったことは2つあります。 ①「usersテーブル」を「usersテーブル」「itemsテーブル」の2つに分ける。 ②「usersテーブル」で商品をitem_idカラムで管理する。 非正規化であったテーブルの商品名と価格の部分を確認すると、重複している箇所があります。仮に商品名と価格に変更があり、usersテーブルの商品名と価格を全て変更しなければならなくなった場合、修正に時間がかかったりミスが起こる場合もあります。 その場合テーブルで変更が必要になるかもしれない部分をidなどで管理するようにすると、修正がしやすくなる場合があります。 その為今回は、userに関連するデータは「usersテーブル」商品に関連するデータは「itemsテーブル」に分け、2つのテーブルを紐づけるために「item_idカラム」を使用したという形になります。 また、上記のような正規化の考え方は「第2正規系」と呼ばれます。 他にも正規化の形や条件は存在するので、確認が必要です。

正規化のデメリット

ここまでデータベースを正規化するメリットを主にお話ししてきました。 基本的には汎用性が高まったりメンテナンスがしやすかったりとメリットの多い正規化ですが、場面によってはデメリットとなりうることもあります。 ・アクセス速度が低下する場合がある。 データベースの整理・分割をしすぎると、場合によっては見つけたいデータを取り出しずらくなってしまうなど、データベースの正規化をすることによってアクセス速度の低下に繋がることがあります。その場合は、アクセス速度を重視するために、あえて複雑な正規化を行わないこともあります。

まとめ

いかがでしたでしょうか? 正規化は、データベースを作成する際の重要な考え方のひとつです。 初めは難しい部分もあるかと思いますが、少しずつ慣れていきましょう!