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:

-- Bảng User
User(id, name, department_id)

-- Bảng Department
Department(id, name)

Muốn lấy tên phòng ban của user → phải JOIN bảng.


❌ Denormalized:

-- Bảng User
User(id, name, department_id, department_name)

→ 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?

Tình huống
Có 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