Nếu bạn làm việc với cơ sở dữ liệu một thời gian, có lẽ bạn đã nghe thuật ngữ chuẩn hóa (normalization). Có ai đã hỏi bạn: "Cơ sở dữ liệu đó có được chuẩn hóa không?" hay "Nó có ở dạng BCNF không?" Chuẩn hóa thường được coi là xa xỉ chỉ học giả mới có thời gian. Tuy nhiên, biết nguyên tắc chuẩn hóa và áp dụng vào thiết kế cơ sở dữ liệu hàng ngày không phức tạp, và có thể cải thiện đáng kể hiệu suất DBMS.
Trong bài viết này, chúng ta giới thiệu khái niệm chuẩn hóa và nhìn nhanh các dạng chuẩn phổ biến nhất.
Chuẩn hóa là gì?
Chuẩn hóa là quá trình tổ chức dữ liệu trong cơ sở dữ liệu một cách hiệu quả. Có hai mục tiêu của quá trình chuẩn hóa: loại bỏ dữ liệu dư thừa (ví dụ: lưu cùng dữ liệu ở nhiều bảng) và đảm bảo sự phụ thuộc dữ liệu hợp lý (chỉ lưu dữ liệu liên quan trong một bảng). Cả hai đều là mục tiêu xứng đáng, vì chúng giảm dung lượng cơ sở dữ liệu tiêu thụ và đảm bảo dữ liệu được lưu trữ logic.
Các Dạng Chuẩn (Normal Forms)
Cộng đồng cơ sở dữ liệu đã phát triển một loạt nguyên tắc đảm bảo cơ sở dữ liệu được chuẩn hóa. Chúng được gọi là các dạng chuẩn (normal forms) và được đánh số từ một (dạng chuẩn thấp nhất, gọi là dạng chuẩn thứ nhất hoặc 1NF) đến năm (dạng chuẩn thứ năm hoặc 5NF). Trong ứng dụng thực tế, bạn thường thấy 1NF, 2NF, 3NF, cùng với 4NF thỉnh thoảng. Dạng chuẩn thứ năm rất hiếm thấy và không thảo luận trong bài này.
Trước khi thảo luận các dạng chuẩn, quan trọng là chỉ ra chúng chỉ là nguyên tắc và chỉ là nguyên tắc. Đôi khi cần phải lệch khỏi chúng để đáp ứng yêu cầu kinh doanh thực tế. Tuy nhiên, khi có sự biến đổi, bắt buộc phải đánh giá mọi hậu quả có thể có trên hệ thống và tính đến sự không nhất quán tiềm ẩn. Được rồi, hãy khám phá các dạng chuẩn.
Dạng Chuẩn Thứ Nhất (1NF)
Dạng chuẩn thứ nhất (1NF) đặt quy tắc cơ bản cho cơ sở dữ liệu có tổ chức:
- Loại bỏ cột trùng lặp từ cùng một bảng.
- Tạo bảng riêng cho mỗi nhóm dữ liệu liên quan và xác định mỗi hàng bằng một cột hoặc tập cột duy nhất (khóa chính).
Dạng Chuẩn Thứ Hai (2NF)
Dạng chuẩn thứ hai (2NF) tiếp tục giải quyết khái niệm loại bỏ dữ liệu trùng lặp:
- Đáp ứng tất cả yêu cầu của dạng chuẩn thứ nhất.
- Loại bỏ tập con dữ liệu áp dụng cho nhiều hàng của một bảng và đặt chúng vào bảng riêng.
- Tạo mối quan hệ giữa các bảng mới này và bảng tiền nhiệm của chúng thông qua khóa ngoại.
Dạng Chuẩn Thứ Ba (3NF)
Dạng chuẩn thứ ba (3NF) tiến một bước quan trọng hơn:
- Đáp ứng tất cả yêu cầu của dạng chuẩn thứ hai.
- Loại bỏ cột không phụ thuộc vào khóa chính.
Dạng Chuẩn Boyce-Codd (BCNF hay 3.5NF)
Dạng chuẩn Boyce-Codd, cũng gọi là "dạng chuẩn thứ ba rưỡi (3.5)", thêm một yêu cầu nữa:
- Đáp ứng tất cả yêu cầu của dạng chuẩn thứ ba.
- Mọi định thức (determinant) phải là khóa ứng viên (candidate key).
Dạng Chuẩn Thứ Tư (4NF)
Cuối cùng, dạng chuẩn thứ tư (4NF) có một yêu cầu bổ sung:
- Đáp ứng tất cả yêu cầu của dạng chuẩn thứ ba.
- Một quan hệ ở 4NF nếu nó không có sự phụ thuộc đa giá trị (multi-valued dependencies).
Nhớ rằng, các nguyên tắc chuẩn hóa này là tích lũy. Để cơ sở dữ liệu ở 2NF, nó phải đáp ứng tất cả tiêu chí của cơ sở dữ liệu 1NF.
Tôi có nên chuẩn hóa không?
Mặc dù chuẩn hóa cơ sở dữ liệu thường là ý tưởng tốt, nhưng nó không phải yêu cầu tuyệt đối. Có trường hợp vi phạm عمد quy tắc chuẩn hóa là thực hành tốt.
Nếu bạn muốn đảm bảo cơ sở dữ liệu được chuẩn hóa, hãy bắt đầu bằng cách học cách đưa cơ sở dữ liệu vào Dạng Chuẩn Thứ Nhất.