afv-library/skills/external-diagram-mermaid-generate/references/erd-conventions.md

8.9 KiB

ERD Conventions for sf-diagram

Standardized conventions for Salesforce data model diagrams with object type indicators, LDV markers, OWD annotations, and relationship type labels.

Object Type Indicators

Indicator Object Type Color (Flowchart) Fill Stroke API Suffix
[STD] Standard Object Sky Blue #bae6fd #0369a1 None
[CUST] Custom Object Orange #fed7aa #c2410c __c
[EXT] External Object Green #a7f3d0 #047857 __x

Examples

Account [STD]         → Standard Salesforce object
Invoice__c [CUST]     → Custom object
SAP_Product__x [EXT]  → External object via Salesforce Connect

LDV (Large Data Volume) Indicator

Objects with >2M records should display an LDV indicator to highlight potential performance considerations.

Record Count Display Format Example
< 2,000,000 (none) Account
2M - 10M LDV[~XM] LDV[~4M]
10M - 100M LDV[~XXM] LDV[~15M]
> 100M LDV[~XXXM] LDV[~250M]

Query Record Count

sf data query --query "SELECT COUNT() FROM Account" --target-org myorg --json

In Diagram

erDiagram format (in entity description):

Account {
    Id Id PK "[STD] LDV[~4M]"
    Text Name "Required"
}

Flowchart format (in node label):

Account["Account<br/>LDV[~4M]"]

OWD (Org-Wide Default) Display

Display sharing model on entities to show default record access levels.

OWD Setting Display Meaning
Private OWD:Private Owner + role hierarchy only
PublicRead OWD:Read All users can view
PublicReadWrite OWD:ReadWrite All users can view and edit
PublicReadWriteTransfer OWD:Full All users have full access
ControlledByParent OWD:Parent Inherits from master object
FullAccess OWD:Full Full access to all

Query OWD

sf sobject describe --sobject Account --target-org myorg --json | jq '.result.sharingModel'

Common OWD Patterns

Object Typical OWD Notes
Account Private Most orgs restrict account access
Contact ControlledByParent Usually follows Account OWD
Opportunity Private Sales data is sensitive
Case Private or Public Read Depends on support model
Lead Public Read/Write Often shared across sales

Relationship Type Labels

Distinguish between Lookup and Master-Detail relationships for understanding data dependencies.

Label Relationship Cascade Delete Roll-Up Required Parent
LK Lookup No No No
MD Master-Detail Yes Yes Yes

In erDiagram Syntax

erDiagram
    Account ||--o{ Contact : "LK - has many"
    Account ||--o{ Invoice__c : "MD - owns"

In Flowchart Syntax

Type Arrow Visual
Lookup --> Single arrow
Master-Detail ==> Thick double arrow
flowchart TB
    Account -->|"LK"| Contact
    Account ==>|"MD"| Invoice

Cardinality Notation (Crow's Foot)

Standard ERD cardinality symbols:

Symbol Meaning Description
|| Exactly one One and only one
|o Zero or one Optional, at most one
o{ Zero or many Optional, any number
|{ One or many Required, at least one

Common Salesforce Patterns

erDiagram
    %% One Account has many Contacts (optional)
    Account ||--o{ Contact : "has many"

    %% One Opportunity has many Line Items (optional)
    Opportunity ||--o{ OpportunityLineItem : "contains"

    %% Contact required for OpportunityContactRole
    Contact ||--|{ OpportunityContactRole : "plays role"

    %% Self-referential (Account hierarchy)
    Account ||--o{ Account : "parent of"

Entity Metadata Row Pattern

Add a special metadata row in erDiagram entities to consolidate annotations:

erDiagram
    Account {
        Id Id PK "[STD]"
        Text Name "Required"
        Lookup ParentId FK "Account (Self)"
        Text __metadata__ "LDV[~4M] | OWD:Private"
    }

Note: The __metadata__ row is a convention for displaying object-level info within the erDiagram entity block.


Color Palette for ERD

Entity Colors (for Flowchart ERD)

Object Type Fill Stroke Text
Standard #bae6fd #0369a1 #1f2937
Custom #fed7aa #c2410c #1f2937
External #a7f3d0 #047857 #1f2937

Subgraph Colors (for Grouping)

Category Fill Stroke Style
Standard Group #f0f9ff #0369a1 dashed
Custom Group #fff7ed #c2410c dashed
External Group #ecfdf5 #047857 dashed
Legend #f8fafc #334155 dashed

Style Declarations

%% Standard Object - Sky Blue
style Account fill:#bae6fd,stroke:#0369a1,color:#1f2937

%% Custom Object - Orange
style Invoice fill:#fed7aa,stroke:#c2410c,color:#1f2937

%% External Object - Green
style SAP_Product fill:#a7f3d0,stroke:#047857,color:#1f2937

%% Subgraph - Standard group
style std fill:#f0f9ff,stroke:#0369a1,stroke-dasharray:5

Query Commands Reference

Batch Query Script

Use the provided Python script for efficient metadata queries:

python3 ../scripts/query-org-metadata.py \
    --objects Account,Contact,Lead,Opportunity,Case \
    --target-org myorg \
    --output table

Manual Queries

Record Count (LDV):

sf data query --query "SELECT COUNT() FROM Account" --target-org myorg --json

OWD Setting:

sf sobject describe --sobject Account --target-org myorg --json | jq '.result.sharingModel'

Object Type Check:

sf sobject describe --sobject Invoice__c --target-org myorg --json | jq '.result.custom'

Complete Example

Flowchart ERD with All Conventions

%%{init: {"flowchart": {"nodeSpacing": 60, "rankSpacing": 50}} }%%
flowchart TB
    subgraph legend["LEGEND"]
        direction LR
        L_STD["Standard [STD]"]
        L_CUST["Custom [CUST]"]
        L_EXT["External [EXT]"]
        L_LK["─── LK (Lookup)"]
        L_MD["═══ MD (Master-Detail)"]

        style L_STD fill:#bae6fd,stroke:#0369a1,color:#1f2937
        style L_CUST fill:#fed7aa,stroke:#c2410c,color:#1f2937
        style L_EXT fill:#a7f3d0,stroke:#047857,color:#1f2937
        style L_LK fill:#f8fafc,stroke:#334155,color:#1f2937
        style L_MD fill:#f8fafc,stroke:#334155,color:#1f2937
    end

    subgraph std["STANDARD OBJECTS"]
        Account["Account<br/>LDV[~4M] | OWD:Private"]
        Contact["Contact<br/>OWD:Parent"]
        Opportunity["Opportunity<br/>LDV[~2M] | OWD:Private"]
    end

    subgraph cust["CUSTOM OBJECTS"]
        Invoice["Invoice__c<br/>OWD:Private"]
        InvoiceLine["Invoice_Line__c"]
    end

    subgraph ext["EXTERNAL OBJECTS"]
        SAP["SAP_Product__x"]
    end

    %% Relationships
    Account -->|"LK"| Contact
    Account -->|"LK"| Opportunity
    Account ==>|"MD"| Invoice
    Invoice ==>|"MD"| InvoiceLine
    InvoiceLine -->|"LK"| SAP

    %% 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

    %% Custom Objects - Orange
    style Invoice fill:#fed7aa,stroke:#c2410c,color:#1f2937
    style InvoiceLine fill:#fed7aa,stroke:#c2410c,color:#1f2937

    %% External Objects - Green
    style SAP fill:#a7f3d0,stroke:#047857,color:#1f2937

    %% Subgraph styling
    style legend fill:#f8fafc,stroke:#334155,stroke-dasharray:5
    style std fill:#f0f9ff,stroke:#0369a1,stroke-dasharray:5
    style cust fill:#fff7ed,stroke:#c2410c,stroke-dasharray:5
    style ext fill:#ecfdf5,stroke:#047857,stroke-dasharray:5

Best Practices

  1. Always include a legend in flowchart diagrams for color/arrow meaning
  2. Query live org data for accurate LDV and OWD values
  3. Use consistent naming - API names, not labels
  4. Group related objects using subgraphs
  5. Limit fields shown to key relationships (5-10 per entity max)
  6. Show relationship direction - parent on left, child on right
  7. Mark required relationships with appropriate cardinality

References