I'm designing a database for contacts and I'm looking for some feedback on the current design.
What I want:
- A contact can be a person or an organization.
- A contact can have many groups.
- A contact can have many emails and addresses
- A contact can have one organization (employed)
- An organization can have many contacts (employees)
- A group can have many contacts.
What I have:
- Contact(Id, PersonId (FK), OrganizationId (FK), EmployerId (FK, self reference))
- Person(Id, FirstName, LastName, Birthday)
- Organization(Id, Name, Founded)
- Group(Id, Name)
- ContactGroup(Id, ContactId (FK), GroupId (FK))
- Email(Id, ContactId (FK), Name)
- Address(Id, ContactId (FK), Street, City, ZipCode, Country)
What bothers me the most is that the contact entity has one organization or one person, and also a self reference (EmployerId) if an organization has employees (which are also contact entities) and vice versa.
Is this a problem or see you a better way?
Best Answer
Check the "Data Model Resource Book, Vol. 1". It covers standard schemata for - among other things - contact management. Pretty much the whole CRM and accounting etc. side.
And yes, there are a lot of problems with your approach - but I wont replicate 30 pages or so from that book describing all the issues.