SCD là cách xử lý khi thuộc tính của một dimension thay đổi theo thời gian, ví dụ khách hàng đổi địa chỉ, sản phẩm đổi danh mục. Câu hỏi cốt lõi: báo cáo cũ nên hiển thị giá trị cũ hay mới?
Type 1 — ghi đè: cập nhật thẳng giá trị mới vào dòng cũ. Không giữ lịch sử, dùng khi giá trị cũ không có ý nghĩa, như sửa lỗi chính tả tên khách.
Type 2 — thêm dòng mới: đóng dòng cũ lại và thêm một dòng mới với surrogate key mới. Cần thêm cột ngày hiệu lực, ngày hết hiệu lực và cờ bản ghi hiện tại.
| customer_sk | customer_id | city | valid_from | valid_to | is_current |
|---|---|---|---|---|---|
| 101 | KH001 | Hà Nội | 2024-01-01 | 2026-03-31 | false |
| 245 | KH001 | TP.HCM | 2026-04-01 | 9999-12-31 | true |
Đơn hàng đặt tháng 2/2026 trỏ vào customer_sk = 101, nên báo cáo doanh thu theo thành phố vẫn tính đơn đó cho Hà Nội, đúng với thời điểm phát sinh.
Type 3 (thêm cột previous_city) chỉ giữ được một lần thay đổi, ít dùng.
Lưu ý: Type 2 làm dimension to dần; chỉ bật cho những cột mà nghiệp vụ thật sự cần lịch sử (vùng, hạng thành viên), còn các cột khác trong cùng bảng vẫn có thể xử lý như type 1.