関係データベースの正規化|つまづきやすいポイントと攻略法 徹底解説!


2025-11-26 更新

この連載は、基本情報技術者試験の受験者を対象としたものです。
毎回1つのテーマにしぼって、多くの受験者がつまづきやすいポイントと攻略法を解説します。

今回のテーマは関係データベースの正規化です。

関係データベースの正規化とは?

関係データベースは、表形式でデータを格納します。
関係データベースの正規化(normalization)とは、表を作成する際に、無駄や問題が生じないようにすることです。

理論上、無駄や問題が生じない状態の表を「第3正規形」と呼びます。
第3があるのですから、第2や第1などもあります。これらに関しては、後で解説します。
第3正規形の表は、「主キー(表のレコードを一意に識別できるユニークな値を持つ列)」があって、その他のすべての列が主キーに従属する(主キーによって特定できる)表です。

たとえば、図1に示した「社員表」は、「社員番号」が主キーであり、その他の「氏名」「性別」「生年月日」「部署番号」が主キーに従属しているので、第3正規形です。
この記事では、列名の下に下線を引くことで、主キーであることを示します。

【図1】すべての列が主キーに従属していれば第3正規形である

社員表

社員番号  氏名    性別   生年月日 部署番号

それに対して、図2に示した「社員表」には、「社員番号」に従属しない「商品名」があるので、第3正規形ではありません。
このように説明すると難しく感じるかもしれません。
簡単に言えば、「社員表には、社員に関する情報だけがある」という状態になっていれば第3正規形です。

【図2】主キーに従属していない列があるので第3正規形ではない

社員表

社員番号  氏名    性別   生年月日 部署番号 商品名  

非正規形と第1正規形

先ほど説明したように、「社員表には、社員に関する情報だけがある」という状態になっていれば、第3正規形なのですが、そうなっていない状態が、理論上「非正規形」「第1正規形」「第2正規形」に分類されています。

●非正規形

非正規形とは、同じ情報の列が繰り返されている(複数ある)状態です。
たとえば、図3に示した「社員表」には、「所有資格」という列が2つあります。
これが、繰り返しであり、この「社員表」は、繰り返しがあるので非正規形です。

【図3】繰り返しがあるので非正規形である

社員表

社員番号  氏名    性別   生年月日 所有資格 所有資格

●第1正規形

理論上、繰り返しは、よろしくないことです。
繰り返しを排除すると、正規化のステップが1つ上がって第1正規形になります。
図4は、図3の「社員表」の「所有資格」を1つだけにして、繰り返しを排除したものです。

【図4】繰り返しを排除すると第1正規形になる

社員表

社員番号  氏名    性別   生年月日 所有資格

部分従属性と第2正規形

第2正規形とは、第1正規形(繰り返しがない)を満たし、さらに部分従属性を排除した状態です。
部分従属性とは、複合キー(複数の列をセットにして主キーとしたもの)の一部分に従属した列があることです。

●部分従属性

たとえば、図5の「社員表」では、「社員番号」と「部署番号」が複合キーになっています。
「所属年数(社員が部署に所属した年数)」は、「社員番号」と「部署番号」の両方がそろって特定できるものですが、「氏名」は「社員番号」つまり複合キーの一部分で特定できます。これが、部分従属性です。

【図5】部分従属性がある表の例

社員表

社員番号 部署番号  氏名   所属年数

●第2正規形

理論上、部分従属性は、よろしくないことです。

部分従属性を排除すると、正規化のステップが1つ上がって第2正規形になります。
部分従属性を排除するには、表を分割することになります。

図5の「社員表」では、「社員番号」で「氏名」が特定できるのですから、図6のように、「社員番号」を主キーとして「氏名」という列がある「社員表」と、「社員番号」と「部署番号」を複合キーとして「所属年数」という列がある「所属年数表」に分割します。

【図6】表を分割して部分従属性を排除する

社員表

社員番号  氏名 

所属年数表

社員番号 部署番号 所属年数 

推移従属性と第3正規形

第3正規形とは、第2正規形(繰り返しがない、部分従属性がない)を満たし、さらに推移従属性を排除した状態です。
推移従属性とは、主キーではない列に従属した列があることです。

●推移従属性

たとえば、図7の「社員表」は、「社員番号」が主キーですが、「部署名」は、主キーではない「部署番号」で特定できます。

これが、推移従属性です。
「社員番号」で「部署番号」が特定でき、「部署番号」から移り行く(推移する)ように「部署名」を特定できるので、推移従属性と呼ぶのです。

【図7】推移従属性がある表の例

社員表

社員番号  氏名    性別   生年月日 部署番号 部署名 

●第3正規形

理論上、推移従属性は、よろしくないことです。
推移従属性を排除すると、正規化のステップが1つ上がって第3正規形になります。

推移従属性を排除するには、表を分割することになります。
図7の「社員表」では、「部署番号」で「部署名」が特定できるのですから、図8のように、「社員番号」を主キーとして「氏名」「性別」「生年月日」「部署番号」という列がある「社員表」と、「部署番号」を主キーとして「部署名」という列がある「部署表」に分割します。

【図8】表を分割して推移従属性を排除する

社員表

社員番号  氏名   性別  生年月日 部署番号

部署表

部署番号 部署名

関係データベースの正規化のまとめ

ここまでの説明をまとめると、非正規形、第1正規形、第2正規形、第3正規形は、以下のように定義できます。
簡単に言えば、よろしくないこととして、繰り返し、部分従属性、推移従属性があり、それらがすべて排除されていれば、第3正規形であるということです。
「社員表には、社員に関する情報だけがある」という状態になっていれば、繰り返し、部分従属性、推移従属性がないはずですが、念のためチェックしましょう。

・非正規形・・・繰り返しがある。
・第1正規形・・・繰り返しが排除されている。
・第2正規形・・・第1正規形を満たし、さらに部分従属性が排除されている。
・第3正規形・・・第2正規形を満たし、さらに推移従属性が排除されている。

つまづきやすいポイントと言うか、勘違いしないでほしいのは、非正規形→第1正規形→第2正規形→第3正規形の順に、よろしくないことを徐々に排除していくのではなく、表の状態に非正規形、第1正規形、第2正規形、第3正規形という分類があるということです。

理論上は、第3正規形が無駄や問題が生じない状態なのですが、表を分割すると、データをたどるのに時間がかかることになるので、処理速度を優先する場合は、第3正規形ではない状態で、システムを運用することもあります。
これまで、何度も「理論上」と断ってきたのは、実際の現場では、理論に従わないこともあるからです。

関係データベースの正規化に関する問題の攻略法

関係データベースの正規化に関する問題を見てみましょう。
以下は、選択肢に示された表が第3正規形であるかどうかを判断する問題(出典:H21春問32)です。

問題(出典:H21春問32)

“従業員”表を第3正規形にしたものはどれか。ここで、下線部は主キーを表す。

従業員(従業員番号、従業員氏名、{技能コード、技能名、技能経験年数})
                             ({ }は繰返しを表す)

第3正規形であることは、主キーがあって、その他のすべての列が主キーに従属することおよび繰り返し、部分従属性、推移従属性がないことで判断します。
選択肢に示された表を1つずつチェックしてみましょう。これが、この問題の攻略法です。
 

・選択肢ア
上段の表は、「従業員番号」という主キーによって「従業員氏名」を特定できるので、第3正規形です。
下段の表は、「技能コード」で「技能名」を特定できますが、「技能経験年数」を特定できないので、第3正規形ではありません。

・選択肢イ
上段の表は、「従業員番号」と「技能コード」が複合キーであり、「技能経験年数」は「従業員番号」と「技能コード」の両方で特定できますが、「従業員氏名」は「従業員番号」だけで特定できます。
これは、部分従属性です。したがって、この表は、第3正規形ではありません。
下段の表は、「技能コード」という主キーで「技能名」を特定できるので第3正規形です。

・選択肢ウ
上段の表は、「従業員番号」と「技能コード」の複合キーで「技能経験年数」を特定できるので、第3正規形です。
中段の表は、「従業員番号」という主キーで「従業員氏名」を特定できるので、第3正規形です。
下段の表は、「技能コード」という主キーで「技能名」を特定できるので、第3正規形です。

・選択肢エ
上段の表は、「従業員番号」と「技能コード」の複合キーだけの表です。この表が何の役に立つのかはわかりませんが、理論上は第3正規形です。
中段の表は、「従業員番号」という主キーで「従業員氏名」を特定できますが、「技能経験年数」を特定できないので、第3正規形ではありません。
下段の表は、「技能コード」という主キーで「技能名」を特定できるので、第3正規形です。

以上のことから、すべての表が第3正規形になっている選択肢ウが正解です。


今回は、「関係データベースの正規化」のポイントと攻略法を解説しました。
このテーマが苦手だった受験者の参考になれば幸いです。

それでは、またお会いしましょう!

label 関連タグ
科目A試験は、
免除できます。
独習ゼミで科目A試験を1年間免除して、科目B試験だけに集中しましょう。
免除試験を受けた 74.9% の方が、
科目A免除資格を得ています。
※独習ゼミは、受験ナビ運営のSEプラスによる試験対策eラーニングです。
科目A免除試験 最大 2 回の
受験チャンス !
info_outline
科目A免除試験 最大 2 回の
受験チャンス !
詳しく見てみるplay_circle_filled
label これまでの『徹底解説!つまづきやすいポイントと攻略法』の連載一覧 label 著者