1️⃣ STEP 8: 第1正規形(1NF)
繰り返し項目を排除し、アトミック性を確保しよう
- 第1正規形(1NF)の定義と条件
- 繰り返し項目(繰り返しグループ)の排除
- アトミック性(不可分性)の確保
- 非正規形から第1正規形への変換
- 実践演習:第1正規形への正規化
学習時間の目安: 2時間 | 前提知識: STEP 1-7修了
🎯 1. 第1正規形(1NF)とは?
STEP 7からの続き:正規化の第一歩
STEP 7では、正規化の概念と3つの異常(更新異常、挿入異常、削除異常)を学びました。このSTEP 8から、具体的な正規化の手法を学んでいきます。まずは第1正規形(1NF)からスタートです。
第1正規形の定義
第1正規形(First Normal Form, 1NF)=すべての属性(カラム)が単一の値(アトミックな値)を持つ状態
わかりやすく言うと、「1つのマスに1つの値だけを入れる」というルールです。
❌ 悪い例:「科目」の欄に「国語、算数、理科」とまとめて書く
✅ 良い例:1行に1科目ずつ書く
データベースでも同じように、1つのセルには1つの値だけを入れます。
第1正規形の条件
- 繰り返し項目がない:同じような属性が複数ない(電話番号1、電話番号2、電話番号3 など)
- アトミック性:各セルが分割できない単一の値を持つ(「山田,佐藤,鈴木」のようにカンマ区切りで複数値を入れない)
- 主キーが存在する:各行を一意に識別できる
❌ 2. 繰り返し項目の排除
繰り返し項目とは
繰り返し項目(繰り返しグループ)=同じような属性が複数存在する状態
悪い例:繰り返し項目がある
- ❌ 電話番号が3つまでしか登録できない(拡張性がない)
- ❌ NULL が多くなる(佐藤花子は電話番号2、3がNULL)
- ❌ 検索が困難(どの電話番号カラムを検索すればいい?)
- ❌ カラムの追加が必要(4つ目の電話番号を登録したい場合)
良い例:繰り返し項目を排除(第1正規形)
- 電話番号は何個でも登録できる(拡張性あり)
- NULLがない
- 検索が簡単(電話番号テーブルを検索すればOK)
- カラム追加不要(レコードを追加するだけ)
⚛️ 3. アトミック性(不可分性)の確保
アトミック性とは
アトミック性(Atomicity)=各セルが「これ以上分割できない」単一の値を持つこと
悪い例:アトミックでない
- ❌ 履修科目がカンマ区切りで複数値を持っている
- ❌ 特定の科目を検索するのが困難(LIKE ‘%数学%’ では「数学史」も引っかかる)
- ❌ 科目ごとの集計ができない
- ❌ データの更新が難しい(1つの科目だけ削除したい場合)
良い例:アトミック性を確保(第1正規形)
- 1つのセルに1つの値だけ(アトミック)
- 特定の科目を簡単に検索できる(WHERE 科目ID = 1)
- 科目ごとの集計が簡単(GROUP BY 科目ID)
- データの更新が簡単(1行削除するだけ)
アトミックか非アトミックか?
「どこまで分割するか」はビジネス要件によります。
例:住所を検索・集計する必要がなければ、分割しなくてもOK。
例:姓と名を別々に扱う必要があれば、分割する。
🔄 4. 非正規形から第1正規形への変換
変換ステップ
- 繰り返し項目を特定:同じような属性が複数ないか確認
- 新しいテーブルを作成:繰り返し項目を別テーブルに分離
- アトミック性を確保:カンマ区切りなどの複数値を分割
- 主キーを設定:各テーブルに主キーを設定
- 外部キーで関連付け:元のテーブルとの関係を保つ
実例1:注文システム
実例2:アンケートシステム
📝 STEP 8 のまとめ
- 第1正規形:すべての属性が単一の値(アトミックな値)を持つ状態
- 繰り返し項目の排除:電話番号1、電話番号2のような同じ属性を排除
- アトミック性:1つのセルに1つの値だけ(カンマ区切りNG)
- 第1正規形への変換:別テーブルに分離して、1対多の関係にする
- 第1正規形にすることで、拡張性、検索性、集計性が向上
第1正規形は、正規化の第一歩です。
覚えておくべきルール:
✅ 1つのセルには1つの値だけ(アトミック性)
✅ 同じような属性を繰り返さない(繰り返し項目の排除)
✅ 主キーを設定する
次のSTEP 9では、第2正規形を学び、さらにデータの冗長性を排除していきます!
📝 練習問題
第1正規形の3つの条件を答えてください。
- 繰り返し項目がない:同じような属性が複数存在しない
- アトミック性:各セルが分割できない単一の値を持つ
- 主キーが存在する:各行を一意に識別できる
以下のテーブルは第1正規形を満たしていますか?理由も答えてください。
いいえ、第1正規形を満たしていません。
理由:「趣味」カラムがカンマ区切りで複数の値を持っており、アトミック性を満たしていません。
以下の非正規形テーブルを、第1正規形に変換してください。
以下のテーブルを第1正規形に変換してください。
以下のどれが「アトミック」な値ですか?すべて選んでください。
A. ‘東京都渋谷区’ B. ‘山田,佐藤,鈴木’ C. ‘123’ D. ‘2025-01-15’
C と D がアトミック
A:都道府県と市区町村に分割可能(ただし分割不要ならアトミックでOK)
B:カンマ区切りで複数の値(非アトミック)
C:単一の値(アトミック)
D:日付として単一の値(アトミック)
以下の非正規形テーブルを、第1正規形に変換してください。
「氏名」カラムに ‘山田太郎’ という値が入っています。これはアトミックですか?分割すべきですか?
ビジネス要件によります。
分割すべき場合:姓と名を別々に検索する、姓だけ表示する必要がある
分割しなくてOK:常にフルネームで扱い、別々に使う必要がない
アトミック性は「これ以上分割する必要がない」という意味なので、ビジネス要件で分割が不要ならアトミックとして扱ってOKです。
第1正規形にすることで、どんなメリットがありますか?3つ挙げてください。
- 拡張性の向上:データを何個でも追加できる
- 検索性の向上:特定の値を簡単に検索できる
- 集計の容易性:GROUP BYなどで簡単に集計できる
❓ よくある質問
Q1: 住所は分割すべきですか?
ビジネス要件によります。都道府県で検索・集計する必要があれば分割すべきですが、住所を全体としてのみ扱うなら分割しなくてもOKです。迷ったら、まずは分割せずに1つのカラムで。必要になったら分割しましょう。
Q2: JSONカラムは第1正規形に反しますか?
厳密には第1正規形に反します。JSONカラムには複数の値を格納できるため、アトミック性を満たしません。ただし、スキーマが頻繁に変わる場合や検索・集計する必要がない場合はJSONカラムを使うこともあります。トレードオフを理解した上で判断しましょう。
Q3: 第1正規形にするとテーブルが増えて複雑になりませんか?
確かにテーブルは増えますが、それ以上のメリットがあります。データの整合性、拡張性、検索・集計の容易さなど。ビュー(VIEW)やORMを使ってJOINを隠蔽する方法もあります。最初は複雑に感じますが、慣れれば自然に扱えるようになります。
Q4: 配列やリストを格納したい場合はどうすればよいですか?
中間テーブル(交差テーブル)を使います。例えば「ユーザーが複数の趣味を持つ」場合、「user_hobbies」のような中間テーブルを作り、ユーザーIDと趣味IDのペアを格納します。これにより、1人のユーザーに何個でも趣味を関連付けられ、特定の趣味を持つユーザーを簡単に検索できます。
Q5: NULL値は第1正規形に影響しますか?
NULL自体は第1正規形に反しません。NULLは「値がない」ことを表す単一の値です。ただし、繰り返し項目(電話番号1、電話番号2、電話番号3)を設けてNULLで埋めるパターンは第1正規形違反です。また、大量のNULLが発生する設計は、テーブル分割を検討すべきサインでもあります。
Q6: Excelのセル結合のようなデータは第1正規形違反ですか?
はい、第1正規形違反の典型例です。Excelでよく見る「セル結合」や「1つのセルに複数行」は、データベースでは禁物です。Excelからデータを移行する際は、まず第1正規形に変換する作業が必要になります。見た目の美しさより、データの正しさを優先しましょう。
学習メモ
データベース設計・データモデリング - Step 8