@greenstork is correct, there really is no true correct answer, its just a two options and each has pros and cons.
The main difference in options is that Option 1 would be a many-to-many
and Option 2 would represent a 1-to-many
relationship.
Here are some of the pros and cons as I see them. Note here, that some people may see some of the cons and pros and vice-versa, basically, a lot of this is subjective and really depends on the use case.
Option 1 - (many-to-many) is not standard functionality when it comes to relationships. In order to accomplish this you would need to create a junction object that had lookups or Master Detail relationships to both the contact object and your custom object. this is a much more flexible solution in that a contact could be related to more than 1 custom object.
Pros
- Contacts could have many relations to different custom objects.
- Different Related List for each relationship type
Cons
- More overhead as a custom junction object needs to be created and
maintained
- Reporting becomes a bit more complex as a third object is now
involved (junction object)
Option 2 - (1-to-many) is standard salesforce functionality when it comes to relationships. You simply just need to setup a lookup field on the contact object that looks up to your custom object. You could then put a type picklist field on the contact to indicate the type of relationship.
Pros
- Standard functionality
- Reporting is simple as it just involves the two related objects
Cons
- A bit rigid in that contacts can be related to one and only one custom object
- A single Related list for all relations, with a type field that differentiates the relationship type
role
rather thantype
as that adheres to the SFDC pattern used in the junction objectOpportunityContactRole