Khái Niệm về Chuẩn Hóa Cơ Sở Dữ Liệu
Thiết kế cơ sở dữ liệu (database) là một quy trình phức tạp, bao gồm nhiều bước từ việc xác định yêu cầu đến việc xây dựng cơ sở dữ liệu vật lý. Quy trình thiết kế cơ sở dữ liệu có thể được tóm tắt như sau:
- Phân Tích Yêu Cầu (Requirement Analysis): Thu thập và phân tích các yêu cầu từ người dùng.
- Mô Hình Hóa Dữ Liệu (Data Modeling): Tạo ra mô hình thực thể - mối quan hệ (ERD) để đại diện cho các thực thể (entities), thuộc tính (attributes) và mối quan hệ (relationships). Xác định khóa chính (primary key) và thuộc tính phụ (foreign key).
- Thiết Kế Logic (Logical Design): Chuyển mô hình ERD thành mô hình quan hệ và tiến hành chuẩn hóa (1NF, 2NF, 3NF, BCNF…) nhằm loại bỏ sự dư thừa dữ liệu và tăng cường tính toàn vẹn cho hệ thống.
- Thiết Kế Vật Lý (Physical Design): Thiết kế các bảng (tables), khóa chính, khóa ràng buộc (constraint key), chỉ mục (index) và cấu trúc lưu trữ.
- Triển Khai (Implementation): Tạo database và thực hiện kiểm thử (testing) cho dữ liệu.
- Tối Ưu Hóa và Bảo Trì (Optimization & Maintenance): Tối ưu hóa hiệu suất, sao lưu và bảo trì cơ sở dữ liệu.
- Tài Liệu Hóa (Documentation): Ghi lại quá trình thiết kế và hướng dẫn sử dụng.
Bài viết này sẽ tập trung vào quy trình chuẩn hóa (1NF, 2NF, 3NF, BCNF…) trong thiết kế cơ sở dữ liệu.
Chuẩn hóa cơ sở dữ liệu (Database Normalization) là quá trình biểu diễn dữ liệu theo các tiêu chuẩn nhất định nhằm loại bỏ sự trùng lặp dữ liệu, tối ưu hóa lưu trữ và đảm bảo tính nhất quán cũng như độ tin cậy của dữ liệu. Khái niệm Database Normalization được phát triển bởi hai nhà khoa học máy tính nổi tiếng Edgar F. Codd và Raymond F. Boyce, và là một phần quan trọng của thiết kế quan hệ cơ sở dữ liệu. Có nhiều loại chuẩn hóa được sắp xếp từ thấp đến cao: 1NF, 2NF, 3NF, BCNF, 4NF, 5NF, và 6NF.
Để đạt chuẩn 2NF, cơ sở dữ liệu của chúng ta phải đạt chuẩn 1NF. Tương tự, để có chuẩn 3NF, cơ sở dữ liệu phải đạt chuẩn 1NF và 2NF. Chuẩn BCNF bao gồm cả 3 loại chuẩn: 1NF, 2NF, và 3NF.
Các Loại Chuẩn Hóa Trong DBMS và Ví Dụ Cụ Thể
1. Dạng Chuẩn 1NF (First Normal Form)
Mỗi cột trong bảng phải chứa một giá trị duy nhất và mỗi dòng (record) phải là duy nhất mà không có sự trùng lặp.
Ví dụ:
StudentID StudentName Courses
1 John Smith Math, Science, History
2 Jane Doe English, Math
3 Emily Clark History, Art
Vấn đề: Cột Courses chứa nhiều giá trị trong cùng một ô, điều này cần phải chuẩn hóa:
StudentID StudentName Course
1 John Smith Math
1 John Smith Science
1 John Smith History
2 Jane Doe English
2 Jane Doe Math
3 Emily Clark History
3 Emily Clark Art
2. Dạng Chuẩn 2NF (Second Normal Form)
Loại bỏ sự phụ thuộc một phần vào khóa chính khi khóa chính là khóa tổ hợp (composite key). Mọi thuộc tính cần phải phụ thuộc hoàn toàn vào khóa chính.
Ví dụ:
OrderID ProductID ProductName Quantity Price
1 101 Laptop 2 1500
1 102 Mouse 1 20
Vấn đề: Thuộc tính ProductName chỉ phụ thuộc vào ProductID, không phụ thuộc vào cả OrderID và ProductID. Chuẩn hóa cần như sau:
OrderID ProductID Quantity
1 101 2
1 102 1
3. Dạng Chuẩn 3NF (Third Normal Form)
Mọi thuộc tính không khóa cần phụ thuộc trực tiếp vào khóa chính và không phụ thuộc vào các thuộc tính không khóa khác.
Ví dụ:
StudentID StudentName ClassID ClassName
1 John Smith 101 Math
Vấn đề: ClassName không phụ thuộc trực tiếp vào StudentID. Cần chuẩn hóa:
StudentID StudentName ClassID
1 John Smith 101
4. Dạng Chuẩn BCNF (Boyce-Codd Normal Form)
Chỉ có khóa (hoặc khóa tổ hợp) mới có thể xác định các thông tin khác, không phải ngược lại.
Ví dụ:
Teacher Subjects
Nga Toán
Thu Văn
Vấn đề: Không xác định được Subjects từ Teacher nếu không có khóa chính. Cần chuẩn hóa:
TeacherCode TeacherName
GV01 Nga
GV02 Thu
5. Dạng Chuẩn 4NF (Fourth Normal Form)
Loại bỏ sự dư thừa dữ liệu do các phụ thuộc đa trị.
6. Dạng Chuẩn 5NF (Fifth Normal Form)
Nếu một bảng có thể được chia nhỏ thành nhiều bảng nhỏ hơn mà khi nối lại vẫn tái tạo được dữ liệu ban đầu, thì bảng đó cần được tách ra.
7. Dạng Chuẩn 6NF (Sixth Normal Form)
Chuẩn 6NF đảm bảo rằng mỗi bảng chỉ chứa một khóa chính và tối đa một thuộc tính không khóa. Mục tiêu của 6NF là loại bỏ hoàn toàn các vấn đề về NULL trong bảng và phân tách dữ liệu đến mức tối thiểu.
Với những thông tin trên, hầu hết các ứng dụng thông thường chỉ cần đạt chuẩn hóa tới 5NF là đủ. Việc triển khai 6NF thường không cần thiết trừ khi có lý do cụ thể.
source: viblo