I'm attempting to really wrap my mind round the database normalization concept. I realize that it's accustomed to avoid duplicate/redundant data, also it involves creating separate tables for several things, but I am less than i understand 1NF, 2NF and 3NF fully. I've read a few of the questions about here regarding normalization generally, along with the wiki article, but I'd really appreciate a little more help.

Can someone please give a good example of 1NF, 2NF and 3NF in plain british?

Thanks greatly,

1NF is easily the most fundamental of normal forms - each cell inside a table must contain just one bit of information, and there might be no duplicate rows.

2NF and 3NF are only for being determined by the main key. Recall that the primary key can be created from multiple posts. As Chris stated in the response:

The information is dependent around the key [1NF], the entire key [2NF] and absolutely nothing the answer [3NF] (so assist me to Codd).


If you have a table that contains courses which are drawn in a particular semester, and you've got the next data:

-----Primary Key----               uh oh 


CourseID  Semester    #Places     Course Title 


IT101      2009-1     100        Programming  

IT101      2009-2     100        Programming  

IT102      2009-1     200        Databases    

IT102      2010-1     150        Databases    

IT103      2009-2     120        Website Design   

This really is not in 2NF, since the 4th column doesn't depend upon the entire key - only part of it. The course title would depend around the Course's ID, but is not related to which semester it's drawn in. Thus, as you can tell, we now have duplicate information - several rows telling us that IT101 is programming, and IT102 is Databases. Therefore we fix that by putting the course title into another table, where CourseID may be the ENTIRE key.

Primary Key 

CourseID      Course Title 


IT101        Programming  

IT102        Databases    

IT103        Website Design   

No redundancy!


Okay, so let us say we add the title from the teacher from the course, plus some particulars about the subject, in to the RDBMS:

-----Primary Key----                           uh oh 


Course    Semester    #Places     TeacherID   TeacherName  


IT101      2009-1     100         332          Mr Johnson    

IT101      2009-2     100         332          Mr Johnson    

IT102      2009-1     200         495          Mr Bentley  

IT102      2010-1     150         332          Mr Johnson    

IT103      2009-2     120         242          Mrs Cruz   

Now it ought to be apparent that TeacherName would depend on TeacherID - making this not in 3NF. To repair this, we all do very similar once we did in 2NF - take TeacherName using this table, and set it in the own, that has TeacherID because the key.

 Primary Key 

 TeacherID    TeacherName  


 332           Mr Johnson    

 495           Mr Bentley  

 242           Mrs Cruz   

No redundancy!!

One important factor to consider is when something isn't in 1NF, it's not in 2NF or 3NF either. So each additional Normal Form requires everything the lower ones had, and several extra conditions, which must all be satisfied.

I have didn't have a great memory for exact wording, however in my database class I believe the professor always stated something similar to:

The information is dependent around the key [1NF], the entire key [2NF] and absolutely nothing the answer [3NF].