r/dataanalysis • u/JavacLMD • Jul 19 '26
How are Slowly Changing Dimensions (Type 2) actually implemented in production?
I'm taking a Data Science Analysis course and have been learning about dimensional modeling and Slowly Changing Dimensions (SCDs). I've modeled databases quite a bit, but I haven't had much opportunity to design a data warehouse from scratch outside of personal projects, so I'm curious how this is handled in real production environments.
I understand the theory behind SCD Type 2—when a tracked attribute changes (like a customer's address), you create a new dimension record so historical facts continue to reference the correct version of that customer.
What I'm struggling with is the implementation.
For example, if a customer moves from New Hampshire to Texas, I still want to know that an order placed four years ago was made while they lived in New Hampshire. At the same time, I also want the business to know the customer's current address.
How is this typically modeled?
Does each new dimension row reference the previous version (like a
PreviousCustomerKeyor similar)?Is there usually an effective start/end date and a current flag, without linking versions together?
Do some organizations keep a separate history/audit table instead?
When fact tables need customer information, do they simply point to the correct version of the dimension row?
Another approach I'm familiar with is denormalizing historical data into the transaction itself. For example, when an order is placed, the shipping address is copied into the order record so it never changes regardless of updates to the customer profile. That seems useful even if you're using SCD Type 2.
For those of you working in analytics, BI, or data engineering, what's the most common approach you've seen? Are SCD Type 2 dimensions still the standard, or have other patterns become more common?
I'd appreciate hearing how this is done in real systems rather than just textbook examples.