Denormalization
📌 Denormalization là gì?
Denormalization là quá trình cố tình đưa sự dư thừa dữ liệu (data redundancy) vào trong database để:
Giảm số lượng join phức tạp giữa các bảng.
Tăng tốc độ truy vấn (read performance).
Hiểu đơn giản: thay vì dữ liệu nằm rải rác ở nhiều bảng (chuẩn hóa - normalization), thì ta ghép thêm cột, duplicate dữ liệu vào bảng chính để dễ query hơn.
📦 Ví dụ đơn giản
✅ Chuẩn hóa:
Muốn lấy tên phòng ban của user → phải JOIN bảng.
❌ Denormalized:
→ Không cần JOIN → Query nhanh hơn, đặc biệt trong hệ thống phân tán hoặc cache.
🎯 Khi nào nên denormalize?
Hệ thống đọc nhiều hơn ghi (Read-heavy)
✅ Nên
Truy vấn cần JOIN nhiều bảng
✅ Nên
Giao dịch đơn giản, tính nhất quán không quá nghiêm ngặt
✅ Nên
Yêu cầu tính nhất quán dữ liệu cao
❌ Không nên
⚖️ Ưu nhược điểm
✅ Ưu điểm:
Truy vấn nhanh, ít JOIN.
Thân thiện với cache (Redis, Elastic...).
Hợp với NoSQL, hệ thống sharded hoặc distributed.
❌ Nhược điểm:
Khó duy trì đồng bộ dữ liệu (data consistency).
Update tốn effort hơn, vì phải cập nhật ở nhiều nơi nếu dữ liệu bị duplicate.
Tăng kích thước lưu trữ.
🧠 Tư duy của Senior khi denormalize:
Không nên làm sớm: đầu tiên nên chuẩn hóa để đảm bảo tính rõ ràng và logic.
Khi hệ thống bắt đầu chậm → profiling & optimize → lúc đó mới xem xét denormalize đúng chỗ.
Dùng Event hoặc CDC (Change Data Capture) để đồng bộ khi có update.
Last updated