【データベース】テーブルの正規化:メリットとデメリット
2022.06.19 /
本記事ではデータベース設計で必ず行う、テーブルの正規化をするメリットとデメリットについて詳しく解説していきます。
リレーショナルデータベースの論理設計において、正規化(正規形)はとても重要な概念です。データベースについて詳しくは以下記事をご参照ください。
データベースとは?機能と特徴(SQLite、MySQL、TinyDB)
データベースを利用するアプリケーションで、正規化を行っていないデータベースを利用することはほぼないと言えます。
正規化のメリットとデメリットをしっかりと理解し、テーブルに正規化を行う意味を理解してデータベース設計ができるようになりましょう。
データベースの正規化
正規化とは
データベースの正規化とは保存されているデータの整合性を高め、冗長性を排除し、メンテナンス性を向上させるデータ形式のことです。
つまりデータベースのデータを異常(不都合・不整合)なく保持するための手法です。
正規化を知らずにデータベース設計を行うと、様々な問題が発生してしまうデータベースになってしまいます。例えば一つの情報が複数のテーブルに存在してしまったり(冗長性)、一貫性のないテーブルを作成してしまうことがあります(非一貫性)。
データの一貫性を保持し、整合性のあるデータベースを作成するために正規化は必須の知識となります。
正規化することによりテーブルは複数に分かれることが常です。正規化によって分解したテーブルは、基本的に正規化前の状態に完全に戻すことができます。これを「無損失分解」と呼びます。
正規化の種類
正規化にはレベルが存在します。第1正規形から第5正規形まで存在します。数値が増えるほど正規化のレベルが上がっていきます。ほかにもボイスゴッド正規形なども存在します。
- 第1正規形:一つのセルには一つの値しか含まないようにする
- 第2正規形:部分関数従属をなくし、完全関数従属のみにする
- 第3正規形:推移的関数従属をなくす
基本的には第3正規形までテーブルを正規化するのが一般的です。
正規化のメリット
テーブルに正規化を実行するメリットは以下のようなものが上げられます。
- データを分割することでデータ登録および更新時の異常(不都合・不整合)を防止
- データの管理が簡単になる
- データを変更する際に最小限の修正で済む
- テーブルにデータを登録できないケースをなくす
- テーブルの意味が明確になる
正規化で最も重要なことは、データの整合性を保つということです。データベースではデータが誤っているということは許容されません。データの誤りを少しでもなくすために、正規化は行われているという理解で問題ありません。
次項よりメリットについて詳しく解説していきます。ここでは以下に示す非正規形のテーブル(社員テーブル)を利用します。
会社コード(主キー) | 会社名 | 社員ID(主キー) | 社員名 | 年齢 |
---|---|---|---|---|
A001 | OFFICE | 0001 | 笠原 | 39 |
A001 | OFFICE | 0002 | 木村 | 29 |
B001 | FIVE | 0029 | 戸田 | 24 |
C001 | FOUR | 0004 | 川崎 | 59 |
上記社員テーブルを正規化すると以下のように社員テーブルと会社テーブルに分かれます。
会社コード(主キー) | 社員ID(主キー) | 社員名 | 年齢 |
---|---|---|---|
A001 | 0001 | 笠原 | 39 |
A001 | 0002 | 木村 | 29 |
B001 | 0029 | 戸田 | 24 |
C001 | 0004 | 川崎 | 59 |
会社コード(主キー) | 会社名 |
---|---|
A001 | OFFICE |
B001 | FIVE |
C001 | FOUR |
これらを確認しながら次項からのメリットの解説を読んでください。
データ登録および更新時の不都合・不整合を防止
非正規形のテーブルでは会社コードと会社名の組み合わせがレコードによって異なってしまう可能性を秘めています。
例えば、あるレコードでは会社コードA001、会社名をOFFICEとして登録しているのに、別のレコードでは会社コードA001、会社名をOFFICE54と異なって登録することができてしまいます。
会社コードと会社名が異なると不都合があるため、テーブルを分けることでこの問題が発生することを防ぎます。
データを変更する際に最小限の修正で済む
データベースを長期間運用していると、途中でデータが変更することがあります。例えば会社名がOFFICEからOFFICE54に変更されることもあります。
そうなった場合、非正規形のテーブルでは会社名OFFICEのレコードを一つ一つ変更しなければなりません。これは非常に面倒ですよね。
正規化していれば会社テーブルのみを変更することですべてのレコードに反映されるため、修正が最小限の変更で済むようになります。
テーブルにデータを登録できないケースをなくす
非正規形のテーブルではデータを登録できないケースが多々発生します。例えば会社コードZ001の会社があるとします。このとき非正規形のテーブルでは、その会社の社員情報がわからなければZ001をテーブルに登録することはできません。
これが正規化された状態であれば、社員情報がわからなくても会社テーブルにZ001を登録することができます。
正規化のデメリット
テーブルを正規化するメリットがあるように、もちろんデメリットもあります。
正規化による大きなデメリットとしては、テーブル数が増えることで操作時にテーブル結合(join)が必要になり、SQLのパフォーマンスが悪化するということです。
結合はSQLの処理の中でも重い処理なので、結合が多くなると速度が遅くなってしまいます。システムによっては許容できないほどのパフォーマンス劣化をもたらす場合もあります。
正規化すればデータの整合性は向上するが、パフォーマンスは悪化します。非正規化すればパフォーマンスが良くなるが、データの不整合が発生しやすくなります。このようなトレードオフの関係が正規化と非正規化にはあります。
このようなデメリットが正規化にはありますが、基本的にテーブルは正規化すべきだと考えています。非正規化はパフォーマンスを向上させるための最終手段として考えておいてください。
まとめ
本記事「【データベース】テーブルの正規化:メリットとデメリット」はいかがでしたか。
なんとなく正規化を行うのではなく、その意味を理解して正規化を行うようにしましょう。