Hi T'Kai,
You're in luck - or maybe not! The Universal Postal Union has recently
approved international address standard UPU S42. If you want to build a
system that will be compatible with all international addresses and
postal delivery point databases in every country that has one, start
reading here:
http://www.idealliance.org/news/2004/ci0422.asp.
For useful practical information including examples of addresses from
many countries, see
http://www.columbia.edu/kermit/postal.html.
There's no one "correct" set of fields. It depends what the database
needs to be able to do.
If it is absolutely certain that you will only ever want to sort by
country, use two fields: one for everything except the country, and one
for the country (with a lookup table with a list of countries to ensure
that they are entered consistently). This is neat and simple: you just
need to set up your labels etc. so that the country is only printed if
it is different from the country where you are.
(But get management to sign in blood that they understand that it won't
be possible to sort any other way: otherwise, sure as eggs is eggs in a
year or two someone will tell you to make it sort by city or postcode
too.)
If you do need to sort by city or postcode, things get much more
complicated because there are all sorts of variations on the US-standard
City State Zip
address line. For instance, most European Union countries use
CountryCode-PostCode City
so if you're keeping these elements in separate fields you have to write
cunning code to assemble them in the correct order depending on the
country.
I have been asked to create a database capable of handling both
international and US addresses. Does anyone have any idea how to handle
this efficiently? Keep in mind that letters, label, etc. will need to
be produced. I was considering creating a 255 character text box and
just let the user dump the entire address here. However, this does not
help with filtering if a mailing needs to be send to only a specific
state or country. Any suggestions would be appreciated.