Mid #normalization#denormalization#schema-design
Chuẩn hoá 1NF-3NF là gì và khi nào nên denormalize?
⚡ Trả lời nhanh
1NF: giá trị nguyên tử, không nhóm lặp. 2NF: không phụ thuộc một phần vào khoá ghép. 3NF: không phụ thuộc bắc cầu vào thuộc tính không khoá. Chuẩn hoá giảm trùng lặp và bất thường khi ghi; denormalize đánh đổi để đọc nhanh hơn.
- 1NF: mỗi ô một giá trị nguyên tử (không lưu
"a,b,c"trong một cột). - 2NF: đã 1NF và mọi cột không khoá phụ thuộc toàn bộ khoá chính (quan trọng với khoá ghép).
- 3NF: đã 2NF và không có phụ thuộc bắc cầu, ví dụ
orders(id, zip, city)vớizip -> citynên táchcitysang bảng riêng.
-- Chuẩn hoá: city nằm ở một nơi
orders(id, user_id, zip) zips(zip, city)
-- Denormalize: lưu bản sao để khỏi JOIN
orders(id, user_id, zip, city)
| Chuẩn hoá | Denormalize | |
|---|---|---|
| Ghi/sửa | ít bất thường | phải đồng bộ nhiều chỗ |
| Đọc | cần JOIN | nhanh |
| Dùng cho | OLTP | báo cáo, đọc nặng, cache |