第一正規形・第二正規形とは?分かりやすいデータベースの正規化【基本情報技術者資格を取ろう】

正規化とは

データベースにおける正規化とは、散らばった情報を綺麗に整理しておく作業のことです。

イメージとしては、部屋の片づけのようなものです。

例えば、机の上にある漫画の5巻があり、床に3巻がある、そして、本棚には2巻と4巻があるような状態で、友達にその漫画を全て貸す場合を考えてみましょう。

まず、1巻から最終巻まで見つけ出すことが大変ですよね。場合によっては、途中の巻が見つからないかもしれません。あらかじめ本棚に漫画を整理しておけば、このような状態を防ぐことができます。

このような整理をデータ単位で行うことを正規化と言います。データを正規化することで、データの更新漏れや矛盾を防ぐことを目的としています。

正規化されていないデータを非正規形と呼びます。

第一正規形

第一正規形とは、各データがシンプルになっている状態のことです。

Excelデータで考えてみましょう。

Excelで言えば、以下の状態になっていることです。

  • 1セル(マス)あたり1つの情報のみになっている(1セル=1情報)
  • セル結合がされていない
  • 同じ情報が複数個所に載っていない

例えば、1つのセルに日付と名前と住所が入っていれば、日付、名前、住所にセルを分けます。

2つ以上のセルを大きな1つのセルに結合しているところがあれば、結合を解除して1セルごとに分解します。

複数の行や列に同じ情報が載っていない状態にします。ただし、見た目上同じでも意味合いが違えば、別の情報と考えます。例えば、同じ日付が入っていても、作業内容が違えば、数字的には同じ日付でも、違う意味合いでの情報なので、削除はしません。

データを最小単位に分解して管理するようなイメージです。もう分解できないというレベルに分ける意識を持ちましょう。

第二正規形

第二正規形とは、主キーを全て使って」唯一の1行に特定できるように表が分けられた状態です。

※主キーとは、唯一の1行を特定・検索するために用いられる列のことです。
イメージとしては、マイナンバーのようなものです。
1つの表に複数の主キーが存在する場合もあります。

まず、主キーと表のイメージを具体例でみていきましょう。

例えば、本屋さんで漫画に関する表が作られたとします。
項目は「分類コード」「タイトル」「ジャンル」「ジャンルコード」「購入コード」「購入日」「購入者名」「購入数」の表をイメージしてください。

「分類コード」は、本の種類(どのタイトルの何巻か等)ごとに振り分けて、番号付けしたものとします。
「ジャンルコード」はジャンルごとに振り分けて、番号付けしたものとします。
「購入コード」は、本屋全体の購入履歴を順番に番号付けしたものとします。
(1回の会計ごとに購入コードが振られるものとします。
1回の会計で2種類のタイトルの本を買った場合、
その2種類とも同じ購入コードが振られるものとします。)

今回の表では、「行を特定するために」番号付けした「分類コード」「購入コード」が主キーになります。

この表をさらに細かく見ていくと、
「分類コード」だけで、「タイトル」「ジャンル」「ジャンルコード」は唯一に特定できます。
「購入コード」だけで、「購入日」「購入者名」は唯一に特定できます。
一方で、「購入数」は、1回の会計で複数の本を買っていた場合(Aの本を2冊、Bの本を4冊買っていた場合等)、「購入コード」だけでは、Aの2冊とBの4冊という2行が出てきてしまいます。
「購入数」を唯一の1行に特定するためには、「分類コード」と「購入コード」の両方が必要です。

第二正規形では、表の中にあるデータ(行)が主キーを「すべて使って」唯一の1行に特定できるようにしたい(一部の主キーだけで特定できるものは表を分けたい)ので、

  • 「分類コード」だけで特定できるものは「分類コード」の表
    • 「分類コード」「タイトル」「ジャンル」「ジャンルコード」
  • 「購入コード」だけで特定できるものは「購入コード」の表
    • 「購入コード」「購入日」「購入者名」
  • 「分類コード」と「購入コード」で特定できるものは「分類コード」と「購入コード」の表
    • 「分類コード」「購入コード」「購入数」

というように、表を分けていく作業を行います。

このように、主キーごとに分けた表が第二正規形です。

第三正規形

第三正規形とは、第二正規形から、さらに主キー以外で特定できる列を分離した状態です。

第二正規形の章で使った例を参考に見ていきましょう。

第二正規形では、本屋にある表を以下のように分けていきました。

  • 「分類コード」を主キーとする表
  • 「購入コード」を主キーとする表
  • 「分類コード」と「購入コード」を主キーとする表

この中で、「分類コード」を主キーとする表に注目してみてみると、

項目は「分類コード」「タイトル」「ジャンル」「ジャンルコード」ですが、「ジャンル」は「分類コード」がなくても、「ジャンルコード」が分かれば、特定できますよね。

第二正規形の章で疑問に思っていた方もいるかもしれませんが、第二正規形では大きな単位で表を分離していましたが、もう少し細かい単位で考えると、「分類コード」を主キーとする表の中に「ジャンルコード」だけで特定できる表が隠れています。

第三正規形では、この隠れた主キーを分離します↓(★部分)

  • 「分類コード」を主キーとする表
    • 「分類コード」「タイトル」
  • 「ジャンルコード」を主キーとする表 ★
    • 「ジャンルコード」「ジャンル」
  • 「購入コード」を主キーとする表
    • 「購入コード」「購入日」「購入者名」
  • 「分類コード」と「購入コード」を主キーとする表
    • 「分類コード」「購入コード」「購入数」

これが第三正規形です。

 

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