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

3.1.3. Slowly Changing Dimensions (SCDs)

💡 First Principle: Dimensions change over time, and how you handle those changes determines whether your historical analysis tells the truth. If a customer moves from New York to Los Angeles, should last year's sales show New York (where they were at purchase time) or Los Angeles (current address)? There's no single right answer—it depends on your business question.

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 (birth date)
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

⚠️ Exam Trap: Choosing Type 1 to "keep it simple" when history is required permanently destroys historical context. If stakeholders ever ask "what were our sales by customer region over time?" and you used Type 1, that data is gone. Clarify history requirements before choosing.

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

Alvin Varughese
Written byAlvin Varughese
Founder•15 professional certifications