SapotaCorp

SFMC Data Model and Cardinality: Wire DEs Together Without Regret

Teams create Data Extensions as requirements arrive, ending up with 20 DEs that can't be joined. A Database of Record and correct cardinality in Contact Builder are the steps that prevent this.

Key takeaways

  • Teams that create DEs as requirements arrive end up with 20 DEs that cannot be joined. The fix is a Database of Record (DBoR) decision plus correct cardinality in Contact Builder. The 1-hour design exercise prevents quarters of rework.
  • Database of Record is the system that owns the canonical Subscriber Key. Usually CRM (Salesforce, HubSpot) but can be e-commerce, loyalty platform, or a dedicated MDM. Lock the DBoR choice — every DE in SFMC keys to it.
  • Cardinality (1:1, 1:Many, Many:Many) defines how DEs relate in Contact Builder. Customer to address is 1:Many (one customer, multiple addresses); customer to order is 1:Many; customer to product purchased is Many:Many through an Order Item junction. Getting cardinality wrong breaks every subsequent SQL Query join.
  • Contact Builder enforces the cardinality at the Contact level. The pattern is set during DE creation via Linking the data. Skipping this step (just creating DEs without linking) leaves the data accessible via SQL Query but invisible to Journey Builder's behaviour splits — half the platform's power locked behind a setup step.
SFMC Data Model and Cardinality: Wire DEs Together Without Regret

Teams new to SFMC create Data Extensions as requirements arrive. Today's send needs a list, tomorrow's loyalty feature needs a separate DE, next week's CRM sync adds three more. 3 months in: 20 DEs, nothing can be joined, no cross-data segmentation works, no audit trail.

The fix is 30 minutes on a whiteboard before the first DE exists. Two concepts carry it: Database of Record and Cardinality.

Database of Record (DBOR)

The DBOR is the single source of truth for subscriber identity. Every other data source points at it.

Discovery question for the client:

Which system currently holds the newest, most accurate subscriber information?
  - CRM (Salesforce, HubSpot)?
  - E-commerce platform (Shopify, Magento)?
  - Loyalty system?
  - A separate data warehouse?

One answer. If the client says "all of them," help them decide - usually by picking the system that currently drives business operations (order fulfillment, customer service queries).

The DBOR defines the Subscriber Key. All SFMC DEs that hold subscriber data use an ID that maps back to the DBOR.

Subscriber Key strategy

Once DBOR is decided, the Subscriber Key follows:

  • If DBOR is Salesforce CRM, use the CRM ContactID as Subscriber Key.
  • If DBOR is e-commerce, use the e-commerce customer ID.
  • If DBOR is a data warehouse, use whatever stable ID that warehouse assigns (often a UUID).

The Subscriber Key must be stable - never changes over a customer's lifetime. Email addresses change; Shopify IDs can reset on a store migration; a purpose-built CustomerID is safest.

Document the Subscriber Key rule in the data model doc. When new data sources arrive later, they get plumbed through the same Subscriber Key.

The hub-and-spoke model we use most

Rather than one giant DE with every column, split by function:

Master_Customer_DE (hub):
  - CustomerID (Subscriber Key)
  - EmailAddress
  - FirstName, LastName
  - MemberTier (from loyalty)
  - TotalSpend (from e-commerce)
  - SalesRepID (from CRM)

Spoke DEs referenced by CustomerID:
  - Order_History_DE (many rows per customer)
  - Preference_DE (1 row per customer)
  - Consent_DE (many rows per customer, one per consent event)

Lookup DEs (non-subscriber):
  - SalesRep_DE (keyed by SalesRepID)
  - Product_DE (keyed by SKU)
  - Store_DE (keyed by StoreID)

Master holds the subscriber-facing attributes. Spokes hold the detail. Joins happen via AMPscript Lookup or Automation Studio SQL, not by duplicating columns.

Cardinality in Contact Builder

When you link DEs in Contact Builder for cross-DE segmentation, SFMC asks about cardinality - the relationship between two DEs:

Cardinality Meaning Example
1:1 1 row in A relates to 1 row in B Customer -> primary Address (each customer has one primary)
1:Many 1 row in A relates to many rows in B Customer -> Orders (one customer, many orders)
Many:Many Many rows in A relate to many in B Customer -> Product (via Order_Items - each customer can buy many products, each product bought by many)

Getting cardinality wrong breaks segmentation:

  • Declaring 1:1 when it's actually 1:Many means SFMC ignores all but the first matched row.
  • Declaring 1:Many when it's actually 1:1 is harmless but lets you accidentally pick multiple rows.
  • Many:Many relationships require a junction DE (Order_Items) to resolve properly.

The data model doc we produce

Before touching SFMC for a new engagement, we write a 1-page data model:

  1. DBOR - which system is the source of truth.
  2. Subscriber Key - exact field name, data type, where it originates.
  3. Master DE - list of fields, types, nullability, source system.
  4. Spoke DEs - name, purpose, cardinality to Master, source system.
  5. Lookup DEs - name, purpose, primary key.
  6. Contact Builder relationships - which DEs get linked, cardinality.

Review with the client. Once signed off, building in SFMC follows the doc rather than the other way around.

Why this matters on inherited engagements

When picking up a poorly-modeled SFMC account, the symptoms are predictable:

  • Segmentation that should be possible isn't.
  • Same person appears multiple times in audiences.
  • Cross-DE reports have to be built with SQL outside SFMC.
  • Contact Builder has 15 linked DEs and nobody knows the cardinalities.

The remediation is the same whether you're starting fresh or remodeling: define DBOR, fix Subscriber Key, introduce a Master DE, migrate downstream.

Takeaway

Data modeling doesn't feel productive because you're not building anything yet. On SFMC engagements it's the most leveraged hour of the whole project. Write the data model doc, get client sign-off, then build. The alternative is the 20-DE sprawl that eats your Q2.


Modeling an SFMC data architecture? Our Salesforce team designs data models, Subscriber Key strategies, and Contact Builder relationships on production engagements. Get in touch ->

See our full platform services for the stack we cover.