Account-Contact-Opportunity core model
The standard B2B triad (Account is the company, Contact is the person, Opportunity is the deal) plus the two junctions that make buying-committee and product reporting possible.
WhenEvery B2B org, day one. This is the load-bearing model every rollup, forecast, and routing rule reads; you decide it before you create a single custom field.
- The model
- Account (the company) with Contact hanging off it via Contact.AccountId (a lookup, not master-detail, so a contact can survive a reparent).
- Opportunity linked to Account via Opportunity.AccountId (lookup, effectively required in the standard UI).
- OpportunityContactRole junction (ContactId, OpportunityId, Role, IsPrimary) carries the many-to-many buying committee, one primary per opp.
- OpportunityLineItem holds the products on the deal, each pointing at a PricebookEntry.
- AccountContactRelation junction for contacts that touch more than one account, gated by the Contacts to Multiple Accounts org setting.
- One grain per object: company facts on Account, person facts on Contact, deal facts on Opportunity, product facts on the line item.
A field stored off its true grain goes stale the moment the source updates, and recurring revenue that lives off the Opportunity object never reaches the CRO ARR number.