基本情報技術者試験対策(23)「関係データベースの正規化」

スポンサーリンク
IT系

正規化が必要な理由

正規化とは、規則に従ってデータの表現を整えて、利用しやすくすることである。関係データベースでは、「表にあるのは主キーに従属したデータだけ」 という規則に従って、表を設計する(下図)。 この規則に従って設計された表は、主キーから他のすべての列に従属性の矢印が付き、その他に余計な矢印がない。 これによって、 社員表には社員のデータだけがあり、部署表には部署のデータだけがある、ということになる。

正規化されていない表は、問題が生じる可能性がある。例えば、 下図に示したように、部署表を取りやめ、社員表に社員と部署のデータを格納したとしよう。

この場合には、佐藤一郎が退職して、 その行を削除すると、 経理部という部署もなくなってしまう。このような問題が生じないように、表にあるのは主キーに従属したデータだけとするのである。

表を作るときのルール

  • 表には、 主キーが必要である
  • 表にあるのは、主キーに従属したデータだけにする

非正規形と第1正規形

関係データベースには、正規化に関する理論がある。 これは、正規化されていない表の状態を分類し、 正規化を行う方法を明確にしたものである。 表の状態には、 「非正規形」 「第1正規形」 「第2正規形」 「第3正規形」がある。

基本情報技術者試験では、第3正規形を、 正規化が完了した状態とする。 一般的に、 「表にあるのは主キーに従属したデータだけ」という規則に従えば、第3正規形になるが、理論上、他の正規形もある。

それぞれの正規形を説明しよう。 非正規形とは、「繰り返しがある」 ものである。 例えば、下図の社員表には、1つの行の中に複数の取得資格がある。 この部分が繰り返しである。繰り返しがあるので、この社員表は、非正規形である。

繰り返しを排除する

繰り返しを排除する行為を第1正規化と呼ぶ。 繰り返しを排除された表の状態を第1正規形と呼ぶ。 行為を「~化」と呼び、状態を「~形」と呼ぶ。

下図は、先ほどの社員表から繰り返しを排除したものである。1行に3列あった「取得資格」を1列だけにして、3つの取得資格を3行に分けて格納した。繰り返しが排除されたので、この社員表は、少なくとも第1正規形である。 「少なくとも」と断っているのは、この時点で、すでに第2正 規形や第3正規形の条件を満たしている場合もあるからである。 なお、下図では、社員番号を取得番号に変えている。 社員番号のままでは、ユニークにならないからである。

部分従属性と第2正規形

第2正規形は、「第1正規形であり、さらに部分従属性を排除したもの」である。
部分従属性とは、 「複合キーの一部分に従属している」という意味である。
複合キーとは、複数の列を主キーにしたものである。

例を示そう。下図は、「社員番号」「部署番号」 「在籍年数」から 構成された「在籍年数表」である。この表では、「社員番号」と「部署番号」 のどちらか一方だけでは、 「在籍年数」 が決まらない。 「どの社員が、どの部署に」→「何年在籍しているか」という従属性になるので、「社員番号」 と「部署番号」がセットで主キー (複合キー)になる。

この社員表に 「氏名」 を追加するとどうなるだろう。 「氏名」 は、 「社員番号」「部署番号」の両方ではなく、 「社員番号」 だけで決まる。 これが、 部分従属性である。 部分従属性を図示すると、 下図のように、余計な矢印を引くことになる。

部分従属性がある場合は、「表にあるのは主キーに従属したデータだけ」 になっていない。この表には、「社員番号と部署番号が決まれば、在籍年数が決まる」 という従属性と、 「社員番号が決まれば、氏名が決まる」という従属性が混在している。

部分従属性を排除する

この問題を解決するには、 表を分割する。下図は、前図を2つに分割したものである。 「社員番号と部署番号が決まれば、在籍年数が決まる」という従属性を「在籍年数表」とし、「社員番号が決まれば、氏名が決まる」という従属性を「社員表」とした。

どちらの表にも、繰り返しはない。従って、第1正規形の条件を満たしている。 さらに、 部分従属性を排除しているので、少なくとも第2正規形である。 ここでも 「少なくとも」と断っているのは、この時点でに第3正規形の条件を満たしている場合があるからである。

リレーションシップの確認

表を分割したときには、リレーションシップが成り立っていることを確認する必要がある
表を分割する前は、1行にまとめられていたデータだったのだから、表を分割した後でも、表をたどってデータのまとまりを得られなければならない。

「在籍年数表」の主キーは、「社員番号」と「部署番号」である。
「社員表」の主キーは、「社員番号」 である。 従って、「在籍年数表」 の 「社員番号」 から、「社員表」の「社員番号」をたどることができる。 「在籍年数表」の 「社員番号」は、複合キーの一部であり、外部キーでもある。

推移従属性と第3正規形

第3正規形は、「第2正規形であり、さらに推移従属性を排除したもの」である。推移従属性とは、 「主キーでない列に従属している」という意味である。 例を示そう。 下図は、 「社員番号」 「氏名」 「部署番号」 「部署名」 から構成された「社員表」 である。 主キーである「社員番号」 が決まれば、「氏名」「部署番号」「部署名」 が決まるが、 「部署名」は、「部署番号」でも決まる。 この余計な矢印が、推移従属性である。

推移従属性を排除する

推移従属性がある場合は、「表にあるのは主キーに従属したデータだけ」 になっていない。 この問題を解決するには、表を分割する。下図は、 前図の表を「社員表」と「部署表」に分割したものである。 「社員番号」と 「氏名」の社員表と、「部署番号」と「部署名」の「部署表」に分割しただけ では、表をたどれないので、外部キーとして社員表に「部署番号」を入れてある。

どちらの表にも、繰り返しはない。従って、第1正規形の条件を満たしている。部分従属性もないので、第2正規形の条件も満たしている。
さらに、推移従属性を排除しているので第3正規形である。

正規形の定義

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

参考)情報処理教科書 出るとこだけ!基本情報技術者[科目A][科目B]2025年版



コメント

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