第1正規形 (1NF)
第1正規形とは、リレーションの全ての属性が単一値 (アトミック値) を持ち、繰り返しグループや複合値を含まない状態をいい、以降の全ての正規形の前提となる最も基本的な正規形である。
第1正規形のルール: 1 セルに 1 つの値だけ
第1正規形 (1NF) のルールはシンプルで、たった 2 つ。
- 1 セルに 1 つの値だけ (専門用語では「アトミック値」)。 「趣味」欄にカンマ区切りで複数値、みたいなことをしない。
- 同じ意味の列を何本も並べない (専門用語では「繰り返しグループ」)。 「電話1・電話2・電話3」みたいなことをしない。
言い換えると、「Excel でよくやってしまうこと」を許さないルール。 1NF は表 (テーブル) として扱える最低ラインの形で、 次の 2NF・3NF はこの形になっていることを前提にする。
実践例: 受注シートを 1NF にしてみる
このページから 2NF・3NF まで、同じ受注データ を段階的に整形していく。 まずは Excel でよくある形 — 1 行が 1 注文で、その注文の中身 (商品情報) をまとめて「商品明細」列にカンマで詰めている形 — を出発点にする。
| 注文ID | 注文日 | 顧客ID | 顧客名 | 顧客住所 | 商品明細 |
|---|---|---|---|---|---|
| O001 | 2026-06-01 | C01 | 田中商事 | 東京 | P01:ノート:300×2, P02:ペン:150×1 |
| O002 | 2026-06-02 | C02 | 山田工業 | 大阪 | P01:ノート:300×5 |
| O003 | 2026-06-03 | C01 | 田中商事 | 東京 | P02:ペン:150×3, P03:消しゴム:100×4 |
| 注文ID | 注文日 | 顧客ID | 顧客名 | 顧客住所 | 商品ID | 商品名 | 単価 | 数量 |
|---|---|---|---|---|---|---|---|---|
| O001 | 2026-06-01 | C01 | 田中商事 | 東京 | P01 | ノート | 300 | 2 |
| O001 | 2026-06-01 | C01 | 田中商事 | 東京 | P02 | ペン | 150 | 1 |
| O002 | 2026-06-02 | C02 | 山田工業 | 大阪 | P01 | ノート | 300 | 5 |
| O003 | 2026-06-03 | C01 | 田中商事 | 東京 | P02 | ペン | 150 | 3 |
| O003 | 2026-06-03 | C01 | 田中商事 | 東京 | P03 | 消しゴム | 100 | 4 |
1NF にする手順
- 1 セルに複数値が入っている列、または「電話1・電話2・…」のように同じ意味の列が並んでいる箇所を探す
- 1 セル 1 値のパターン (今回の商品明細): 値の数だけその行をコピーして、各セルに 1 値ずつ入れる
- 繰り返しカラムのパターン (電話1・電話2・電話3): 同じ意味の列を 1 本にまとめ、値の数だけ行を分ける
どちらも テーブルは 1 つのまま、変わるのは行数と列の並びだけ。 「別のテーブルに切り出す」ようなことは 1NF ではやらない。 それは次の 2NF から始まる話。
練習問題
非1NF には 2 種類の典型パターンがある — 本ページ冒頭で扱ったセル内複合値 のパターンと、繰り返しカラム (同じ意味の列を横並びにする) のパターン。 それぞれ別データで自分でも試してみる。答えを見る前にどう変えればいいか考えてみてほしい。
学生履修 テーブルを 1NF に変換せよ。| 学籍番号 | 氏名 | 学年 | 履修科目 |
|---|---|---|---|
| S001 | 山田 | 3 | 数学, 物理, 化学 |
| S002 | 田中 | 2 | 英語, 歴史 |
| S003 | 佐藤 | 3 | 数学, 生物, 情報 |
答えを見る
| 学籍番号 | 氏名 | 学年 | 履修科目 |
|---|---|---|---|
| S001 | 山田 | 3 | 数学 |
| S001 | 山田 | 3 | 物理 |
| S001 | 山田 | 3 | 化学 |
| S002 | 田中 | 2 | 英語 |
| S002 | 田中 | 2 | 歴史 |
| S003 | 佐藤 | 3 | 数学 |
| S003 | 佐藤 | 3 | 生物 |
| S003 | 佐藤 | 3 | 情報 |
OR の連鎖が必要になる。 この 顧客 テーブルを 1NF に変換せよ。| 顧客ID | 氏名 | 電話1 | 電話2 | 電話3 |
|---|---|---|---|---|
| C001 | 山田 | 090-1111 | 03-2222 | |
| C002 | 田中 | 090-3333 | ||
| C003 | 佐藤 | 090-4444 | 03-5555 | 090-6666 |
答えを見る
電話番号 1 本に集約し、電話 1 件ごとに 1 行を持つ形にする。 件数は行の増減で自然に表現でき、NULL 列や「4 本目が来たらスキーマを変える」問題も解消する。 このパターンでもテーブル数は変わらず、変わるのは列の並びと行数だけ。| 顧客ID | 氏名 | 電話番号 |
|---|---|---|
| C001 | 山田 | 090-1111 |
| C001 | 山田 | 03-2222 |
| C002 | 田中 | 090-3333 |
| C003 | 佐藤 | 090-4444 |
| C003 | 佐藤 | 03-5555 |
| C003 | 佐藤 | 090-6666 |
1NF はスタート地点
1NF は「表として最低限扱える形」であって、これだけでは冗長性の問題は解消しない。 たとえば上の受注テーブルを見ると、 同じ注文 (O001) の 2 行では 注文日・顧客名・顧客住所 が全く同じ値で重複しているし、 同じ商品 (P01 が O001 と O002 の 2 行に登場) では 商品名・単価 が重複している。
次の 第2正規形 (2NF) では、 この 1NF 化した受注テーブルをそのまま引き継いで、 関数従属を手がかりにこの重複を別テーブルに切り出していく。
よくある疑問
関連トピック
- 基礎なぜ正規化が必要か
正規化されていないテーブルでは、同じ事実を複数の行に重複して持つために、挿入・更新・削除の各操作で矛盾や情報損失が発生する。この「更新時異常」を体系的に排除するのが正規化の目的である。
- 基礎関数従属性
属性 X の値が決まると属性 Y の値も一意に決まる関係を関数従属という。この概念は 1NF〜3NF、BCNF まで正規化の全ステップの判定基準になる。部分関数従属・推移関数従属など派生概念も整理する。
- 基礎キーの階層
正規化の議論に入る前に、スーパーキー・候補キー・主キーの3階層と、外部キー・代替キー・複合キーとの関係を整理する。2NF/3NF の「非キー属性」「部分従属」を語るための語彙を揃える。
もっと学びたい方へ(おすすめ書籍)
テーブル設計と正規化、パフォーマンス考慮のインデックス設計まで実務レベルで学べる定番書。第2版ではクラウド対応も強化。
IPAデータベーススペシャリスト試験の総合対策書。インデックス関連は本サイトと合わせて学ぶと理解が深まる。
リレーショナルモデルの理論から、インデックス設計を含む実務で使えるSQLまで解説。
SQLの本質的な使い方と、インデックスが効くクエリの書き方を学べる。ウィンドウ関数など現代SQLも網羅。
実務でやりがちなSQL・DB設計のアンチパターンとその回避策を体系的に学べる。
PostgreSQLの内部構造・ストレージ・インデックス機構を丁寧に解説。設計と運用計画の鉄則が学べる。
本セクションはAmazonアソシエイトのリンクを含みます。
もっと深くDBを学びたい方へ。
たいてっくが、SQL・データベース設計・パフォーマンスチューニング・ IPAデータベーススペシャリスト対策まで、1対1で学習をサポートします。まずは無料相談から。