Free tutorials in Hindi & English Daily computer, mobile and IT guides Beginner friendly learning
Blog · MySQL / SQL · 04 Jul 2026 · Hindi + English

Normalization in DBMS: 1NF, 2NF, 3NF Explained with One Example

One messy school table taken step by step through 1NF, 2NF and 3NF — watch the problems disappear at each stage instead of memorizing definitions.

Why normalization exists — feel the pain first

Normalization is not a definition to memorize — it is the cure for a disease. Here is the diseased table, a school's everything-in-one register:
student_records (the BAD table)
+------+-------+----------------+---------+--------------+-----------+
| roll | name  | subjects       | teacher | teacher_phone| class     |
| 101  | Aman  | Math, Science  | Sharma  | 98765xxxxx   | 10        |
| 102  | Priya | Math           | Sharma  | 98765xxxxx   | 10        |
| 103  | Rahul | Science        | Verma   | 91234xxxxx   | 9         |
+------+-------+----------------+---------+--------------+-----------+

Three real problems hiding here:

  • Update problem: Sharma changes his phone number → you must fix it in EVERY row he appears in. Miss one row = two different numbers for one teacher.
  • Insert problem: a new teacher joins but has no students yet → you cannot store him (no roll number to attach!).
  • Delete problem: Rahul leaves school → deleting his row also deletes Verma's phone number, which had nothing to do with Rahul leaving.

Normalization removes these three problems step by step.

1NF — one value per cell

Rule: every cell holds a single value, no lists. "Math, Science" in one cell breaks this — you cannot search or count subjects properly.

After 1NF: split the multi-value cell into rows
+------+-------+---------+---------+--------------+-------+
| roll | name  | subject | teacher | teacher_phone| class |
| 101  | Aman  | Math    | Sharma  | 98765xxxxx   | 10    |
| 101  | Aman  | Science | Sharma  | 98765xxxxx   | 10    |
| 102  | Priya | Math    | Sharma  | 98765xxxxx   | 10    |
| 103  | Rahul | Science | Verma   | 91234xxxxx   | 9     |
+------+-------+---------+---------+--------------+-------+

Searchable now — but look, repetition got WORSE. That's expected: 1NF fixes structure; 2NF and 3NF fix repetition.

2NF — facts must depend on the WHOLE key

The key here is (roll + subject) together. But name and class depend only on roll — Aman is Aman whichever subject the row is about. Rule: remove facts that depend on only part of the key into their own table.

students                     enrollments
+------+-------+-------+     +------+---------+---------+--------------+
| roll | name  | class |     | roll | subject | teacher | teacher_phone|
| 101  | Aman  | 10    |     | 101  | Math    | Sharma  | 98765xxxxx   |
| 102  | Priya | 10    |     | 101  | Science | Sharma  | 98765xxxxx   |
| 103  | Rahul | 9     |     | 102  | Math    | Sharma  | 98765xxxxx   |
+------+-------+-------+     | 103  | Science | Verma   | 91234xxxxx   |
                              +------+---------+---------+--------------+

Aman's name is now stored once. But Sharma's phone still repeats — one more step.

3NF — no fact about a non-key thing

teacher_phone doesn't describe the enrollment — it describes the teacher. It depends on a non-key column (teacher). Rule: facts about a non-key column move to that thing's own table.

students              enrollments              teachers
+------+-------+     +------+---------+-----+  +---------+--------------+
| roll | name  |     | roll | subject | t_id|  | t_id    | name | phone |
| 101  | Aman  |     | 101  | Math    |  1  |  |   1     |Sharma| 98765 |
| 102  | Priya |     | 101  | Science |  1  |  |   2     |Verma | 91234 |
| 103  | Rahul |     | 102  | Math    |  1  |  +---------+--------------+
+------+-------+     | 103  | Science |  2  |
                      +------+---------+-----+

Now re-check the three diseases: Sharma's phone changes → update ONE row in teachers. New teacher with no students → insert into teachers, done. Rahul leaves → delete his rows, Verma's phone survives. All three cured.

The memory trick for interviews

The classic line: "Every fact depends on the key (1NF), the whole key (2NF), and nothing but the key (3NF)." Say this and then walk through the three problems (update, insert, delete anomalies) — that combination is a complete interview answer.
FormRule in plain wordsFixes
1NFOne value per cell, no listsUnsearchable multi-values
2NFNo fact depending on part of the keyRepetition of student data
3NFNo fact about a non-key columnRepetition of teacher data

Normalization क्यों है — पहले दर्द महसूस कीजिए

Normalization रटने की definition नहीं — एक बीमारी का इलाज है. यह रही बीमार table, school का सब-कुछ-एक-में register:
student_records (BURI table)
+------+-------+----------------+---------+--------------+-----------+
| roll | name  | subjects       | teacher | teacher_phone| class     |
| 101  | Aman  | Math, Science  | Sharma  | 98765xxxxx   | 10        |
| 102  | Priya | Math           | Sharma  | 98765xxxxx   | 10        |
| 103  | Rahul | Science        | Verma   | 91234xxxxx   | 9         |
+------+-------+----------------+---------+--------------+-----------+

यहां तीन असली problems छुपी हैं:

  • Update problem: Sharma का phone बदला → हर उस row में ठीक करना पड़ेगा जहां वह है. एक row छूटी = एक teacher के दो अलग numbers.
  • Insert problem: नया teacher आया पर अभी students नहीं → उसे store ही नहीं कर सकते (जोड़ने को roll number ही नहीं!).
  • Delete problem: Rahul school छोड़ गया → उसकी row delete करते ही Verma का phone भी गया, जिसका Rahul के जाने से कोई लेना-देना नहीं था.

Normalization इन तीनों problems को step by step हटाती है.

1NF — हर cell में एक value

Rule: हर cell में single value, कोई list नहीं. एक cell में "Math, Science" इसे तोड़ता है — subjects ठीक से search या count नहीं हो सकते.

1NF के बाद: multi-value cell को rows में तोड़ो
+------+-------+---------+---------+--------------+-------+
| roll | name  | subject | teacher | teacher_phone| class |
| 101  | Aman  | Math    | Sharma  | 98765xxxxx   | 10    |
| 101  | Aman  | Science | Sharma  | 98765xxxxx   | 10    |
| 102  | Priya | Math    | Sharma  | 98765xxxxx   | 10    |
| 103  | Rahul | Science | Verma   | 91234xxxxx   | 9     |
+------+-------+---------+---------+--------------+-------+

अब searchable है — पर देखिए, repetition और BADH गई. यही expected है: 1NF structure ठीक करता है; repetition 2NF और 3NF ठीक करेंगे.

2NF — हर fact PURI key पर depend करे

यहां key है (roll + subject) मिलकर. लेकिन name और class सिर्फ roll पर depend करते हैं — Aman हर subject वाली row में Aman ही है. Rule: जो facts key के सिर्फ हिस्से पर depend करें, उन्हें अपनी अलग table में निकालो.

students                     enrollments
+------+-------+-------+     +------+---------+---------+--------------+
| roll | name  | class |     | roll | subject | teacher | teacher_phone|
| 101  | Aman  | 10    |     | 101  | Math    | Sharma  | 98765xxxxx   |
| 102  | Priya | 10    |     | 101  | Science | Sharma  | 98765xxxxx   |
| 103  | Rahul | 9     |     | 102  | Math    | Sharma  | 98765xxxxx   |
+------+-------+-------+     | 103  | Science | Verma   | 91234xxxxx   |
                              +------+---------+---------+--------------+

Aman का नाम अब एक बार store है. पर Sharma का phone अभी भी repeat हो रहा है — एक step और.

3NF — non-key चीज़ का कोई fact नहीं

teacher_phone enrollment को describe नहीं करता — teacher को करता है. यह एक non-key column (teacher) पर depend करता है. Rule: non-key column के बारे में facts उस चीज़ की अपनी table में जाएं.

students              enrollments              teachers
+------+-------+     +------+---------+-----+  +---------+--------------+
| roll | name  |     | roll | subject | t_id|  | t_id    | name | phone |
| 101  | Aman  |     | 101  | Math    |  1  |  |   1     |Sharma| 98765 |
| 102  | Priya |     | 101  | Science |  1  |  |   2     |Verma | 91234 |
| 103  | Rahul |     | 102  | Math    |  1  |  +---------+--------------+
+------+-------+     | 103  | Science |  2  |
                      +------+---------+-----+

अब तीनों बीमारियां दोबारा check कीजिए: Sharma का phone बदला → teachers में EK row update. Students के बिना नया teacher → teachers में insert, बस. Rahul गया → उसकी rows delete, Verma का phone बचा रहा. तीनों ठीक.

Interview के लिए याद रखने की trick

Classic line: "Every fact depends on the key (1NF), the whole key (2NF), and nothing but the key (3NF)." यह बोलकर तीन problems (update, insert, delete anomalies) से गुज़र जाइए — यही combination पूरा interview answer है.
Formआसान भाषा में ruleठीक करता है
1NFहर cell में एक value, list नहींUnsearchable multi-values
2NFKey के हिस्से पर depend करने वाला कोई fact नहींStudent data की repetition
3NFNon-key column का कोई fact नहींTeacher data की repetition

Frequently Asked Questions

What is normalization in simple words?

Normalization is organizing tables so each fact is stored exactly once — removing update, insert and delete anomalies by splitting data into related tables through 1NF, 2NF and 3NF.

What is the one-line trick to remember 1NF, 2NF and 3NF?

"Every fact depends on the key (1NF), the whole key (2NF), and nothing but the key (3NF)."

What are update, insert and delete anomalies?

Update anomaly: one fact stored in many rows goes inconsistent when partially updated; insert anomaly: a fact cannot be stored without unrelated data; delete anomaly: deleting a row accidentally destroys an unrelated fact.