Tại sao phải chuẩn hóa?
Ví dụ với CSDL là bảng hóa đơn cho khách hàng như sau:- Ta có các vấn đề:
+ Khi thêm dữ liệu: Không thể thêm một khách hàng vào CSDL nếu khách hàng không mua một mặt hàng nào.
+ Khi cập nhật dữ liệu: Muốn thay đổi địa chỉ của khách hàng, phải thay đổi địa chỉ trên tất cả các hóa đơn của khách hàng đó bởi vì địa chỉ của khách hàng lưu có trên tất cả các hóa đơn của khách hàng.
+ Khi xóa dữ liệu: Nếu xóa hóa đơn cuối cùng của một khách hàng thì tất cả dữ liệu về khách hàng đó sẽ mất.
- Nên ta cần có một bộ chuẩn hóa cho CSDL là nhóm các thuộc tính vào các quan hệ nhằm giảm thiểu dư thừa dữ liệu , loại ỏ các bất thường (ngoại lệ) khi cập nhật CSDL.
- Dạng chưa chuẩn hóa (un-normalized form - UNF): quan hệ chưa chuẩn hóa là quan hệ chứa các bộ dữ liệu bị trùng lập giá trị.
Các dạng chuẩn hóa
Ta có một bảng dư liệu chưa được chuẩn hóa dưới đây:Những phần mình tô đỏ để mọi người dễ nhận ra vấn đề.
1. Dạng chuẩn 1NF
Định nghĩa: Dạng chuẩn 1 là quan hê không chứa các thuộc tính đa trị.Để dễ hiểu hơn, ta áp dụng vào bảng dữ liệu trên, được áp dụng chuẩn 1NF như sau:
2. Dạng chuẩn 2NF
Định nghĩa: Dạng chuẩn 2NF là quan hệ đã chuẩn 1NF và các thuộc tính không phải là khóa phụ thuộc hoàn toàn vào khóa chính.Phân tích ví dụ trên ta có các phụ thuộc hàm:
+ Mã SV -> (họ tên, quê quán)
+ Mã trường -> (tên trường, mã khoa, tên khoa)
+ (Mã số SV, môn học) -> Điểm
Cách làm:
Loại bỏ các thuộc tính không khoá phụ thuộc vào một bộ phận khoá chính và tách thành ra một bảng riêng, khoá chính của bảng là bộ phận khoá mà chúng phụ thuộc vào. Các thuộc tính còn lại lập thành một quan hệ, khóa chính của nó (Mã số SV) là khóa chính ban đầu (Mã số SV).
3. Dạng chuẩn 3NF
Định nghĩa: Dạng chuẩn 3NF là quan hệ ở dạng chuẩn 2NF và không tồn tại sự phụ thuộc hàm bắc cầu.Từ ví dụ trên ta có:
Sinh viên, Trường học: (Mã số SV, họ tên SV, quê quán, mã trường, tên trường, mã khoa, tên khoa)
Với phụ thuộc hàm:
+ Mã SV, mã trường -> (họ tên, quê quán, tên trường, tên khoa, mã khoa)
+ Mã trường -> (tên trường, mã khoa, tên khoa)
Nên các thuộc tính tên trường, mã khoa, tên khoa là phụ thuộc bắc cầu vào khóa chính Mã SV.
Cách làm:
Loại bỏ các thuộc tính phụ thuộc bắc cầu (tên trường, mã khoa, tên khoa) ra khỏi quan hệ và tách chúng thành một quan hệ riêng có khoá chính (mã trường) là thuộc tính bắc cầu. Các thuộc tính còn lại lập thành một quan hệ có khóa chính là quan hệ ban đầu.
Nếu chỉ xét đến quan hệ sinh viên, trường học, bỏ qua môn học và điểm, ta có bảng chuẩn hóa 3NF:
Tổng quan
– Chuẩn hóa CSDL có đến 7 chuẩn.. nhưng trong thực tế chúng ta chỉ sử dụng ở mức 1NF, 2NF, 3NF rất hiểm khi gặp 4NF, 5NF, 6NF, 7NF. Vì vậy chúng ta chỉ cần lắm vững mức 1NF, 2NF, 3NF là đã ổn rồi :)Tài liệu tham khảo
- Chuẩn hóa cơ sở dữ liệu | FPT Polytechnic
- Chapter 9: Normalization