# Salesforce Data Model Template
Data model diagram template using `flowchart LR` for visualizing Salesforce object relationships with color coding, LDV markers, and relationship type labels.
## When to Use
- Documenting object relationships
- Planning data model changes
- Understanding existing schema
- Design reviews and architecture discussions
## Cloud-Specific Templates
For pre-built cloud diagrams, see:
- **[Sales Cloud ERD](sales-cloud-erd.md)** - Account, Contact, Opportunity, Lead, Product, Campaign
- **[Service Cloud ERD](service-cloud-erd.md)** - Case, Entitlement, Knowledge, ServiceContract
## Preferred Format: `flowchart LR`
Use `flowchart LR` (left-to-right) for data model diagrams. This format supports:
- Individual node color coding by object type
- Thick arrows (`==>`) for Master-Detail relationships
- Left-to-right flow for readability
- Simple object nodes (name + record count, no fields)
---
## Quick Reference
### Object Type Colors
| Type | Fill | Stroke | Example |
|------|------|--------|---------|
| Standard | `#bae6fd` | `#0369a1` | Account, Contact |
| Custom (`__c`) | `#fed7aa` | `#c2410c` | Invoice__c |
| External (`__x`) | `#a7f3d0` | `#047857` | SAP_Order__x |
### Relationship Arrows
| Arrow | Type | Meaning |
|-------|------|---------|
| `-->` | Lookup (LK) | Optional parent, no cascade delete |
| `==>` | Master-Detail (MD) | Required parent, cascade delete |
| `-.->` | Special | Conversion, indirect relationship |
### Metadata Annotations
| Annotation | When to Use |
|------------|-------------|
| `LDV[~4M]` | Record count >2M |
| `(317)` | Record count <2M |
---
## Query Org Metadata
Enrich diagrams with live org data:
```bash
python3 ../../scripts/query-org-metadata.py \
--objects Account,Contact,Opportunity,Case \
--target-org myorg
```
---
## Mermaid Template (Preferred)
```mermaid
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
flowchart LR
%% ═══════════════════════════════════════════════════════════════
%% LEGEND: LK = Lookup (-->), MD = Master-Detail (==>)
%% Colors: Blue = Standard, Orange = Custom, Green = External
%% ═══════════════════════════════════════════════════════════════
Account["Account
(317)"]
Contact["Contact
(346)"]
Opportunity["Opportunity
(6)"]
Case["Case
(2)"]
Account -->|"LK"| Contact
Account -->|"LK"| Opportunity
Account -->|"LK"| Case
Contact -->|"LK"| Case
%% Standard Objects - Sky Blue
style Account fill:#bae6fd,stroke:#0369a1,color:#1f2937
style Contact fill:#bae6fd,stroke:#0369a1,color:#1f2937
style Opportunity fill:#bae6fd,stroke:#0369a1,color:#1f2937
style Case fill:#bae6fd,stroke:#0369a1,color:#1f2937
```
---
## ASCII Fallback Template
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │
└─────────────────────────────────────────────────────────────────────────────┘
┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ ACCOUNT │── LK ──>│ CONTACT │── LK ──>│ CASE │
│ (317) │ │ (346) │ │ (2) │
└───────┬────────┘ └────────────────┘ └────────────────┘
│
│ LK
▼
┌────────────────┐
│ OPPORTUNITY │
│ (6) │
└────────────────┘
```
---
## Custom Object Example
Shows mixing Standard (blue) and Custom (orange) objects:
```mermaid
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
flowchart LR
%% Standard Objects
Account["Account
(317)"]
Product2["Product2
(50)"]
%% Custom Objects
Invoice["Invoice__c
(1,200)"]
InvoiceLine["Invoice_Line_Item__c
(5,400)"]
Account ==>|"MD"| Invoice
Invoice ==>|"MD"| InvoiceLine
Product2 -->|"LK"| InvoiceLine
%% Standard - Sky Blue
style Account fill:#bae6fd,stroke:#0369a1,color:#1f2937
style Product2 fill:#bae6fd,stroke:#0369a1,color:#1f2937
%% Custom - Orange
style Invoice fill:#fed7aa,stroke:#c2410c,color:#1f2937
style InvoiceLine fill:#fed7aa,stroke:#c2410c,color:#1f2937
```
---
## External Object Example
Shows Standard, Custom, and External objects together:
```mermaid
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
flowchart LR
Account["Account
(317)"]
SAPOrder["SAP_Order__x
(ext)"]
OrderLine["Order_Line__c
(2,400)"]
Account -->|"LK"| SAPOrder
SAPOrder -->|"LK"| OrderLine
%% Standard - Sky Blue
style Account fill:#bae6fd,stroke:#0369a1,color:#1f2937
%% External - Green
style SAPOrder fill:#a7f3d0,stroke:#047857,color:#1f2937
%% Custom - Orange
style OrderLine fill:#fed7aa,stroke:#c2410c,color:#1f2937
```
---
## LDV (Large Data Volume) Example
Objects with >2M records show LDV indicator:
```mermaid
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
flowchart LR
Account["Account
LDV[~4M]"]
Contact["Contact
LDV[~8M]"]
Case["Case
(450K)"]
Account -->|"LK"| Contact
Account -->|"LK"| Case
Contact -->|"LK"| Case
style Account fill:#bae6fd,stroke:#0369a1,color:#1f2937
style Contact fill:#bae6fd,stroke:#0369a1,color:#1f2937
style Case fill:#bae6fd,stroke:#0369a1,color:#1f2937
```
---
## Best Practices
1. **Use `flowchart LR`** - Left-to-right flow is easier to read
2. **Keep objects simple** - Show name + record count only (no fields)
3. **Color code by type** - Blue=Standard, Orange=Custom, Green=External
4. **Use correct arrows** - `-->` for Lookup, `==>` for Master-Detail
5. **Add LDV indicators** - For objects >2M records
6. **Use API names** - Show `Account` not "Accounts"
---
## ERD Conventions
See **[ERD Conventions](../../references/erd-conventions.md)** for full documentation.