JuniorKỹ thuậtThiết kế cơ sở dữ liệu
Chuẩn hoá (normalization) là gì và khi nào nên phi chuẩn hoá?
Thử trả lời trước
Đáp án mẫu
Chuẩn hoá tổ chức các bảng để giảm dư thừa và tránh bất thường khi cập nhật. Mỗi sự kiện chỉ lưu một lần nên bạn chỉ sửa ở một chỗ.
- 1NF: mỗi cột chứa một giá trị nguyên tố, không có nhóm lặp.
- 2NF: mọi cột không khoá phụ thuộc vào toàn bộ khoá chính, không chỉ một phần.
- 3NF: các cột không khoá chỉ phụ thuộc vào khoá, không phụ thuộc vào cột không khoá khác. Ví dụ, lưu thành phố của khách hàng trong bảng khách hàng, không lưu trong từng đơn hàng.
Lợi ích là dữ liệu nhất quán, tốn ít dung lượng và ghi đơn giản hơn.
Phi chuẩn hoá cố ý thêm dư thừa để đọc nhanh hơn. Ví dụ: lưu tổng tiền trên dòng đơn hàng, sao chép tên sản phẩm vào chi tiết đơn để giữ lịch sử, hoặc duy trì một bảng báo cáo. Cách này giảm join, nhưng bạn phải giữ các bản sao đồng bộ, thường bằng logic ứng dụng, trigger hoặc job dựng lại.
Mặc định nên chuẩn hoá, rồi chỉ phi chuẩn hoá các đường đọc nóng sau khi đo được vấn đề thật. Hệ thống phân tích thường cố ý dùng star schema phi chuẩn hoá.
Ý chính
- Chuẩn hoá lưu mỗi sự kiện một lần để tránh bất thường khi cập nhật
- 1NF giá trị nguyên tố, 2NF phụ thuộc đủ khoá, 3NF không phụ thuộc bắc cầu
- Phi chuẩn hoá ở các đường đọc nóng đã được đo để giảm join
- Các bản sao phi chuẩn hoá phải được giữ đồng bộ
Câu hỏi nối tiếp thường gặp
- Cho ví dụ về bất thường khi cập nhật trong bảng chưa chuẩn hoá.
- Vì sao kho dữ liệu thường phi chuẩn hoá?
Lỗi thường gặp
- Phi chuẩn hoá ngay từ đầu khi chưa đo được vấn đề nào
- Chuẩn hoá quá mức thành nhiều bảng nhỏ phải join sâu