I'm trying hard to understand and apply rules of normalization for a database I'm creating, but I came across a question related to US Zip Codes.
I was following along with a book that was doing a step by step walk through of normalizing a database (sql server 2005 for developers). In that book, in order to avoid duplicate data, they remove city and state from one table, and add it to a ZipCodes table, storing only ZipCodes in the Address table. Then, they can just do a look-up of city/state by the Zip Code.
There is only one problem with this...several towns often share the same Zip Code (my town included, shares with two other neighboring towns). So, this doesn't work. They can be differentiated by Zip + 4, but you can't require people to input their Zip + 4, after all, who remembers it? I don't know my +4 off the top of my head.
Is it really bad normalization practice to keep the city/state in the Address table, even if the same city/state combos will appear over and over again?
In general, I guess the question is: Is third normal form a practical and necessary goal, or just an 'ideal' that is not always achieved?