Searching for a Global Address Book?
dweezle37 asks: "For the past few years I have been searching for an all inclusive Global Address Book. The main features I've looked for are: Global Access (most likely Web), possible integration into external programs for email address lookup and mail merge (i.e. Mail Clients, Office Suites, etc.), fully customizable (add/remove fields), and based on a standard protocol (i.e. LDAP, SQL, etc.). An open source project would cater best to being "fully customizable". What have others found or been using? Does this project exist?"
I have worked on such a kind of universal contact database. I've implemented it several times as SQL tables and am currently working on an object-relational version (for deployment on PostgreSQL). I intend to release the SQL under the GPL when I'm satified that it is complete and correct. In the mean time if you'd like a copy at the earliest release opportunity please email me and I'll add you to a list of people who want early copies.
Allow me to describe briefly how my database is organized.
The database models people, companies, etc. as "contactable entities" (CEs) and allows any CE to be a member of any other CE for the purpose of arbitrary grouping. For instance if there is a CE for a company and multiple CEs for the employees of that company, the employees could have a membership relationship with the company CE. There is a parent CE relation that all specific CE inherit from (this is an object-relational feature of postgresql). It is possible to create new CE types by simply creating a new table and inheriting the parent CE class. Frankly the design has worked in the past with just people and "groups"
CEs can have any number of arbitrarily defined identifiers. For instance, some people want to identify their contacts by their full name, however, in some cases people are given unique usernames, or customer numbers, or other unique identifier criteria. These identifiers can be stored easily and not all CEs have to share the same unique identifiers. Currently I'm having some problem enforcing integrity constraints on these identifiers effeciently.
The database also models "contact methods" (CMs) in an flexible way. CMs are phone numbers, email addresses, phone numbers, etc. Just like the CEs, CMs are defined by sub-classing a parent CM relation/table. You can create new CMs but just defining a new table that inherits the parent. A CE can have any number of CMs and two different CE's can share one CM.
All CMs have validity ranges. So change of address actions can occure naturally. You don't just replace the old address with the new one, you actually keep the old address in the database, insert a new address record and mark the valid_end_date of the old one appropriately and the valid_start_date of the new one appropriately. This is very handy.
I'm currently working on adding tables for tracking actually contact instances (phone calls, emails etc) but have not completed any signifcant work on this portion.
In the past I've implemented this design about 4 times in SQL and each time it has been a little different with a lot of unique compromises. I'm working on a design that I hope with be more universal and truely reusable now.