contradiction of 3rd normal form on address table
You should note that not every country has the same rules for addresses. I would believe that address_id (as an integer) is just a surrogate key for an entry in the Address table.  It is not a reference to the country.

If you want to look into the variations in addresses you might find the following interesting.

FRANK'S COMPULSIVE GUIDE TO POSTAL ADDRESSES

Regarding City/State/Country you will not always have all of these values available to you.  What about countries that do not have states?  

If you have a comprehensive data source for every city, state (including NULL cities and states), and country that is maintained, then you could avoid the extra column.

However, you will need to determine your workaround when some elements are missing. (As you can find examples in Frank's web page.) 

My personal opinion (not shared by everyone) is that a state and country column are often better than maintaining a large data set.  

If you need is extensive enough you could subscribe to a service to maintain you address information. Just do a web search to find a service that fits your budget.