Simplifying Database Normalization: From 1NF to 3NF
When you start designing a database, it’s easy to store everything in one big table.
But soon, you’ll face duplicate data and inconsistency issues.
That’s where normalization comes in — the process of organizing data step-by-step to make it efficient and logical.
In this post, we’ll learn 1NF, 2NF, and 3NF using a simple Student–Course example.
1NF – All Data in One Table
We start with a single table that contains students, their courses, and instructors.
Problem: Instructor names and course data repeat multiple times.
Let’s fix that.
2NF – Splitting Data into Logical Tables
Now we’ll separate the data into Students, Courses, and a linking table StudentCourses.
Table for Courses
Table for Instructors
Table for Studentcourses
3NF – Removing Transitive Dependencies
emove transitive dependency (non-key attributes shouldn’t depend on other non-keys).
👉 In our case, the InstructorPhone depends on Instructor, not directly on Course.
So we already separated Instructors, which makes this 3NF compliant.
Final tables in 3NF:
Students(StudentID, StudentName)
Instructors(Instructor, InstructorPhone)
Courses(CourseID, CourseName, Instructor)
StudentCourses(StudentID, CourseID)
Final Combined View
Now we can join everything neatly using an SQL JOIN.
Key Takeaways
By breaking down our initial table step by step:
1NF → Atomic values
2NF → Remove partial dependencies
3NF → Remove transitive dependencies
We achieved a clean, normalized schema that eliminates anomalies and improves consistency.
Top comments (0)