Copyright (c) 2026 MindMesh Academy. All rights reserved. This content is proprietary and may not be reproduced or distributed without permission.

2.1.3. Slowly Changing Dimensions (SCDs)

💡 First Principle: Dimensions change over time. SCD types determine how to handle historical tracking—from ignoring history (Type 1) to complete historical tracking (Type 2).

Scenario: A customer moves from New York to Los Angeles. Should historical sales show New York (where they were at purchase time) or Los Angeles (current address)?

SCD Types

TypeBehaviorUse Case
Type 0Never updateFixed reference data
Type 1OverwriteError corrections, no history needed
Type 2Add new rowFull history required
Type 3Add columnLimited history (current + previous)
Type 4Separate history tableHistory in dedicated mini-dimension

Type 2 SCD Implementation

  • Add columns: EffectiveDate, ExpirationDate, IsCurrent
  • On change: Set existing row ExpirationDate and IsCurrent=False; Insert new row with new values
  • Benefit: Complete history preserved; facts link to correct historical version
Visual: Type 2 SCD Example
CustomerKeyCustomerIDAddressEffectiveDateExpirationDateIsCurrent
1001C123New York2020-01-012025-06-30False
1002C123Los Angeles2025-07-019999-12-31True

⚠️ Common Pitfall: Choosing Type 1 to "keep it simple" when history is required. Type 1 overwrites history permanently—if historical analysis is needed later, the data is lost.

Reflection Question: Your business needs to analyze customer behavior over time, including when customers changed regions. Which SCD type would you implement, and why?