3 Normal Forms Tutorial

Read my highly-acclaimed tutorial on the Three Normal Forms.

Download a printable PDF version of this tutorial.

Then come back here and leave a comment, if you want.

For the record, I don’t have any tutorials on 4th Normal Form, 5th Normal Form, Boyce-Codd Normal Form, or any other Forms (normal or otherwise) you might wish to ask about. Thanks, and happy reading!

149 Responses to 3 Normal Forms Tutorial

  1. Monika says:

    Excellent explanation with well understandable examples throughout, that even a layman can understand.. I didnt lose interest in reading at any point of time. Awesome approach to explain the 3 forms of normalization. Thank u so much..

  2. Priya says:

    Really very usefull.I read many documents and websites,but I had confusion.After reading this I came to know the concepts very well.Thanks a lot.

  3. Pavi says:

    Very useful documnent, finally i understood normalization… Thanks a lot…

  4. Shanthi says:

    Excellent explanation. Awesome approachb to explain the 3 forms of normalizaition. Thank you very much.

  5. Veera says:

    yup. This help’s me a lot with out any confusion.

  6. Deepak says:

    Excellent article

  7. MarvGeek says:

    Extremely superb, outstanding explanation of normalization.You truely have boosted my confidence about normalization.I’m so thankfull to God for the guys like you who break things down for others to understand them clearly and perfectly.Your tutorial is outstanding..Keep up the good work.May the great God bless you with more understanding to touch the hearts of other programmers!

  8. SB says:

    It was really helpful. Thanks for great explanation.

  9. WonkyFonk says:

    Brilliant explanation. Thanks for making this so easy to understand!

  10. mani shanker says:

    it was really awesome……….it has covered each and every single speck of normalization

  11. Srivatsa says:

    I have been trying to understand this normal form stuff from quite a number of years, but used to forget it – because I had never understood it in the first place..

    I stumbled upon this article today, and I didn’t understand this on the first go either. I read it once again later and everything was crystal clear…each step has been explained so clearly which is what makes the difference between this article and the articles that I have read elsewhere.

    Now, the concept stays clear in my mind and I believe I an spread the word / knowledge about Normal Forms to others who are struggling!!

    Thanks for the pain that you have taken in putting up this article.

  12. Sanjana says:

    Awesome Article!
    I could never understand the 3 Normal Forms the way i have understood now……thanks a ton. 🙂
    I clarity with which you have explained the example, with a little bit or humour and the comments when moving towards the next step is amazing. My reactions were exactly what you wrote there. 🙂

  13. Adesh Tiwari says:

    Till date…..i havent read such a good article on 3 Normal Forms……..it has everthing ,…..great examples, simple explanations…………HATS OFF.!!!
    KEEP IT UP ,.!!!

  14. Daz says:

    Apologies if this has been submitted before. When I click the submit button there’s no indication of the message being submitted.

    3″ Red Freens are going for $12.00 whereas 56″ Blue Freens are going for $3.00.

    I’m going to buy up all the 56″ blue ones, cut them into 3″ sizes, paint them red and corner the freen market! Who’s with me?! 😀

    When I become a millionaire I’ll buy you a freen (only a 3″ one though).

    Seriously though… Excellent tutorial. Thank you for the time and effort you put into it.

  15. Anto says:

    Very good tutorial…For a long time, I couldn’t find a good site to explain normal forms…Very very nice!!

  16. Chris Christenson says:

    I really appreciated the step by step explanation. It helped me see the process clearly. Thanks!

  17. Tony says:

    This could be the most concise and clearest article to explain database normalization. I took database course in college years ago, but I forgot the knowledge. This short article quickly refreshed my knowledge in 20 mins. Thank you so much.

  18. sreelatha says:

    Nice tutorial.Thanks.

  19. Josh says:

    WOW after lectures at campus AND reading my textbook over and over i still couldnt understand normalization. but after reading this im sooooo happy because im ready for my exam:D:D:D thanks alot for this Fred you’re a guru:D

  20. Jack says:

    I had to congratulate you on such a very good article, I see I am merely repeating what so many others have said… I’ll say it anyway. Of my MANY readings of this topic, yours is by far the clearest and the only one I’ve seen that I’d recommend. Thank you very much for taking this time!

  21. sourabh says:

    It is Really Very Helpful


  22. venkat says:

    it is very good. after reading this we will get clarity on Normal forms

  23. venkat says:

    it is very good. after reading this we will get clarity on Normal forms

  24. John says:

    At last! Someone who actually explains the subject in terms a newbie can relate too!

  25. Raj says:

    WOW!! Such a nice material… Great job by the author to make learning easy…Thanks… My Best Wishes to the author

  26. Raja Sekhar says:

    It is excellent material, clearly explaining the concept without any ambiguity. Great work.

  27. Sankarshan V KAtti says:

    The 3NF what u explained with example, i am not finding and distinction between 2NF and 3NF.

    As how we have divided Order_id and Iteam_id from our main table during 2NF we could have obviously separated Customers_id as customers info is dependent on Customer_id. Same as how we divided Iteam_id…..

    Please clarify this doubt…

  28. Fred Coulson says:

    Many people have, over the years, both in these comments and in private messages, objected to my contention in the tutorial that ITEM_PRICE leads to failure of Second Normal Form. I always go back and forth about this, and I generally tell people something like “it depends on the business rules, it’s not a matter for Normalization to solve, I wanted to keep things simple,” etc. Enough people have pointed this out that I finally decided to spell out the problem in the tutorial itself, under the NF2 discussion. Hopefully this will not prove too confusing for beginners, while at the same time keep the advanced readers satisfied!

  29. Vikram says:

    Wonderful Article. One of the main things that differentiates this article from the rest is its practical and simple yet pragmatic explanation of the 3NF theory with apt lucid example.
    Author sounds to be a great teacher as well a practitioner. This sticks in your brain forever. Keep up the good work.

  30. Snehanshu tiwari says:

    Awesome article.. Loved every bit of it..

  31. Farhan says:

    No doubt very good example, understand the 3NF now ..Keep it up

  32. Haidar says:

    Its really awesome article. Very clear and concise cotent about normalization with some very good and easy examples.

  33. Edward says:

    Excellent website and tutorial, really helped me to understand each normal form as I was having trouble before.

  34. ByterBIt says:

    Very well done; one of the best treatments of NF I’ve ever read. Thank you.

  35. Anonymous says:

    Very helpful, thank you!

  36. Ted says:

    I was stuck in a mental loop and you helped me out of it. THANKS!

  37. mohit gupta says:

    I have not seen such explaination before
    Thank u so much

  38. Priya says:

    Thank you. I was struggling with the normal forms, you saved me. 🙂

  39. Naveen kumar says:

    That was a nice article to get confidence about the topic..especially for freshers like me.

  40. sattari says:

    Thank you!! Best explanation of normal forms I have ever read!!

  41. Paul says:

    Very nice. Excellent. The only thing I would question would be that a customer could have zero orders. In order to exist as a customer in your system, they must have placed an order at some point. So, the modality should be one.

  42. Fred Coulson says:

    That’s a really good point, Paul. You have inspired me to write a whole blog post about why it’s a good point. Meanwhile I have updated the tutorial (Figures J and J.1) per your suggestion. Thanks!

  43. There's a fail says:

    Where it says;

    What do we do with a table that fails Second Normal Form, as this one has? First we take out the second half of the concatenated primary key (item_id) and put it in its own table.

    All the columns that depend on item_id – whether in whole or in part – follow it into the new table. We call this new table order_items (see Figure D).

    There isn’t a table (yet) with itemID alone with it’s dependent attributes. Figure D shows a table with ItemID and its dependents but OrderID is also in it. Very confusing for newbs.

  44. Scott Pletcher says:

    Excellent overall. I spent years working on order systems, and this was a very good introduction to data modeling for people.

    I would disagree, however, with the statement that an “order_id identifies the *invoice*…”. An order and an invoice are entirely different things.

  45. Scott Lemon says:

    This is like Normal Forms for Dummies! I completely get primary and foreign keys, now, as well as how to determine them. I even went a step further while reading and figured out the change in the ERD when you consider item prices change over time. However, I thank you for not confusing the Holy crap out of me while trying to teach the basics. My only wish is that you would have tackled Unique Keys. I’m still lost with that…

  46. Prasad says:

    Thank you very much. Just beautiful …

  47. Rohan Nag says:

    This was an awesome experience. Very well explained and very well understood. Thank you. Saved my exams.

  48. Steve Eklund says:

    A very good, clear review/refresher on some database principles I learned about 20 years ago but have not needed to use until recently. Thank you!

  49. Very good. Nice explanation(s) with diagrams just at the right points to show what you were talking about.
    I’ve used databases before – but this really crystalised what it was I was doing!

Leave a Reply

Your email address will not be published. Required fields are marked *