Suppose you have an Excel file with two sheets that you want to use to store family contact information. On the first sheet, you have the names of your contacts with their cell phone numbers. On the second sheet, you have mailing addresses for each family with landline phone numbers.
Now you want to print Christmas card labels to all your family contacts, which list all the names, but only one label per mailing address.
You need a way to link two normalized sets. All data in the 2 sets that you have is normalized. It is “atomic,” representing one “atom,” or a piece of information that cannot be broken down. None of this is repeated.
In the denormalized representation of 2 sets, you will have one list of all contacts with mail addresses that are repeated several times (cousin Alan lives with Uncle Bob at the same address, so he is listed both on Alan's lines and on Bob's.)
At this point, you want to enter the household ID in both sets to associate them. Each mailing address has one household identifier, each contact has a household value that can be repeated (cousin Alan and uncle Bob, who live in the same house, have the same home address).
Now say that we work and we need to track the number of contacts and households. Saving normalized data is great for maintenance purposes, because we want to store only contact data and home data in one place. When we update the address, we update it for all related contacts. Unfortunately, for performance reasons, when we ask the server to join two related sets, it takes forever.
Thus, a certain developer appears and creates one denormalized table with all numbers consisting of rows, one for each contact with household details. Performance improves, and space considerations are thrown right out of the window, since now we need space for 3 million rows instead of two.
Make sense?