Backend nền tảng
D6 · Normalization và Denormalization
Normalization (1NF, 2NF, 3NF): giảm dư thừa, ít trùng lặp, tránh bất thường khi cập nhật.
D6 · Middle
Normalization: mỗi thông tin chỉ ghi ở một chỗ (sửa một lần là xong). Denormalization: chép sẵn ở nhiều chỗ để đọc nhanh, nhưng sửa phải sửa nhiều chỗ.
Cốt lõi
- Normalization (1NF, 2NF, 3NF): giảm dư thừa, ít trùng lặp, tránh bất thường khi cập nhật.
- Denormalization: thêm dư thừa có chủ đích để đọc nhanh hơn, tránh JOIN.
Đánh đổi
OLTP (giao dịch) dùng normalized; OLAP (phân tích/báo cáo) dùng denormalized.
Trong thực tế
Thiết kế DB của Flipkart.
Bug thường gặp
Chép tên sản phẩm sang bảng khác để đọc nhanh, đổi tên thì hai nơi không khớp; hoặc ngược lại, đơn hàng cũ JOIN sang giá hiện tại nên hiển thị sai giá lúc mua.
Tự hỏi lại
Khi denormalize, giữ dữ liệu đồng bộ bằng cách nào (trigger, event, job)?