Skip to main content

Guide to Salesforce Object Relationships: Lookup, Master-Detail & Junctions

In plain words: An object relationship in Salesforce is a special field type that connects two different database tables (objects) together, allowing you to link related records—like connecting an Account to its Contacts or linking Opportunities to Products.

The strength of Salesforce as an enterprise platform lies in its relational database engine. By establishing relationships between standard and custom objects, you avoid duplicate data entry, maintain data integrity, build unified cross-object reports, and automate business processes across related records.

Exploring Relationships in Salesforce: Unlocking the Power of Data Connections

1. The Primary Salesforce Relationship Types

Salesforce supports several distinct relationship types depending on how tightly coupled your data entities need to be:

  • Lookup Relationship (Loose Coupling): Links one object to another independently. The child record can exist without the parent. Deleting the parent record does not automatically delete the child (unless custom deletion behavior is configured).
  • Master-Detail Relationship (Tight Coupling): The child (detail) record depends completely on the parent (master). The detail record inherits the sharing and security settings of the master, and deleting the master cascades down to automatically delete all associated detail records.
  • Many-to-Many via Junction Object: Links each record of one object to multiple records of another object using a custom junction object with two master-detail relationships (for example, linking Students to Courses via an Enrollment junction object).
  • Hierarchical Relationship: A specialized lookup available only on the standard User object, allowing you to create chains like manager-to-employee hierarchies.
  • External & Indirect Lookup: Links Salesforce standard/custom objects to external data sources managed outside Salesforce via Salesforce Connect (__x objects).

2. Lookup vs. Master-Detail: Architectural Comparison

Choosing between a Lookup and Master-Detail relationship directly impacts data visibility, reporting capabilities, and record life cycles.

360 Comparison Card:
  • Parent Requirement: Lookup is optional by default; Master-Detail is strictly required on the child record.
  • Cascade Delete: Lookup preserves child records by default; Master-Detail automatically deletes detail records when the master is deleted.
  • Roll-Up Summary Fields: Supported natively only on the master object in a Master-Detail relationship (to calculate SUM, COUNT, MIN, or MAX of detail fields).
  • Security & Ownership: Lookup detail records have their own owners and sharing rules; Master-Detail child records inherit security and sharing directly from the master record.
  • Limits: An object can have up to 40 Lookup fields, but only up to 2 Master-Detail relationships.
Warning Trap — Converting Lookups to Master-Detail: You cannot directly create a Master-Detail relationship on an existing custom object if that object already contains records, because the new field would initially be blank. To convert a Lookup into a Master-Detail, populate every existing record's lookup field with a valid parent value first, then convert the field type in Object Manager.

3. Real-World Implementation: Junction Object Pattern

When you need to model Many-to-Many relationships—such as Job Applications connecting Candidates to Job Postings—a custom junction object is the platform-standard solution.

Step-by-Step Junction Object Setup:
  • Step 1: Create the two parent custom objects: Candidate__c and Position__c.
  • Step 2: Create a new custom object named Job_Application__c (the junction object).
  • Step 3: Create the first Master-Detail relationship pointing to Candidate__c (Primary Master).
  • Step 4: Create the second Master-Detail relationship pointing to Position__c (Secondary Master).
  • Result: Each candidate can apply for multiple positions, and each position can accept multiple candidate applications.

4. Best Practices for Managing Data Relationships

  • Prevent Data Skew: Avoid linking more than 10,000 child records to a single parent lookup or master record. Massive parent-child data skew causes record-locking issues and slow sharing recalculations during batch updates.
  • Leverage Cross-Object Formulas: Reference parent and grand-parent fields up to 10 relationships away in formula fields without writing custom Apex triggers.
  • Use Declarative Roll-Up Summaries: Use native roll-up summary fields on master objects where possible, or use Flow/Declarative Lookup Rollup Summaries (DLRS) when aggregating across loose Lookup relationships.
  • Clean Deletion Behaviors: When defining Lookups, explicitly choose whether to clear the lookup field value, restrict parent deletion if child records exist, or cascade delete.
Core Takeaway: Selecting the right relationship type—balancing loose Lookup connections against tightly coupled Master-Detail hierarchies—is the foundation of scalable data security, automated rollups, and robust reporting in Salesforce.