データベース

【応用情報】初心者向け!データベースの正規化について解説!

お茶ん太
お茶ん太

この記事では、データベースの正規化について、初心者にも分かりやすく図解付きで丁寧に解説しています!

第1正規化

  • 非正規形の繰返し項目を別行に独立させること

第2正規化

  • 第1正規化した表から、部分関数従属している列を切り出すこと

第3正規化

  • 第2正規化した表から、推移関数従属している列を切り出すこと

データベースに効率的にデータを入れたい

データベースを設計するとき、データの重複や矛盾をなくして、効率的に管理できるようにテーブルを整理します。これを正規化と言います。

下の表を見てみましょう。何も問題ないように見えますか?

もし、部署名が「営業部」から「営業第一部」に変わったらどうでしょう。無駄に何行も部署名を変更する必要がありますし、更新し忘れが発生するとデータに矛盾が発生してしまいます。

この部署名を部門表で管理するようにしたらどうでしょう。部門表の部署名を変更するだけで良いので、効率良くデータを管理出来ます。また、データの矛盾が発生することも無くなりますね。

一例ですが、こんな感じで、データの重複や矛盾をなくして、効率的に管理できるようにテーブルを整理することを正規化と言います。ここからは具体的な正規化の手順を解説します。

非正規形

データベースの正規化が全く行われず、1行の中に繰返し項目が存在するテーブルを非正規形と呼びます

下の表は受注番号「0001」に対して、商品「はさみ」「カッター」「のこぎり」という3つの行が繰返し存在しているため、非正規形になります。

第1正規化

第1正規化では、繰返し項目を別々の行として独立させます

下表のように、一行一行が独立して存在すれば第1正規化の完成です。

第2正規化

第2正規化を見る前にキー関数従属・部分関数従属について学びましょう。

キー

キーとは行を特定したり、他の表との関係性を持たせるための列のことです

主キー、候補キー

行を特定するために使う列を主キーと言います。生徒表の場合、生徒番号を指定すれば、どの生徒か特定できますよね。なので、生徒番号が主キーになります。ちなみに、氏名は同姓同名の可能性があるので主キーには出来ません。

表の中に主キーとなるような列が複数存在する場合もあります。
例えば、下の商品表には、会社で管理している商品番号とお客さんが注文で使うカタログ番号があり、両方とも行を特定出来ます。このように主キーとなり得る列のことを候補キーと言います。この場合、商品番号とカタログ番号が候補キーです。主キーは候補キーの中から選びます。

ちなみに、複数の列を組み合わせて主キー・候補キーとすることも出来て、それを複合キーと呼びます。下の生徒表ではクラスと出席番号を指定すれば行を特定出来るので、クラスと出席番号が複合キーです。

関数従属と部分関数従属

関数従属

関数従属とは、主キーが決まれば列の値が決まる関係性のことを言います

下の生徒表の主キーは生徒番号です。生徒番号が決まれば、氏名・クラス・住所が決まります。このような関係を関数従属と呼びます。

主キーが複合キーの場合も同じです。下表の複合キーはクラス・出席番号です。そして、クラス・出席番号が決まれば、氏名・住所が決まります。この場合も関数従属になります。

部分関数従属

主キーが複合キーになっている場合、複合キーの一部に対して関数従属の関係が成り立っていれば、その関係を部分関数従属と呼びます。複合キーの一部に対して関数従属が成り立ってるから「部分」関数従属なんですね。

下の表は受注番号と商品で複合キーになっています。
顧客IDと顧客名は受注番号によって決まるし、単価は商品によって決まります。顧客ID・顧客名・商品は複合キーの「一部」が決まれば、値が決まる項目なので、部分関数従属です。
一方、数量と納品日は受注番号と商品の両方によって決まります。複合キーの「全て」が決まれば、値が決まるので関数従属です。

第2正規化のやり方

第1正規化した表から部分関数従属している列を切り出すと第2正規化になります

先程の表で言うと、{受注番号,顧客ID,顧客名}と{商品,単価}は部分関数従属の関係でした。

なので、この部分を切り出し、別表とします。これが第2正規化です。

第3正規化

第3正規化は第2正規化した表から、主キー以外の列に関数従属している列を切り出すことです。主キー以外の列に関数従属している関係を推移関数従属と呼びます。

例えば、先程作った受注表の主キーは受注番号です。しかし、顧客名は顧客IDが決まれば、決まります。顧客IDは主キー以外の列なので、これは推移関数従属です。

さて、推移関数従属している列を切り出して、別表にしてみましょう。これで第3正規化の完了です。

正規化することによって、下の表が、

下の4つの表に分けられました。

応用情報技術者試験での出題例

令和7年度春期問26

応用情報技術者
午前試験 
令和7年度春期問26

関係を第2正規形から第3正規形に変換する手順はどれか。

ア 候補キー以外の属性から,候補キーの一部の属性に対して関数従属性がある場合,その関係を分解する。

イ 候補キー以外の属性間に関数従属性がある場合,その関係を分解する。

ウ 候補キーの一部の属性から,候補キー以外の属性への関数従属性がある場合,その関係を分解する。

エ 一つの属性に複数の値が入っている場合,単一の値になるように分解する。

正解と解説

正解は”イ”

第2正規形から第3正規形に変換するためには、推移関数従属している列を切り出す必要があります。推移関数従属は、主キー・候補キー以外の列が決まれば、列の値が決まるような関係性でした。

この説明にあっているのはイですね。