基礎正規化

第1正規形 (1NF)

著者 たいてっくエンジニア講師 / データエンジニア最終更新
定義

第1正規形とは、リレーションの全ての属性が単一値 (アトミック値) を持ち、繰り返しグループや複合値を含まない状態をいい、以降の全ての正規形の前提となる最も基本的な正規形である。

第1正規形のルール: 1 セルに 1 つの値だけ

第1正規形 (1NF) のルールはシンプルで、たった 2 つ。

  • 1 セルに 1 つの値だけ (専門用語では「アトミック値」)。 「趣味」欄にカンマ区切りで複数値、みたいなことをしない。
  • 同じ意味の列を何本も並べない (専門用語では「繰り返しグループ」)。 「電話1・電話2・電話3」みたいなことをしない。

言い換えると、「Excel でよくやってしまうこと」を許さないルール。 1NF は表 (テーブル) として扱える最低ラインの形で、 次の 2NF・3NF はこの形になっていることを前提にする。

実践例: 受注シートを 1NF にしてみる

このページから 2NF3NF まで、同じ受注データ を段階的に整形していく。 まずは Excel でよくある形 — 1 行が 1 注文で、その注文の中身 (商品情報) をまとめて「商品明細」列にカンマで詰めている形 — を出発点にする。

非1NF → 1NF: 商品明細セルを分解する
非1NF (商品明細がセル内に複数値)
受注
注文ID注文日顧客ID顧客名顧客住所商品明細
O0012026-06-01C01田中商事東京P01:ノート:300×2, P02:ペン:150×1
O0022026-06-02C02山田工業大阪P01:ノート:300×5
O0032026-06-03C01田中商事東京P02:ペン:150×3, P03:消しゴム:100×4
1NF 化後 (1 セル 1 値・行数が増える)
受注
注文ID注文日顧客ID顧客名顧客住所商品ID商品名単価数量
O0012026-06-01C01田中商事東京P01ノート3002
O0012026-06-01C01田中商事東京P02ペン1501
O0022026-06-02C02山田工業大阪P01ノート3005
O0032026-06-03C01田中商事東京P02ペン1503
O0032026-06-03C01田中商事東京P03消しゴム1004
「商品明細」の複数値を分解して 1 セル 1 値の形に直しただけ。 テーブルは 1 つのままで、変わるのは 行数と列の並び。 注文日・顧客名・商品名などが同じ値で複数行に重複しているのが目立つが、 これは 1NF 違反ではなく 2NF 以降で扱う課題。

1NF にする手順

  1. 1 セルに複数値が入っている列、または「電話1・電話2・…」のように同じ意味の列が並んでいる箇所を探す
  2. 1 セル 1 値のパターン (今回の商品明細): 値の数だけその行をコピーして、各セルに 1 値ずつ入れる
  3. 繰り返しカラムのパターン (電話1・電話2・電話3): 同じ意味の列を 1 本にまとめ、値の数だけ行を分ける

どちらも テーブルは 1 つのまま、変わるのは行数と列の並びだけ。 「別のテーブルに切り出す」ようなことは 1NF ではやらない。 それは次の 2NF から始まる話。

練習問題

非1NF には 2 種類の典型パターンがある — 本ページ冒頭で扱ったセル内複合値 のパターンと、繰り返しカラム (同じ意味の列を横並びにする) のパターン。 それぞれ別データで自分でも試してみる。答えを見る前にどう変えればいいか考えてみてほしい。

練習問題 — 練習 1 (セル内複合値) — 学生の履修情報テーブルを 1NF にする
以下は大学の学生履修情報を Excel でまとめたもの。 「履修科目」列に複数の科目名がカンマ区切りで詰め込まれており、 非1NF の状態になっている。この 学生履修 テーブルを 1NF に変換せよ。
学生履修 (非1NF)
学籍番号氏名学年履修科目
S001山田3数学, 物理, 化学
S002田中2英語, 歴史
S003佐藤3数学, 生物, 情報
答えを見る
「履修科目」のセル内複合値を分解して、科目 1 件ごとに 1 行を持つ形にする。 テーブル自体は 1 つのままで、行数だけが増える。 氏名や学年は同じ学生の行で重複するようになるが、これは 1NF 違反ではなく 2NF 以降で扱う課題。
学生履修 (1NF)
学籍番号氏名学年履修科目
S001山田3数学
S001山田3物理
S001山田3化学
S002田中2英語
S002田中2歴史
S003佐藤3数学
S003佐藤3生物
S003佐藤3情報
練習問題 — 練習 2 (繰り返しカラム) — 顧客の電話番号テーブルを 1NF にする
以下は顧客の連絡先情報。同じ意味の「電話1」「電話2」「電話3」という列を横に並べる形で保持している。 4 件目の電話番号が発生した瞬間にスキーマ変更が必要になり、 「どの列にも入っていない番号を検索する」といった単純な操作にも OR の連鎖が必要になる。 この 顧客 テーブルを 1NF に変換せよ。
顧客 (非1NF)
顧客ID氏名電話1電話2電話3
C001山田090-111103-2222
C002田中090-3333
C003佐藤090-444403-5555090-6666
答えを見る
繰り返しカラム 3 本を 電話番号 1 本に集約し、電話 1 件ごとに 1 行を持つ形にする。 件数は行の増減で自然に表現でき、NULL 列や「4 本目が来たらスキーマを変える」問題も解消する。 このパターンでもテーブル数は変わらず、変わるのは列の並びと行数だけ。
顧客 (1NF)
顧客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 化した受注テーブルをそのまま引き継いで、 関数従属を手がかりにこの重複を別テーブルに切り出していく。

よくある疑問

Q.第1正規形を満たさない例は?
A.1 つのセルに複数の値がまとめて入っているテーブル (例: 商品明細をカンマ区切りで詰めた列)、「電話1・電話2・電話3」のように同じ意味の列を横に並べたテーブルなどです。
Q.1NF 化すると同じ値が複数行に重複しますよね?
A.はい、重複は残ります。顧客名や商品名などが同じ値で複数行に現れるようになりますが、これは 1NF 違反ではありません。この重複を排除するのは第2正規化 (2NF) 以降の役割です。
Q.JSON カラムは第1正規形に反しますか?
A.厳密なリレーショナル理論では反するとみなされます。ただし現代のRDBは JSON をアトミック値として扱う機能を持つため、実務ではケースバイケースの判断になります。
Q.1NF にするだけで正規化は完了ですか?
A.いいえ。1NF は最も基礎的な要件で、多くの更新時異常はまだ残ります。2NF・3NF まで進めるのが標準です。

関連トピック

もっと学びたい方へ(おすすめ書籍)

おすすめ
達人に学ぶDB設計徹底指南書 第2版
ミック

テーブル設計と正規化、パフォーマンス考慮のインデックス設計まで実務レベルで学べる定番書。第2版ではクラウド対応も強化。

Amazon で見る →
おすすめ
楽々ERDレッスン (CodeZine BOOKS)
羽生章洋

ER 図をどう「使える設計」に落とすか、実務の判断まで踏み込んだ入門書。エンティティの切り出しから多対多の扱いまで具体例が豊富。

Amazon で見る →
情報処理教科書 データベーススペシャリスト 2025年版
三好康之

IPAデータベーススペシャリスト試験の総合対策書。インデックス関連は本サイトと合わせて学ぶと理解が深まる。

Amazon で見る →
理論から学ぶデータベース実践入門
奥野幹也

リレーショナルモデルの理論から、インデックス設計を含む実務で使えるSQLまで解説。

Amazon で見る →
おすすめ
スッキリわかるSQL入門 第4版 ドリル256問付き!
中山清喬/飯田理恵子

ドリル 256 問を実際に打ちながら進める SQL の入門書。付属のブラウザ環境で演習できるので、SELECT から結合・集約までを環境構築で止まらずに通せる。

Amazon で見る →
達人に学ぶSQL徹底指南書 第2版
ミック

SQLの本質的な使い方と、インデックスが効くクエリの書き方を学べる。ウィンドウ関数など現代SQLも網羅。

Amazon で見る →
SQLアンチパターン 第2版
Bill Karwin

実務でやりがちなSQL・DB設計のアンチパターンとその回避策を体系的に学べる。

Amazon で見る →
[改訂3版]内部構造から学ぶPostgreSQL
勝俣智成 ほか

PostgreSQLの内部構造・ストレージ・インデックス機構を丁寧に解説。設計と運用計画の鉄則が学べる。

Amazon で見る →
SQL実践入門 ── 高速でわかりやすいクエリの書き方
ミック

「なぜこの書き方が速いのか」を実行計画から説明する一冊。条件分岐・集約・結合・更新のそれぞれで、良い書き方と悪い書き方を対比しながら読める。

Amazon で見る →

本セクションはAmazonアソシエイトのリンクを含みます。

オンライン個別指導

もっと深くDBを学びたい方へ。

たいてっくが、SQL・データベース設計・パフォーマンスチューニング・IPAデータベーススペシャリスト対策まで、1対1で学習をサポートします。まずは無料相談から。

無料相談を予約する →
受講者の声 (DB・SQL コース)
menta レビュー原文を見る →
  • 教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。
    H 様DB・SQL コース受講
  • 体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。
    M 様DB・SQL コース受講
  • 大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。
    K 様DB・SQL コース受講