DBMS Normalization Explained: 1NF, 2NF, 3NF with Examples

Learn DBMS normalization step by step with one example table. Understand 1NF, 2NF, 3NF, BCNF, anomalies, and exam-ready fixes.

A
Avinash mishra - Team ApnoAI
·
1 Sept 2026

DBMS Normalization Explained: 1NF, 2NF, 3NF with Examples

⚡ TL;DR — Quick Summary

Normalization organizes tables so that each fact is stored in one place, reducing duplicate data and update problems.

1NF: every cell holds a single value, and there are no repeating groups.

2NF: 1NF plus no partial dependency on a composite key.

3NF: 2NF plus no transitive dependency between non-key columns.

Instead of only definitions, this guide transforms one messy student table step by step, the same way you should solve it in exams.

Team note: Most students can recite the definitions of 1NF, 2NF, and 3NF, but they freeze when a real table is placed in front of them. So this article does not stop at definitions. We take one messy table and fix it step by step.

What Is Normalization in DBMS?

Normalization is the process of designing database tables so that each fact is stored in only one place.

When the same fact is repeated in many rows, the database becomes heavy, inconsistent, and dangerous to update. Normalization removes this repetition by splitting one big table into smaller, well-structured tables.

In simple words:

Normalization = right data in the right table.

The main goals of normalization are:

  • Reduce duplicate data (redundancy)

  • Avoid update conflicts

  • Make insert and delete operations safe

  • Keep the design easy to maintain

Normalization does not mean “more tables for no reason.” It means every table should store one clear type of fact.

Why Normalization Matters: The Real Problems

When a table is not normalized, the same information is repeated in many rows. This creates three classic problems, called anomalies.

Anomaly

What Happens

Simple Example

Update anomaly

The same fact must be updated in many rows. Miss one row and the data becomes inconsistent.

Dr. Sharma changes office, and you must edit 50 rows.

Insertion anomaly

You cannot add a fact until some other fact exists.

You cannot store a new instructor until a student takes their course.

Deletion anomaly

Deleting one fact accidentally deletes another fact.

Deleting Riya’s last enrollment also deletes the proof that Prof. Verma exists.

These are not theory-only problems. Real applications face them whenever table design is careless.

The Messy Table We Will Fix

Let’s use one small table and carry it through every normal form. This is the same method you should use in exam questions.

Student_ID

Student_Name

Course

Instructor

Office

Grade

101

Riya

DBMS, OS

Dr. Sharma, Prof. Verma

Room 12, Room 5

A, B

102

Aman

DBMS

Dr. Sharma

Room 12

B

This table stores everything in one place. It looks convenient, but it breaks the basic rules of good design.

Quick check: If one cell holds two values like “DBMS, OS”, the table is not even in 1NF. A relational table must store one value per cell.

Quick Terms You Need First

Before applying the normal forms, understand these six terms. Every normalization question uses them.

Term

Simple Meaning

Example

Attribute

A column in a table.

Student_Name

Tuple (row)

One record in the table.

The row for student 101

Primary key

The column or columns that uniquely identify a row.

(Student_ID, Course)

Functional dependency

One column determines another column.

Student_ID → Student_Name

Partial dependency

A non-key column depends on only part of a composite key.

Student_Name depends only on Student_ID

Transitive dependency

A non-key column depends on another non-key column.

Office depends on Instructor

If these terms are clear, normalization becomes a simple checking game instead of memorization.

Article image

1NF: Single Value in Every Cell

A table is in First Normal Form (1NF) when:

  • Every cell holds exactly one value

  • There are no repeating groups

  • Every row is unique and has a primary key

Our messy table fails because one cell contains multiple courses, instructors, offices, and grades. To fix it, we split each multi-value row into separate rows.

Student_ID

Student_Name

Course

Instructor

Office

Grade

101

Riya

DBMS

Dr. Sharma

Room 12

A

101

Riya

OS

Prof. Verma

Room 5

B

102

Aman

DBMS

Dr. Sharma

Room 12

B

Now every cell holds one value. The primary key becomes the combination (Student_ID, Course), because a student can take multiple courses.

1NF check: Can any cell answer with a list? If yes, the table is not in 1NF.

APNOAI exam check: In any exam table, first scan the cells. If one cell contains two courses, two grades, or two phone numbers, the table fails 1NF immediately.

2NF: No Partial Dependency

A table is in Second Normal Form (2NF) when it is already in 1NF and has no partial dependency.

Partial dependency means a non-key column depends on only part of the primary key. Our 1NF table has the composite key (Student_ID, Course). Now check every non-key column:

  • Student_Name depends only on Student_ID → partial dependency ❌

  • Instructor depends only on Course → partial dependency ❌

  • Office depends only on Course → partial dependency ❌

  • Grade depends on both Student_ID and Course → full dependency ✅

To fix this, we move the partially dependent columns into their own tables.

Table 1: Student

Student_ID

Student_Name

101

Riya

102

Aman

Table 2: Course_Info

Course

Instructor

Office

DBMS

Dr. Sharma

Room 12

OS

Prof. Verma

Room 5

Table 3: Enrollment

Student_ID

Course

Grade

101

DBMS

A

101

OS

B

102

DBMS

B

Now every non-key column depends on the full key of its own table. The design is in 2NF.

2NF check: If part of the key alone can determine a column, move that column to its own table.

APNOAI exam check: 2NF matters only when the key is composite. If the primary key is a single column, a 1NF table usually passes 2NF automatically.

The Normalization Path

Remember the order. Each normal form builds on the previous one.

1

1NF

Single value in every cell.

2

2NF

Remove partial dependency.

3

3NF

Remove transitive dependency.

4

BCNF

Stricter version for special cases.

APNOAI note: Do not jump directly to 3NF questions. First train your eye to catch 1NF and 2NF violations quickly. Speed comes from order.

3NF: No Transitive Dependency

A table is in Third Normal Form (3NF) when it is already in 2NF and has no transitive dependency.

Transitive dependency means a non-key column depends on another non-key column, not on the key directly.

Look at our 2NF table Course_Info(Course, Instructor, Office):

  • Course → Instructor (fine, Course is the key)

  • Instructor → Office (problem: Office depends on Instructor, which is not the key)

So the chain becomes:

Course → Instructor → Office

This chain is the transitive dependency. If Dr. Sharma changes office, we must update every row where Dr. Sharma appears. To fix it, split Course_Info into two tables.

Table 3 (fixed): Course

Course

Instructor

DBMS

Dr. Sharma

OS

Prof. Verma

Table 4 (new): Instructor_Office

Instructor

Office

Dr. Sharma

Room 12

Prof. Verma

Room 5

Now the design is in 3NF. The final structure has four clean tables:

  • Student(Student_ID, Student_Name)

  • Enrollment(Student_ID, Course, Grade)

  • Course(Course, Instructor)

  • Instructor_Office(Instructor, Office)

3NF check: If a non-key column depends on another non-key column, move it out.

APNOAI memory trick: 2NF asks “part of the key?” and 3NF asks “something other than the key?” If the answer is yes, split the table.

SQL: Create the Normalized Design

Here is how the final 3NF design looks in real SQL. Use the tabs to see table creation and a join query that brings the data back together.

CREATE TABLE student (
  student_id INT PRIMARY KEY,
  student_name VARCHAR(50)
);

CREATE TABLE course (
  course_id VARCHAR(10) PRIMARY KEY,
  instructor VARCHAR(50)
);

CREATE TABLE instructor_office (
  instructor VARCHAR(50) PRIMARY KEY,
  office VARCHAR(20)
);

CREATE TABLE enrollment (
  student_id INT,
  course_id VARCHAR(10),
  grade CHAR(1),
  PRIMARY KEY (student_id, course_id)
);
SELECT s.student_name, e.course_id, e.grade
FROM enrollment e
JOIN student s
  ON s.student_id = e.student_id
WHERE e.course_id = 'DBMS';

Notice the idea: normalization splits the data, and joins bring it back when needed. This is the balance every real database uses.

BCNF: The Stricter Version of 3NF

Boyce-Codd Normal Form (BCNF) says: for every dependency X → Y, X must be a super key.

Most 3NF tables are also in BCNF. But some special tables are in 3NF and still not in BCNF. This is a favorite interview question.

Look at this table:

Student

Course

Instructor

Rules of this table:

  • (Student, Course) → Instructor : a student takes a course from one instructor

  • Instructor → Course : each instructor teaches only one course

Here the candidate keys are (Student, Course) and (Student, Instructor). Since every column is part of some key, there is no partial or transitive dependency on non-key columns. So the table is in 3NF.

But Instructor → Course violates BCNF, because Instructor is not a super key.

Fix: split into two tables:

  • (Student, Instructor)

  • (Instructor, Course)

Interview line to remember: “Every BCNF table is in 3NF, but not every 3NF table is in BCNF.”

1NF vs 2NF vs 3NF vs BCNF: Quick Comparison

Normal Form

Rule

What It Removes

1NF

Single value in every cell, unique rows

Repeating groups

2NF

1NF + no partial dependency

Columns depending on part of a composite key

3NF

2NF + no transitive dependency

Columns depending on non-key columns

BCNF

Every determinant must be a super key

Special 3NF cases with overlapping keys

APNOAI Method: Solve Any Normalization Question

Use this fixed order in exams. It removes panic and keeps your answer structured.

flowchart TD
    A[Read Table and Rules] --> B[List Functional Dependencies]
    B --> C[Find Candidate Keys]
    C --> D{1NF? Single-value cells}
    D -->|No| E[Split multi-value cells]
    D -->|Yes| F{2NF? No partial dependency}
    F -->|No| G[Move partial columns out]
    F -->|Yes| H{3NF? No transitive dependency}
    H -->|No| I[Move transitive columns out]
    H -->|Yes| J[Check BCNF if asked]
    J --> K[Write Final Tables]

Team note: In answer writing, always show the dependencies and the final tables. Examiners give marks for the method, not just the final normal form name.

Common Exam Mistakes

Mistake

Why It Happens

Fix

Reciting definitions without checking dependencies

Memorization without practice

Always list FDs first

Missing the composite key

Assuming a single-column key

Find candidate keys before 2NF

Confusing partial with transitive dependency

Both look like “wrong dependency”

Partial = part of key; transitive = non-key to non-key

Applying 2NF to a single-column key table

Not understanding when 2NF matters

2NF is meaningful only for composite keys

Not writing final decomposed tables

Stopping at the normal form name

Always end with the final table design

Normalization vs Denormalization

Normalization is not always the final answer in real systems. Sometimes teams intentionally keep controlled redundancy for speed. This is called denormalization.

  • Normalization: best for safe writes, clean design, and transactional systems

  • Denormalization: used in read-heavy reporting, dashboards, and caching layers

Honest note: Denormalization is a performance trade-off, not a beginner shortcut. First learn to normalize properly, then learn when to break the rules on purpose.

Interview Questions Students Actually Get

1. What is normalization in one line?

It is the process of organizing tables to reduce redundancy and avoid update, insertion, and deletion anomalies.

2. What is the difference between 2NF and 3NF?

2NF removes partial dependency (part of the key determining a column). 3NF removes transitive dependency (a non-key column determining another non-key column).

3. Can a table be in 3NF but not in BCNF?

Yes. It happens when a non-super-key determines a prime attribute. The (Student, Course, Instructor) example above shows exactly this case.

4. Why do we need joins after normalization?

Because normalization splits one big table into smaller tables. Joins combine them back when a query needs related data together.

5. Is higher normalization always better?

Not always. Very high normalization can increase joins and slow read queries. Real systems balance normalization with performance needs.

6. What should a complete normalization answer include?

Functional dependencies, candidate keys, the highest normal form satisfied, and the final decomposed tables.

🎯 Key Takeaways

Normalization stores each fact in one place to reduce redundancy and anomalies.

1NF removes repeating groups and multi-value cells.

2NF removes partial dependency on composite keys.

3NF removes transitive dependency between non-key columns.

BCNF requires every determinant to be a super key.

Every BCNF table is in 3NF, but not every 3NF table is in BCNF.

Solve questions in fixed order: FDs → keys → 1NF → 2NF → 3NF → BCNF → final tables.

Normalization splits data; joins bring it back. Real databases balance both.

Conclusion

Normalization becomes easy when you stop memorizing and start checking. One messy table, one fixed order, and clear dependency checks turn any exam question into a step-by-step solution.

Remember the three questions that solve almost everything: Is every cell single-valued? Does any column depend on part of the key? Does any column depend on a non-key column?

Practice this method on different tables, and normalization will stop being a theory topic and become a scoring skill.

Advertisement

The 5-minute weekly briefing.

Get the biggest stories in AI, tech, and careers — hand-picked by our editors.

Advertisement

More from DBMS