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!

145 Responses to 3 Normal Forms Tutorial

  1. Jay says:

    What my professor couldn’t do in 2 weeks of lecture, was accomplished with this tutorial.
    I finally “FULLY” understand how the 3 normal forms work, and are carried out.
    Well done, easy to follow and appreciated greatly!

  2. kailash says:

    So nice,This is very cruicial,I am so impressed with this article.

  3. Shikha says:

    very nice tutorial.

  4. pavan says:

    it was great… thanks..

  5. Prathibha says:

    Hi,

    Thanks for making the explanation of normalization so clear and simple.I loved every bit of explanation.Your efforts is greatly admired.

  6. Prachi says:

    Really very well explained..

  7. Sham says:

    Awesome work!

  8. daz says:

    Thanks, this was really help, keep it up…

  9. Sakthi Kumar Pandian says:

    Its really good.step by step explaination is very nice to understand clearly..

    Thanks.

  10. Raja says:

    crisp , to the point , amazing clarity . Simply superb 🙂 .

  11. Sanath says:

    Very clear presentation… Great work…

  12. vivek arya says:

    OMG…. Despite reading texts by big names (Korth, Chen etc) i couldn’t clear it out that what was mormalisation. But reading your text has cleared every concept of mine regarding normal forms.

    It goes by the saying the most famous books by the most famous authors are generally the most complex.

  13. Hariprasad says:

    Hi,
    Its a really great article. Every line provides valuable inputs to the readers. Excellent narration.

    Thanks,

    Hariprasad R

  14. Praveen NV says:

    The example taken and basics of normalization is very clear.Thanks for the info.

  15. Don Saelzler says:

    With SAP BI, the rules about normal forms are often ignored during ETL, so, the concepts receded in my mind as I use(d) the model provided by SAP. Reading this made the concepts fresh again, and provided ‘handles’ better than I had before. Thx.

  16. Thiyagu says:

    This is definetly an excellent way of putting the Normalization concepts in a Novice Mind. Well Done Author !

  17. Raj Kumar says:

    this tutorial helped me alot,its simply outstanding!!!!

  18. Ankush says:

    Very well framed tutorial.

    Hope to see another tutorial for other normal forms too.

    Great work!!!!!

  19. Roberto F. says:

    Thank you very much for your explanation in your tutorial, with the examples you have given clarity to this complex subject.

  20. Sanjay says:

    Absolutely brilliant… Thank you so much

  21. Charles says:

    THis is the most informative tut out there! I struggled with this concept and my textbook never made any sense, thank u. Like really, THANK YOU!

  22. karthikeyan.p says:

    simply superb….nice work…thanks

  23. Pritish Kulkarni says:

    A very nice article to explain 3 NFs. The step by step process makes it really easy to understand. I have been working as DB developers for several years and although I knew what the 3 NFs were, I have not found anything that explains the NFs in such simple words….

    I agree with a point made by Chad though. In real world the price of an item can change in the due cource of time, so there is nothing wrong with keeping the price in the order_item table..

  24. Leann says:

    I am a student just learning this stuff. After all the reading I’ve done on this for the beginnings of a class project, this is THE BEST tutorial I’ve come across and helped sooooo much! Thanks!!

  25. Anoop says:

    Really dear its veru usefull.
    Thanx for providing this type of such a gud doc.

  26. Anoop says:

    Really dear its very useful.
    Thanx for providing this type of such a gud doc.

  27. James Bragg says:

    With regard to price:

    Sevral have commented on how they would include it back on the items table. however this breaks NF3. I think we all agree, while this model is a good start, it’s far from ready for the real world. you have to consider time and how you want to deal with updates. I’d use a Cange History table on the price and address info as well.

  28. Ragesh says:

    Good one…Keep up the good work…:):D

  29. Bob Schmidt says:

    Thank for this and trusting you will not object, I am going to post a link to your pdf in an email I am distributing here at work.

    Your work is far better than what is found on Wikipedia, I would love for you to get it linked there. It is better than the top 5 links found in Google.

    I would like your opinion on a this: your model would still be in 3NF if you were to drop the INVOICE entity and instead have a simple m:m between order line and customer. I know this is not customary.

    My reasoning is:
    1) Nothing in the forms dictates that we eliminate repetition of a data value. And I do think that mulling this over is worthwhile.
    2) The only consequential fact is that the customer wants the item.
    3) The implementation of this model has resulted in false rules in that some order processing systems will not allow order lines to be moved between orders.

    If it is true that the ORDER is composed of lines such that a different set of lines constitutes something different, then your model stands.

    Of course, this is my opinion and I would love a response.

    – Bob Schmidt

  30. Bob Schmidt says:

    Correction…
    I would like your opinion on a this: your model would still be in 3NF if you were to drop the ORDER entity and instead ORDER_LINE resolves the m:m between CUSTOMER and ITEM. Order date repeats on each line as does order number. Order number is not a key, just a tag. I know this is not customary.

    My reasoning is:
    1) Nothing in the forms dictates that we eliminate repetition of a data value. And I do think that mulling this over is worthwhile.
    2) The only consequential fact is that the customer wants the item.
    3) The implementation of this model has resulted in false rules in that some order processing systems will not allow order lines to be moved between orders.

    If it is true that the ORDER is composed of lines such that a different set of lines constitutes something different, then your model stands.

    Of course, this is my opinion and I would love a response.

  31. Nisha says:

    Articale is too good… The concept has been explained in so neat fashion. Kudos….
    Would have been nice, if we had continued with BCNF and 4NF too…

  32. Snake says:

    Thanks! Neat little article this. Using it to study for my exam !

  33. realy i never seen this type of top level notes before at any where. keep it and moves to describe the database more topics like that.

  34. Mahesh says:

    It is a wonderful article.It really cleared all my doubts in normalizing table.I guarantee that who ever reads this article must leave some comments.

    Thanks
    Mahesh

  35. Ravi says:

    It’s a well organized article which coverup the whole content of normalization…..

    Thanks

    Ravi..

  36. Chatura says:

    Great Work!!!!

    Very useful article.Keep it up the good work

    Thank you

  37. Pretty Geeks says:

    Nice and detailed article to clear concepts on urgent basis especially when have short time to prepare for Database interview. ThaNks

  38. Nilesh says:

    Hi,

    This is very good article.It clears my cocept abt normlisation.

  39. Mare says:

    I understand what 3rd normal form is and when I have had to perform an ETL function on a text file with repeating groups, I have always used and ETL tool (cognos’ data manager) that has a pivot functions that creates this process perfectly. However, I have never written the code from scratch to do so (kinda spoiled with the great ETL features),,but now I would like to know what is the SQL do perform this “pivot” function, i.e. I have a record that looks like:

    ProductNbr, Units, Jan, Feb, Mar, Apl, May…

    And I want to normalize it to be:

    Productnbr, Month, Units….

    This would be a miracle if you could show me what SQl could do this.

  40. Langdon says:

    Excellent ! I understood the real concept of Normalization only by our step-by-step procedures in it. You pulled the features of normalization at each step . May God provide everything you needs ! All the Best ! 🙂

  41. James says:

    Thanks, Fred! Much easier to understand the first 3 NFs now. I think the examples and discussion are well-thought out and make a real contribution to demystifying normalization.

  42. khl says:

    Jus love you for the way 3NF was framed here…. Thanks Fred! Need more such topics which would go for discussion.

  43. Pritam says:

    Pretty elaborate explanation of Normalization. I just loved it. Thanks

  44. Ganesh says:

    Excellent Work. Mind blowing. Just read this for the first time and understood the core concept behind normaization. Keep writing such eye opener ariticles. Thanks a lot for your time and effort. Very much appreciated.

  45. Eric D says:

    Best guide on Normalization there is!

  46. Evance Heally says:

    This is the best article I have ever come accross in my whole 5 years experience as a DBA. Normally we do normalization on assumption but after reading this article Im crystal clear about normalization…Thanx a lot dude….hats off…

  47. Saurabh Gupta says:

    This was the awesome explaination about the Normalization process
    i think that will help us a lot!!!!!!!!!!!
    Thanks to write this type of nice way in steps

  48. Francie Robertson says:

    Last but not least! I have your tut on my desktop and saved in my Diploma Studies folder as BEST reference material for 2010.
    Yes it.s hats off and airborn! Thanks again Fred….

  49. Swathi says:

    I was able to answer most of the questions with normal forms, but now I think ill be experr 😀 Thanks, very nicely put!

Leave a Reply

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