Bài viết kiến thức
Star Schema và Snowflake Schema trong Data Warehouse
Star schema gồm một bảng fact ở trung tâm nối với các bảng dimension. So sánh star schema và snowflake schema, các loại bảng fact và 8 loại Slowly Changing Dimension.
Bảng fact và bảng dimension là gì?
| Thành phần | Chứa gì | Ví dụ (bán lẻ) |
|---|---|---|
| Bảng fact | Số đo định lượng của một sự kiện nghiệp vụ + khóa ngoại tới các dimension | Số lượng, đơn giá, doanh thu của từng dòng hóa đơn |
| Bảng dimension | Thuộc tính mô tả dùng để lọc, nhóm, gắn nhãn | Ngày, Sản phẩm, Cửa hàng, Khách hàng, Khuyến mãi |
| Grain | Mức chi tiết của một dòng trong bảng fact | “Một dòng = một sản phẩm trên một hóa đơn” |
| Surrogate key | Khóa thay thế (số nguyên) do kho dữ liệu tự sinh cho dimension | product_key = 1024 |
Kimball nhấn mạnh việc khai báo grain trước khi chọn dimension và fact, vì mọi số đo trong bảng fact phải cùng một grain [2].
Star schema là gì?
Star schema (lược đồ hình sao) là mô hình trong đó bảng fact nằm ở trung tâm và mỗi bảng dimension nối trực tiếp với bảng fact. Các dimension thường được phi chuẩn hóa (denormalized) — ví dụ bảng Sản phẩm chứa luôn tên danh mục và tên nhãn hàng — để truy vấn đơn giản và nhanh [1].
-- Doanh thu theo danh mục sản phẩm và tháng (star schema)
SELECT d.year_month, p.category, SUM(f.sales_amount) AS revenue
FROM fact_sales f
JOIN dim_date d ON f.date_key = d.date_key
JOIN dim_product p ON f.product_key = p.product_key
GROUP BY d.year_month, p.category;
Snowflake schema là gì?
Snowflake schema (lược đồ bông tuyết) chuẩn hóa các dimension thành nhiều cấp: ví dụ Sản phẩm → Danh mục → Ngành hàng nằm ở ba bảng riêng. Mô hình giảm dữ liệu trùng lặp nhưng tăng số phép join và độ phức tạp cho người dùng.
So sánh Star schema và Snowflake schema
| Tiêu chí | Star schema | Snowflake schema |
|---|---|---|
| Dimension | Phi chuẩn hóa, một bảng mỗi dimension | Chuẩn hóa, nhiều bảng mỗi dimension |
| Số phép join | Ít | Nhiều |
| Dung lượng dimension | Lớn hơn (có trùng lặp) | Nhỏ hơn |
| Dễ hiểu với người dùng BI | Cao | Thấp hơn |
| Hiệu năng truy vấn BI | Thường tốt hơn | Có thể chậm hơn do nhiều join |
| Khi nên dùng | Mặc định cho tầng trình bày/BI | Dimension rất lớn, phân cấp sâu, cần tiết kiệm lưu trữ |
Các loại bảng fact
- Transaction fact: mỗi dòng là một sự kiện tại một thời điểm (một dòng hóa đơn) [2].
- Periodic snapshot fact: mỗi dòng tóm tắt trạng thái tại cuối một kỳ đều đặn (tồn kho cuối ngày, số dư cuối tháng) [2].
- Accumulating snapshot fact: mỗi dòng theo dõi một quy trình có các mốc xác định và được cập nhật khi quy trình tiến triển (đơn hàng: đặt → xuất kho → giao → thanh toán) [2].
- Factless fact: ghi nhận sự kiện không có số đo (điểm danh sinh viên) [2].
Về tính cộng dồn, số đo có thể là additive (cộng được theo mọi dimension, như doanh thu), semi-additive (không cộng theo thời gian, như số dư tài khoản) hoặc non-additive (như tỷ lệ phần trăm) [2].
Slowly Changing Dimension (SCD) có những loại nào?
SCD là kỹ thuật xử lý khi thuộc tính của dimension thay đổi theo thời gian (ví dụ khách hàng chuyển địa chỉ). Kimball Group liệt kê 8 loại [2]:
| Loại | Cách xử lý | Lưu lịch sử? |
|---|---|---|
| Type 0 | Giữ nguyên giá trị gốc | Không (không bao giờ đổi) |
| Type 1 | Ghi đè giá trị cũ | Không |
| Type 2 | Thêm dòng mới với surrogate key mới, kèm ngày hiệu lực | Có, đầy đủ |
| Type 3 | Thêm cột lưu giá trị trước đó | Một phần (giá trị liền trước) |
| Type 4 | Tách thuộc tính thay đổi nhanh ra mini-dimension | Có |
| Type 5 | Mini-dimension + outrigger Type 1 | Có |
| Type 6 | Thêm thuộc tính Type 1 vào dimension Type 2 | Có, kèm giá trị hiện hành |
| Type 7 | Kết hợp song song Type 1 và Type 2 | Có, kèm góc nhìn hiện hành |
Câu hỏi thường gặp
Star schema và snowflake schema khác nhau thế nào?
Star schema giữ mỗi dimension trong một bảng phi chuẩn hóa nối trực tiếp với bảng fact; snowflake schema chuẩn hóa dimension thành nhiều bảng phân cấp. Star schema dễ hiểu và truy vấn nhanh hơn; snowflake schema giảm trùng lặp dữ liệu.
SCD Type 2 là gì?
SCD Type 2 xử lý thay đổi thuộc tính dimension bằng cách thêm một dòng mới với surrogate key mới và ngày hiệu lực, giữ nguyên dòng cũ, nhờ đó lưu được toàn bộ lịch sử thay đổi.
Grain trong data warehouse là gì?
Grain là mức chi tiết mà một dòng trong bảng fact biểu diễn, ví dụ “một sản phẩm trên một hóa đơn” hoặc “số dư một tài khoản vào cuối ngày”. Grain phải được khai báo trước khi chọn dimension và fact.
Vì sao cần surrogate key?
Surrogate key tách kho dữ liệu khỏi khóa của hệ thống nguồn, cho phép lưu nhiều phiên bản của cùng một thực thể (SCD Type 2), tích hợp khóa từ nhiều nguồn và giữ phép join gọn nhẹ.
Nguồn tham khảo
- Kimball, R. & Ross, M. (2013). The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling (3rd ed.). John Wiley & Sons.
- Kimball Group. “Dimensional Modeling Techniques”. Kimball Group. www.kimballgroup.com