Slowly Changing Dimension (SCD) Type 2

2022-07-23 data-engineeringdata-modellingdata-warehousing

This diagram shows how a slowly changing dimension type 2 table is implemented.

customer_number is the business key of the customer table while customer_id is a surrogate key. Customer 10001 is changing first_name from Kontext to Context.

SCD Type 2 will track history of changes. It is usually implemented to use effective_date to indicate the start date when the change becomes effective and is_current flag to indicate the current active records.

It can also be implemented using effective_from_date and effective_to_date. When effective_to_date is NULL or equals to a high date like (9999-12-31), the record is the latest version.

For performance and other considerations, it can also be implemented with a combination of effective_from_dateeffective_to_date and is_current.

cust_id
[Not supported by viewer]
customer_number
[Not supported by viewer]
first_name
[Not supported by viewer]
last_name
[Not supported by viewer]
effective_date
[Not supported by viewer]
is_current
[Not supported by viewer]
1
[Not supported by viewer]
10001
[Not supported by viewer]
Kontext
[Not supported by viewer]
Wonderful
[Not supported by viewer]
2022-01-01
[Not supported by viewer]
Y
[Not supported by viewer]
SCD Type 2 Merge (approach 1)
[Not supported by viewer]
cust_id
[Not supported by viewer]
customer_number
[Not supported by viewer]
first_name
[Not supported by viewer]
last_name
[Not supported by viewer]
effective_date
[Not supported by viewer]
is_current
[Not supported by viewer]
1
[Not supported by viewer]
10001
[Not supported by viewer]
Kontext
[Not supported by viewer]
Wonderful
[Not supported by viewer]
2022-01-01
[Not supported by viewer]
N
[Not supported by viewer]
1
[Not supported by viewer]
10001
[Not supported by viewer]
Context
[Not supported by viewer]
Wonderful
[Not supported by viewer]
2022-07-01
[Not supported by viewer]
Y
[Not supported by viewer]
cust_id
[Not supported by viewer]
customer_number
[Not supported by viewer]
first_name
[Not supported by viewer]
last_name
[Not supported by viewer]
effective_from_date
[Not supported by viewer]
effective_to_date
[Not supported by viewer]
1
[Not supported by viewer]
10001
[Not supported by viewer]
Kontext
[Not supported by viewer]
Wonderful
[Not supported by viewer]
2022-01-01
[Not supported by viewer]
NULL
[Not supported by viewer]
SCD Type 2 Merge (approach 2)
[Not supported by viewer]
cust_id
[Not supported by viewer]
customer_number
[Not supported by viewer]
first_name
[Not supported by viewer]
last_name
[Not supported by viewer]
effective_from_date
[Not supported by viewer]
effective_to_date
[Not supported by viewer]
1
[Not supported by viewer]
10001
[Not supported by viewer]
Kontext
[Not supported by viewer]
Wonderful
[Not supported by viewer]
2022-01-01
[Not supported by viewer]
2022-06-30
[Not supported by viewer]
1
[Not supported by viewer]
10001
[Not supported by viewer]
Context
[Not supported by viewer]
Wonderful
[Not supported by viewer]
2022-07-01
[Not supported by viewer]
NULL
[Not supported by viewer]
cust_id
[Not supported by viewer]
customer_number
[Not supported by viewer]
first_name
[Not supported by viewer]
last_name
[Not supported by viewer]
effective_from_date
[Not supported by viewer]
effective_to_date
[Not supported by viewer]
is_current
[Not supported by viewer]
1
[Not supported by viewer]
10001
[Not supported by viewer]
Kontext
[Not supported by viewer]
Wonderful
[Not supported by viewer]
2022-01-01
[Not supported by viewer]
NULL
[Not supported by viewer]
Y
[Not supported by viewer]
SCD Type 2 Merge (approach 3)
[Not supported by viewer]
cust_id
[Not supported by viewer]
customer_number
[Not supported by viewer]
first_name
[Not supported by viewer]
last_name
[Not supported by viewer]
effective_from_date
[Not supported by viewer]
effective_to_date
[Not supported by viewer]
is_current
[Not supported by viewer]
1
[Not supported by viewer]
10001
[Not supported by viewer]
Kontext
[Not supported by viewer]
Wonderful
[Not supported by viewer]
2022-01-01
[Not supported by viewer]
2022-06-30
[Not supported by viewer]
N
[Not supported by viewer]
1
[Not supported by viewer]
10001
[Not supported by viewer]
Context
[Not supported by viewer]
Wonderful
[Not supported by viewer]
2022-07-01
[Not supported by viewer]
NULL
[Not supported by viewer]
Y
[Not supported by viewer]