Denormalization là việc cố ý thêm dữ liệu dư thừa (nhân bản cột, lưu giá trị đã tính sẵn) để giảm số JOIN và tăng tốc đọc.
Đánh đổi:
- Lợi: đọc nhanh hơn (ít JOIN/aggregate lúc query), hợp báo cáo/analytics đọc nhiều.
- Hại: ghi phức tạp hơn — phải cập nhật nhiều nơi để tránh dữ liệu lệch; tốn dung lượng; rủi ro bất nhất.
Khi nào dùng: hệ đọc nhiều hơn ghi, có điểm nghẽn hiệu năng đã đo được, hoặc cần precompute (đếm like, tổng tiền đơn). Nguyên tắc: chuẩn hóa trước, denormalize sau khi có số liệu chứng minh cần — đừng tối ưu sớm. Materialized view là một dạng denormalization có kiểm soát. Một dạng khác là snapshot: nhúng dữ liệu tại thời điểm giao dịch (địa chỉ giao hàng lưu ngay trong đơn) — lịch sử cần ảnh chụp lúc đó, không phải giá trị hiện tại.