Relational database for address model
Here's what we did in LedgerSMB:


Entity table storing basic container info on individuals and businesses
location table storing address information.
Right now we have a join table between address and entity, but in future versions that will probably be merged with the address table.
Tables 'person' and 'company' which extend entity for that purpose.


That basic structure would work on MySQL too.  On PostgreSQL we do some magic with partial unique indexes to make sure that billing addresses are unique per entity, but contact addresses are not.  This would not be possible to enforce in MySQL as easily though it could be done with creative design.