Trong hành trình của sinh viên chuyên ngành Công nghệ thông tin tại Trường Cao đẳng FPT Polytechnic, môn học “Cơ sở dữ liệu” là một trong những học phần cơ sở quan trọng nhất. Nó là nền móng cho hầu hết các ứng dụng phần mềm. Tuy nhiên, nhiều sinh viên khi tiếp cận khái niệm Chuẩn hóa Cơ sở dữ liệu (Database Normalization), đặc biệt là các dạng chuẩn 1NF, 2NF, và 3NF, thường cảm thấy đây là lý thuyết trừu tượng và khó áp dụng.
Tầm quan trọng của chuẩn hóa
Hãy tưởng tượng cơ sở dữ liệu của bạn là một nhà kho khổng lồ. Nếu bạn vứt mọi thứ vào một “thùng” duy nhất (một bảng duy nhất), ban đầu có vẻ nhanh. Nhưng chẳng mấy chốc, bạn sẽ gặp phải 3 “dị thường” (Anomalies) nghiêm trọng:
- Dị thường khi Thêm (Insertion Anomaly): Bạn không thể nhập thông tin của một đối tượng mới nếu nó chưa có đầy đủ thông tin liên quan.
- Ví dụ: Không thể thêm một MonHoc mới vào kho nếu chưa có SinhVien nào đăng ký môn đó.
- Dị thường khi Xóa (Deletion Anomaly): Khi bạn xóa một thông tin, bạn vô tình làm mất thông tin quan trọng khác.
- Ví dụ: Xóa SinhVien cuối cùng học môn “CSDL”, bạn làm mất luôn thông tin về sự tồn tại của môn “CSDL”.
- Dị thường khi Sửa (Update Anomaly): Cùng một thông tin bị lặp lại ở nhiều nơi. Khi cần sửa, bạn phải sửa tất cả mọi nơi, nếu bỏ sót sẽ gây ra mất nhất quán dữ liệu.
- Ví dụ: Giảng viên “Nguyễn Văn A” dạy 50 lớp. Khi thầy đổi số điện thoại, bạn phải cập nhật ở 50 hàng. Nếu bạn chỉ sửa 49 hàng, CSDL của bạn đã bị sai.
Chức năng của chuẩn hóa chính là dọn dẹp “nhà kho” này. Nó là một quy trình thiết kế CSDL bằng cách tách các bảng lớn thành các bảng nhỏ hơn, liên kết với nhau bằng khóa ngoại (Foreign Key). Mục tiêu cuối cùng là loại bỏ dư thừa dữ liệu (data redundancy) và giải quyết triệt để các dị thường trên.
“Giải mã” từng dạng chuẩn
Đây là quy trình từng bước để “dọn kho”:
Dạng chuẩn 1 (1NF – First Normal Form)
- Cách hiểu: 1NF yêu cầu dữ liệu phải là “nguyên tử” (Atomic).
- Quy tắc: Mỗi ô trong bảng chỉ được chứa một giá trị duy nhất. Không được phép có các thuộc tính đa trị (một ô chứa danh sách) hoặc các nhóm lặp lại.
- Ví dụ (Chưa đạt 1NF):

- Cách chuẩn hóa 1NF: Tách các giá trị đa trị thành các hàng riêng biệt.

Dạng chuẩn 2 (2NF – Second Normal Form)
- Điều kiện: Bảng phải đạt 1NF trước.
- Cách hiểu: 2NF giải quyết “sự phụ thuộc một phần”.
- Quy tắc: Mọi thuộc tính không phải khóa phải phụ thuộc hàm vào toàn bộ khóa chính.
- (Lưu ý: 2NF chỉ áp dụng khi bảng có khóa chính tổ hợp (Composite Key) – tức là khóa chính gồm 2 cột trở lên).
- Ví dụ (Đạt 1NF nhưng chưa đạt 2NF): Hãy xem xét bảng PhanCongDuAn có khóa chính tổ hợp là (MaNV, MaDA):

Phân tích (Phụ thuộc hàm):
- SoGio -> Phụ thuộc vào (MaNV, MaDA) (Một nhân viên làm một dự án sẽ có số giờ cụ thể) -> ĐÚNG.
- TenNV, TrinhDoNV -> Chỉ phụ thuộc vào MaNV (Tên và trình độ chỉ cần MaNV là biết, không cần MaDA) -> VI PHẠM 2NF (Đây là phụ thuộc một phần).
Cách chuẩn hóa 2NF: Tách các thuộc tính bị phụ thuộc một phần ra bảng riêng.
- Bảng 1: NHANVIEN (<u>MaNV</u>, TenNV, TrinhDoNV)
- Bảng 2: PHANCONG (<u>MaNV</u>, <u>MaDA</u>, SoGio)
Dạng Chuẩn 3 (3NF – Third Normal Form)
- Điều kiện: Bảng phải đạt 2NF trước.
- Cách hiểu: 3NF giải quyết “sự phụ thuộc bắc cầu”.
- Quy tắc: Mọi thuộc tính không phải khóa phải phụ thuộc trực tiếp vào khóa chính, không được phụ thuộc “bắc cầu” thông qua một thuộc tính không khóa khác.
- Ví dụ (Đạt 2NF nhưng chưa đạt 3NF): Hãy xem xét bảng QuanLySinhVien có khóa chính là MaSV:

- Phân tích (Phụ thuộc hàm):
- HoTenSV -> Phụ thuộc vào MaSV (Đúng).
- MaLop -> Phụ thuộc vào MaSV (Đúng).
- TenLop -> Phụ thuộc vào MaLop (Vi phạm! MaLop không phải khóa chính).
- Đây là phụ thuộc bắc cầu: MaSV -> MaLop -> TenLop.
- Cách chuẩn hóa 3NF: Tách thuộc tính bị phụ thuộc bắc cầu ra bảng riêng.
- Bảng 1: SINHVIEN (<u>MaSV</u>, HoTenSV, MaLop (FK))
- Bảng 2: LOP (<u>MaLop</u>, TenLop)
Kết luận: Chuẩn hóa không phải là một lý thuyết học thuật xa rời. Nó là kỹ năng thiết kế cốt lõi để xây dựng các hệ thống phần mềm ổn định, hiệu quả và dễ bảo trì. Nắm vững 1NF, 2NF, 3NF không chỉ giúp bạn qua môn “Cơ sở dữ liệu”, mà còn là nền tảng vững chắc cho sự nghiệp Phát triển phần mềm của bạn sau này.
Giảng viên thầy Nguyễn Đình Ngọc
Bộ môn Công nghệ thông tin
FPT Polytechnic Cần Thơ

