I've seen frequently that you should not have all address fields (zip, street, city, state, country, etc) in the same table as your user info table (pk_id, name, email... ).
This would be in violation of the 3rd normalization. That makes sense, all the address fields are not based on the user (or user's pk).
However, I have seen more than once that a zip code makes a good primary/foreign key to fix this? Huh? Example: Normalization of Database
Obviously more than one person can live in the same zip code so this does not make sense to me. It seems odd to me to keep the zip code in the user table but leave the rest of the address in another table.
What is the standard best way to have an address table separated, but still abiding by the rules of normalization?