基本情報技術者試験の鬼門であるデータベースの正規化について解説

更新日:2021年9月30日

木の置物が並んでる

データベースの取り扱いにおける難所が正規化です。正規化はデータベースを効率的に扱うために必須となる手法ですが、慣れていないと複雑でよくわかりにくいものです。正規化を理解するためには、実際に第1正規形から第3正規形までの変形の流れを確認することが一番です。

この記事では、基本情報技術者試験の対策として、正規化についての解説を行います。

目次

正規化とは

表を組み合わせてデータを管理する関係データベースにおいては、データ項目を削除したり追加したりする場合に関連する表のデータに不整合が生じることがあります。例えば、商品情報を管理するテーブルと在庫情報を管理するテーブルがあったとして、どちらにも商品名の情報があるとします。

この場合に、商品情報テーブルの商品名を勝手に修正してしまうと、在庫情報に存在する商品名との不整合が生じることになってしまいます。

このような事態を防ぐために、正規化を行います。正規化を行うと、同一の情報が複数のテーブルに重複して存在することがなくなります。

上記の例であれば、商品名は商品情報テーブルにのみ持たせるようにして、在庫情報テーブルには商品情報テーブルのID番号のみを持たせるようにします。こうすることで、商品名と在庫情報を合わせて確認したい場合、商品情報テーブルと在庫情報テーブルに共通するID番号を用いてデータを結合すれば実現することができます。

正規化の種類と流れ

正規化には、非正規形から第1正規形~第5正規形までの段階が存在します。それぞれ、データベースの重複や矛盾を取り除くことで正規化の段階を上げることができます。ただし、過剰に正規化を行うとデータ管理効率が悪くなるため、第3正規形まで正規化を行うことが一般的とされています。

基本情報技術者試験でも、第4正規形や第5正規形まで出題されることはあまりないので、第3正規形まで押さえておけば十分でしょう。

第1正規形

まずは、正規化のファーストステップである第1正規形について解説します。

第1正規形とは

第1正規形は、非正規形のテーブルから繰り返しを取り除いたものです。一つのレコードの中に同じ項目が繰り返し存在する状態を解消すると、第1正規形となります。

具体例を紹介します。

例えば、1件の発注の中で複数の商品を注文するとします。

1件の発注を1つのレコードで管理する場合、各発注で注文した商品数に応じて、レコード内に商品情報が繰り返し登録される状態となります。そこで、1件の発注を1つのレコードで管理するのではなく、商品数にレコードを分割することで、項目が繰り返し発生する状況を解消します。

非正規形から第1正規形への変換

以下では、実際のテーブルを見ながら非正規形から第1正規形への変換の変換について確認していきます。非正規形のテーブルから、テーブル中に繰り返し登場する項目を排除することで、第1正規形に変換することができます。

非正規形の表第1正規形の表

第2正規形

次に、第2正規形について解説します。

第2正規形とは

第2正規形は、第1正規形のテーブルから部分関数従属を除いたものを指します。

「部分関数従属」という難しい言葉が登場しましたが、これは要するに「あるIDが決まれば、それ以外の情報が決まる」というようなデータのことを意味します。この時、「あるID」に該当するものを主キーと呼びます。

上述した発注の例であれば、一つのレコード内に発注に関する情報と商品に関する情報が混在していました。発注に関する情報は、発注IDが決まればそれ以外の情報は確定します。また、商品に関する情報も同じように、商品IDが決まればそれ以外の情報は確定します。

一つのテーブルの中に、IDで定まる情報(=主キー)が複数混在しているため、これを解消することで第2正規形に変換することができます。

第1正規形から第2正規形への変換

第1正規形のテーブルから、あるIDにより他の項目も決まる部分についてテーブルを分けることで第2正規形に変換できます。以下の例の通り、発注IDを主キーとして決定できる項目と商品IDを主キーとして決定できる項目を分離することで、第2正規形となります。

第1正規形の表第2正規形の表

第3正規形

最後に第3正規形について解説します。

第3正規形とは

第3正規形は、第2正規形のテーブルから推移的関数従属を除いたものを指します。また難しい言葉が出てきました。「推移的関数従属」とはいったい何なのでしょうか。

推移的関数従属とは、「『あるIDが決まると決定されるID』によって確定する情報が存在する状態」を意味します。

具体例で説明しましょう。

上述の発注情報の中で、発注IDが決まると発注に関する情報が決まりました。その情報の一部に、顧客に関する情報が存在します。1回の発注に対して顧客はひとりですので、発注IDが決まれば顧客IDや顧客名は確定しますが、一方で顧客IDが決まれば顧客名も確定しますね。これが推移的関数従属です。

イメージとしては、「推移的」という言葉を意識するとよいでしょう。テーブル内に「あるIDに伴って決まるID」に関連する情報が存在している場合、それを解消することで第3正規形に変換することができます。

第2正規形から第3正規形への変換

第2正規形から第3正規形への変換について、具体例で確認しましょう。上述した発注に関するテーブルの中にある、顧客に関する情報を分離して別テーブルとすることで、第3正規形に変換することができます。

第2正規形第3正規形の表第3正規形

まとめ

この記事では、基本情報技術者試験を受けようとされている方に向けて、正規化に関する内容の解説を行いました。正規化は分かりにくく、試験対策を行う中でも避けてしまいがちな分野です。

しかしながら、この記事で説明した内容を理解しさえすれば、実は基本情報技術者試験の対策としては十分なものとなります。正規化に苦手意識を持っている方も、ぜひこれを機会に復習してみてください。

基本情報技術者コラム一覧へ戻る