Earlier in the year I was working on a Drupal site that heavily relied on the CiviCRM module.
From their website:
"CiviCRM is the first open source and freely downloadable constituent relationship management solution. CiviCRM is web-based, open source, internationalized, and designed specifically to meet the needs of advocacy, non-profit and non-governmental groups."
While working on this project I took a closer look at the datbase design for storing contact information. It may be over kill for most people, but at least it gives a good example of what can be done. (As well as a good example of best practices.)
You can read more about the database design on
this page.
You can also download the latest (version 1.7) MySQL create script for the entire civicrm database in the attachments. The script is very well crafted. Each field is commented and the actual coding style, is to me, excellent. I wish I had a script to study like this one when I first started out...
Here is a partial picture of the database
[myIMG]images/articles/civicrm/main_civicrm.png[/myIMG]