データベースの正規化(正規形)を学ぶ!

基本情報技術者

正規化の目的

データベースの基礎として「正規化」という言葉がよく出てきます。

「正規化」って言葉を聞くだけで、正規分布=偏差値を思い出してしまい、ちょっと苦い感じがするのは私だけなのかもしれませんが(汗)、データベースの設計においては、重要な言葉です。

正規化の目的としては、

「データに矛盾や重複を生じさせてないこと」

です。

データベースの設計を最適化することで、使い易い、高性能なデータベースを作り上げることができます。参考サイトなどに記載されているメリットとでメリットは以下の通りです。

正規化のメリット
1.データ管理(保守)が容易になる
データに変更が必要な場合、無駄を排除しているため最小限の修正(マスタのみの修正)で済みます。
2.データの共通性(汎用性)向上
正規化されたデータは、複数のシステムからも利用しやすくなります。またデータ移行もスムーズに行えます。
3.データ容量の削減
無駄な項目を削除するため保存に必要なデータ(ディスク)領域を削減できます。データ処理の効率も良くなります。
正規化のデメリット
正規化ばかり意識し過ぎると「検索の内容」によっては、パフォーマンスが低下する場合もあります。
データ検索・データ更新の頻度やリレーションの階層などと、実際の業務バランスを見て正規化は行いましょう。
場合によっては意図的に正規化を行わない方が性能が良いケースもあります。

 

正規化の種類

正規化には第一正規化・第二正規化・第三正規化と段階をふみながら進んでいき、細分化されていくようですね。 また通常は、第三正規化までを行えば十分ですが第四正規化・第五正規化まで存在します。ボイスコッド正規化というものあります。

ボイスコッド正規化は「第3正規形を強化したもの」だそうですが、詳しくはwikiをご参照ください。

 

非正規形

「正規化する」ということは正規化していないものがある、ということですね。非正規形というものを理解した方が、正規化する意味が分かると思います。

例を以下の絵にしてみました。

帳票の中に繰り返し部分があるので、各レコードの長さがバラバラで、素直な2次元の表になっていません。これが、非正規形の表となります。

データベース(DBMS)では、非正規形の表は管理することができないため、正規化をしていく必要があるのですね。

非正規化の表の例

第1正規形

先ずは第1正規化に関してです。正規化された表のことをを正規形と呼びます。

第1正規形の表は繰り返しを除いたカタチです。

データベースは縦方向にデータ(レコード)を追加していく操作には適しておりますが、横方向に増えるのはNGです。そこで、伝票などで横方向に伸びていた非正規形の繰り返し部分を切り離し、縦に並べるよう(重複を無くす)にカタチを変更していくと第1正規形となります。

大事なのは横方向の長さは固定する、ということです。

第1正規化の表の例

第2正規形

第2正規形の表は従属関係を排除(分離)したカタチです。

従属関係の排除とは何か?ちょっと難しい言葉ですが、主キーが決まると、列の値が一意に定まる関係のことを「関数従属」と呼びます。何故、関係ではなく「関数」という言葉なのかは深く考えず覚えることが良いです。

そしてもう一つ「部分関数従属」という言葉も出てきます。これはあるレコードが複合キーの一部の項目だけで、列の値が一意に定まる関係のことです。第1正規形において、主キー(複合キー)からレコードを特定できますが、主キーの一部分に対して上記の関数従属する項目なので、部分関数従属と呼ぶようですね。

第2正規形とは部分関数従属している列を切り出したものです。以下にイメージを載せます。

大事なこととしては、第1正規形において明細が繰り返されるたびに重複していたデータを分離する、ということです。

第2正規化の表の例

第3正規形

最後の第3正規形は推移的関数従属関係を排除(分離)したカタチです。

またまた、難しい言葉が出てきましたが、推移的関数従属とは主キー以外の列に関数従属している列のことです。これにより、分離した表に追加情報なども付けやすくなり、管理効率が上がります。以下にイメージを載せます。

第2正規形から更に分離できる部分は分離する、ということです。

第3正規化の表の例

 

まとめ

今回はデータベースの設計において重要な「正規化」を学習しました。順番に正規化を進めることにより、効率的に管理できる表ができあがります。

部分関数従属、推移的関数従属など難しい言葉もありますが、例をいくつもみて身に付けていく方法も良いですね。レコードを重複なくしていくと、第3正規形に自然となっていくと思います!!

データベースの設計に関しては、コチラの記事でまとめてみますので、参考にしてみてください。

データベースのモデルと設計(トップダウンアプローチ、ボトムアップアプローチ)を学ぶ
データベースのモデルとは? システムを構築する上でデータベースを作成するにはモデル化という作業を行います。モデル化することを設計と置き換えても良いかと思います。 このモデル化の前段階の要件定義(どんなシステムを作るか検討する)の中で...

 

参考サイト)

タイトルとURLをコピーしました