第2正規形とは?初心者でもわかるデータベース設計の基礎と例
生徒
「先生、第1正規形は1つのセルに1つの値だけを入れるルールでしたよね。じゃあ『第2正規形』って何ですか?」
先生
「第2正規形(ダイニセイキケイ)は、第1正規形を満たしたうえで、さらに『部分関数従属(ブブンカンスウジュウゾク)』をなくすことが目的なんだよ。」
生徒
「部分関数従属ってちょっと難しそうですね…。簡単に言うとどういうことですか?」
先生
「簡単に言うと、複合キー(フクゴウキー)の一部だけで決まるデータをなくすことなんだ。つまり『キーの一部分に依存しているデータ』を別の表に分けることが第2正規形なんだよ。」
生徒
「なるほど!つまり、もっと整理して無駄をなくす感じなんですね。」
先生
「その通り。では第2正規形の具体例を見ていこう。」
1. 第2正規形(ダイニセイキケイ)とは?
第2正規形とは、第1正規形を満たしたうえで「複合キーの一部に依存するデータを排除した状態」のことをいいます。ここでいう複合キーとは、複数の列(カラム)を組み合わせて1つのレコードを特定するキーのことです。
もし複合キーを使っている表で、キーの一部だけで決まるデータがある場合、それは部分関数従属と呼ばれます。第2正規形では、この部分関数従属を取り除いて、表を分割します。
2. 部分関数従属(ブブンカンスウジュウゾク)とは?
部分関数従属とは、複合キーの一部にだけ依存している状態のことです。たとえば「注文番号」と「商品番号」の2つで1行を特定できる表があるとします。このとき、顧客名が「注文番号」だけで決まってしまうなら、それは部分関数従属です。
つまり、本来は2つのキーを組み合わせてレコードを特定するはずなのに、片方だけで決まるデータが存在してしまう状態です。これを放置するとデータの重複や更新の手間が増えてしまいます。
3. 非正規形から第1正規形、第2正規形への流れ
例として、次のような表を考えてみましょう。
注文番号 | 商品番号 | 顧客名 | 商品名 | 商品価格
001 | A01 | 佐藤 | りんご | 100
001 | A02 | 佐藤 | バナナ | 120
002 | A01 | 鈴木 | りんご | 100
この表はすでに第1正規形を満たしていますが、顧客名は「注文番号」だけで決まり、商品名や商品価格は「商品番号」だけで決まります。つまり、部分関数従属が発生している状態です。
これを第2正規形に変換すると、次のように表を分けます。
注文表
注文番号 | 顧客名
001 | 佐藤
002 | 鈴木
商品表
商品番号 | 商品名 | 商品価格
A01 | りんご | 100
A02 | バナナ | 120
注文詳細表
注文番号 | 商品番号
001 | A01
001 | A02
002 | A01
このように分けることで、顧客名は注文表に、商品情報は商品表にまとめられ、無駄な重複がなくなります。
4. 第2正規形のメリット
第2正規形にすることで、次のようなメリットがあります。
- 顧客名や商品情報の重複がなくなる
- データを更新するときの手間が減る
- 削除や追加のときに矛盾が起きにくい
- データがより整理されて管理しやすくなる
例えば「りんごの価格を120円に変更する」とき、商品表だけを修正すれば済みます。もし第2正規形にしていなければ、複数の行を探してすべて修正する必要があり、大変です。
5. 第2正規形とデータベース設計の雑学
第2正規形は、1970年代にエドガー・F・コッドによって提唱された正規化理論の一部です。第1正規形でデータを細かく分けたあと、さらに重複や無駄を減らすために生まれました。
初心者が第2正規形を理解すると、「第3正規形(ダイサンセイキケイ)」など、さらに進んだ正規化の考え方も理解しやすくなります。データベース設計を学ぶうえで必ず通るステップといえるでしょう。