I can see from your NM (New Mexico) location that the S MAIN ST and MAIN ST behave as one long street - I've done work all over the US and I can appreciate that distinction. In the North East (I'm from Connecticut), N MAIN ST and MAIN ST would most likely be on different sides of town...

Normalization is a huge point of debate among DB designers. There are actually 6 normal forms - fourth, fifth and sixth are so hard to explain and so not-real-world that most people never get to them...

We go by the philosophy that the data needs to be easy to look at and approach. Having a CITY table that has two columns - a CITYID and a CITYNAME, and storing the CITYID in the address table makes it impossible to look at the ADDRESS Table and see what the city is. You still have the "same value" for everyone living in EAST OSHKOSH, but it's a number and not a text value. It might take less space to store, but disk space is cheap and disks are fast. In my opinion that goes a step too far and has no real-life benefit - actually creates more of a headache when you want to get an address and city for a person (need to join).

Here's an example that might make the point. We have a table that stores the marks a kid gets in a class in high school. There are 4 marking periods - thus 4 marks. We have 4 fields MP1MARK, MP2MARK, MP3MARK and MP4MARK (there are actually more - final mark, semester average - but not needed to make this point). Some DB designers would make a CLASSMARK table that would store a row for each of these 4 marks. But they are distinctly different things - they are not all MARKS - they are for different marking periods - so we argue that they need to be all in the same ROW of a CLASS table - not a CLASSMARK table.

And to go a step further in our arguement - we already have 50000+ rows a year for each high school in a district for just the CLASS Table (5000 kids with 10 classes each). Adding a CLASSMARK table would be 200000 rows. We store our data forever - so quadrupling the number of rows for what we see as no gain is 3NF going to far.

I've see college admin systems with 500 tables - all with just a couple of columns each. Probably would get an A+ from a professor in NORMAL FORM design - but failed in the real world.