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.

  • Tác giả:
  • Cập nhật:
  • 4 phút đọc
  • 2 nguồn tham khảo

Bảng fact và bảng dimension là gì?

Fact và Dimension
Thành phầnChứa gìVí dụ (bán lẻ)
Bảng factSố đo định lượng của một sự kiện nghiệp vụ + khóa ngoại tới các dimensionSố lượng, đơn giá, doanh thu của từng dòng hóa đơn
Bảng dimensionThuộc tính mô tả dùng để lọc, nhóm, gắn nhãnNgày, Sản phẩm, Cửa hàng, Khách hàng, Khuyến mãi
GrainMứ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 keyKhóa thay thế (số nguyên) do kho dữ liệu tự sinh cho dimensionproduct_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

Star schema và Snowflake schema
Tiêu chíStar schemaSnowflake schema
DimensionPhi chuẩn hóa, một bảng mỗi dimensionChuẩn hóa, nhiều bảng mỗi dimension
Số phép joinÍtNhiều
Dung lượng dimensionLớn hơn (có trùng lặp)Nhỏ hơn
Dễ hiểu với người dùng BICaoThấp hơn
Hiệu năng truy vấn BIThường tốt hơnCó thể chậm hơn do nhiều join
Khi nên dùngMặc định cho tầng trình bày/BIDimension 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]:

8 loại Slowly Changing Dimension
LoạiCách xử lýLưu lịch sử?
Type 0Giữ nguyên giá trị gốcKhông (không bao giờ đổi)
Type 1Ghi đè giá trị cũKhông
Type 2Thêm dòng mới với surrogate key mới, kèm ngày hiệu lựcCó, đầy đủ
Type 3Thêm cột lưu giá trị trước đóMột phần (giá trị liền trước)
Type 4Tách thuộc tính thay đổi nhanh ra mini-dimensionCó
Type 5Mini-dimension + outrigger Type 1Có
Type 6Thêm thuộc tính Type 1 vào dimension Type 2Có, kèm giá trị hiện hành
Type 7Kết hợp song song Type 1 và Type 2Có, 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

  1. Kimball, R. & Ross, M. (2013). The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling (3rd ed.). John Wiley & Sons.
  2. Kimball Group. “Dimensional Modeling Techniques”. Kimball Group. www.kimballgroup.com

↑ Lên đầu trang