← Back to Pattern Catalog
Interactive Pattern

Relationship History

Relationship History models associations between business entities that change over time.

Problem

The relationship between two entities can change just like the entities themselves.

Most historical models focus on entities such as customers, contracts or products. However, the relationships between these entities often change over time as well.

A customer may switch advisors. A policy may move to a different broker. An employee may change departments. Historical reporting requires not only the correct entity state, but also the correct relationship state.

Current-state attributionMissing relationship historyOverlapping assignmentsRelationship gaps
Example

A policy moves from Broker A to Broker B during the year.

Policy P123
Broker A
Jan – Jun
Policy P123
Broker B
Jul – Dec
?
Reporting question
Who should receive attribution for an August snapshot: Broker A, Broker B, or the current broker?

Expected Result (Historical)

Snapshot Date
2024-08-31
Policy
P123
Broker
Broker B
×

Common Wrong Result (Risk)

Snapshot Date
2024-08-31
Policy
P123
Broker
Broker A / Current Broker
Snapshot date: August 31

Historical reporting must attribute the policy to Broker B, not Broker A. A current broker field alone cannot answer this reliably.

Test case

Try this Relationship History case in Target Table Validation

Use these sample target tables to test whether historical attribution uses the correct relationship at the snapshot date.

  1. Copy one of the target tables below.
  2. Open Target Table Validation.
  3. Paste the copied table as your target output.
  4. Check whether August is attributed to Broker B or incorrectly to Broker A.
Historized relationship target

Expected output: August is attributed to Broker B.

policy_id,broker_id,snapshot_date,valid_from,valid_to,relationship_status
P123,Broker B,2024-08-31,2024-07-01,2024-12-31,historized_relationship
Wrong target table

Risky output: attribution uses the current or wrong broker.

policy_id,broker_id,snapshot_date,valid_from,valid_to,relationship_status
P123,Broker A,2024-08-31,2024-01-01,2024-12-31,current_relationship_used
Open Target Table Validation →
Why it happens

Relationships are often treated as simple foreign keys even when they are time-dependent.

In many models, relationships are stored as current references: current broker, current advisor, current department or current sales organization. This works for current-state reporting, but it breaks historical attribution.

Once reporting asks “who owned this at the reporting date?”, the relationship itself must become historized.

Current foreign keysMissing valid-time periodsOne-to-many changesLate relationship updatesCross-system ownershipHistorical attribution
Common modeling approaches

Model the relationship as its own historized object.

Historized bridge
Store the association between two entities in a bridge table with valid_from and valid_to.
SCD2 relationship
Version the relationship when the linked entity changes, just like a historized dimension.
Bitemporal tracking
Track visible time as well when relationship corrections or late updates can change past attribution.
Attribution rule
Document whether reports use relationship-at-event-time, snapshot-date or as-known attribution.
Validation checks

Validate that each reporting date resolves to the intended relationship.

Detect overlapping relationship assignmentsDetect relationship coverage gapsValidate one active relationship where requiredCheck facts against relationship validityCompare historical attribution with expected ownership
Why it matters

Historical attribution often depends more on relationship history than on entity history.

Commission reporting, portfolio reporting and organizational KPIs all depend on knowing which relationship was active at a specific point in time.

Ignoring relationship history can produce historically incorrect reports even when all dimensions are perfectly historized.

Related Patterns
Dimension CompletionSnapshot ReproducibilityState ↔ Event AlignmentHistorical Coverage GapState ↔ State Alignment
Try it

Explore relationship history risks in the Workbench.

Use the Historical Modeling Workbench to reason about historized relationships, temporal joins, gaps, overlaps and historical attribution.

Open Historical Modeling Workbench →