Loosely coupled vs tightly coupled relationships
A Lookup Relationship in Salesforce is the many-to-one relationship that lets one record reference another without taking ownership of it. A Contact has a Lookup Relationship to Account; an Opportunity has a Lookup Relationship to Account; an Activity has a Lookup Relationship through WhoId and WhatId. Each lookup field stores the Id of the target record, and the parent record can have any number of children pointing to it through the lookup. Lookup Relationships are the most common relationship type in any Salesforce data model: most standard relationships are lookups, and most Custom Objects need lookups to standard objects to function. Lookup Relationships are the relational-database analog of a foreign key with no cascade delete by default. The child record carries the parent's Id; deleting the parent leaves the child's lookup field blank (the default cascade behavior is to clear the field, not to delete the child). This makes Lookup Relationships safe for optional or many-to-one connections where the child can survive without the parent. The trade-off is that lookups do not propagate sharing or ownership the way Master-Detail Relationships do; if the child needs to inherit the parent's sharing, lookups are the wrong tool.
A master-detail relationship is a parent-child link between two Salesforce objects where the detail (child) record inherits sharing, ownership, and lifecycle from the master (parent). If the master is deleted, every detail record is deleted with it. Detail records cannot exist without a parent, and the parent reference cannot be left blank on creation. That tight coupling is what separates master-detail from a lookup. Lookup is optional and loose. Master-detail is required and structural. The choice locks in roll-up summaries, cascade deletes, ownership inheritance, and the ability to build many-to-many junction objects. Once detail records exist, converting the relationship type gets restrictive, so the decision belongs at the design stage, not after data load.
| Dimension | Lookup Relationship | Master-Detail Relationship |
|---|---|---|
| Coupling | Loose - child can exist independently | Tight - child cannot exist without parent |
| Deletion | Deleting parent does not delete children | Deleting parent cascades to children |
| Required | Lookup field can be optional | Parent field is always required |
| Roll-Up Summaries | Not supported natively | Supported (COUNT, SUM, MIN, MAX) |
| Ownership | Child has its own owner | Child inherits parent's owner |
When child records should exist independently or parent is optional.
When child records must always belong to a parent and you need roll-up summaries.