1. Chuẩn hóa cơ sở dữ liệu là gì ? Tại sao cần chuẩn hóa cơ sở dữ liệu ?
Chuẩn hóa (Normalization) là quá trình tách bảng (phân rã) thành các bảng nhỏ hơn dựa vào các phụ thuộc hàm. Các dạng chuẩn là các chỉ dẫn để thiết kế các bảng trong CSDL.
Mục đích của chuẩn hoá là loại bỏ các dư thừa dữ liệu và các lỗi khi thao tác dư thừa và các lỗi khi thao tác dữ liệu (Insert, Delete, Update). Tuy nhiên việc này cũng làm tăng thời gian truy vấn do cần phải join nhiều bảng để lấy dữ liệu.
2. Các dạng chuẩn hóa
2.1. chuẩn hoá bậc 1 - 1NF
Bảng FEE SERVICES
FromZone | ToZone | Transport | Transport Name | T<0.5 (kg) | 1.0 - 3.0 | 3.0 - 5.0 | 5.0-10.0 | >10 |
---|---|---|---|---|---|---|---|---|
HN | BG,BN,HP | Road | Standard Express | 21 | 27 | 45 | 50 | 50+(x-10)*10 |
HN | HCM | Fly | Urgent Express | 19 | 21 | 27 | 50 | 50+(x-10)*9 |
- Zone: HN (Hà Nội), HCM (Hồ Chí Minh), BG, BN, HP (Bắc Giang, Bắc Ninh, Hải Phòng)
- x: cân nặng (kg)
- 20+(x-5)*6 : 20k cho 5kg cơ bản, thêm 6k cho mỗi 1kg tiếp theo
Bảng trên không tuân thủ chuẩn hoá cấp 1. Trong bảng này, cột ToZone chứa nhiều giá trị trong một ô, các cột tính phí dịch vụ chứa nhiều kiểu giá trị.
Để đưa bảng này về 1NF, chúng ta có thểtách các record trong bảng ra thành record mới,đưa các cột tính phí dịch vụ về cùng kiểu giá trị:
FromZone | ToZone | Transport | Transport Name | T<0.5 (kg) | 1.0 - 3.0 | 3.0 - 5.0 | 5.0-10.0 | > 10.0 per kg |
---|---|---|---|---|---|---|---|---|
HN | BG | Road | Standard Express | 21 | 27 | 45 | 50 | 10 |
HN | BN | Road | Standard Express | 21 | 27 | 45 | 50 | 10 |
HN | HP | Road | Standard Express | 21 | 27 | 45 | 50 | 10 |
HN | HCM | Fly | Urgent Express | 19 | 21 | 27 | 50 | 9 |
2.2.chuẩn hoá bậc 2 - 2NF
Bảng FEE SERVICES
đã được chuẩn hóa bậc 1, Cột Transport Name chỉ phụ thuộc vào cột Transport (Một phần khóa chính) nên ta thực hiện chuẩn hóa bậc 2 bằng cách tách cột đó ra thành bảng riêng:
Bảng TRANSPORT
Transport | Transport Name |
---|---|
Road | Standard Express |
Fly | Urgent Express |
Bảng FEE SERVICES
FromZone | ToZone | Transport | T<0.5 (kg) | 1.0 - 3.0 | 3.0 - 5.0 | 5.0-10.0 | > 10.0 per kg |
---|---|---|---|---|---|---|---|
HN | BG | Road | 21 | 27 | 45 | 50 | 10 |
HN | BN | Road | 21 | 27 | 45 | 50 | 10 |
HN | HP | Road | 21 | 27 | 45 | 50 | 10 |
HN | HCM | Fly | 19 | 21 | 27 | 50 | 9 |
2.3. chuẩn hoá bậc 3 - 3NF
Cho Bảng Employee
:
EmployeeID* | EmployeeName | PrefCode | PrefName |
---|---|---|---|
1 | Alice | 26 | Michigan |
2 | Bob | 28 | Wyoming |
3 | John | 28 | Wyoming |
4 | Bob | 26 | Michigan |
Ta thấy khóa chính là EmployeeID
nhưng cột PrefName
lại không phụ thuộc vào khóa chính mà phụ thuộc vào cột PrefCode
. Để chuẩn hóa bậc 3, ta cần tách các cột đó ra thành bảng riêng:
Bảng Employee
:
EmployeeID* | EmployeeName | PrefCode |
---|---|---|
1 | Alice | 26 |
2 | Bob | 28 |
3 | John | 28 |
4 | Bob | 26 |
Bảng Pref
PrefCode* | PrefName |
---|---|
26 | Michigan |
28 | Wyoming |
2.4. Dạng chuẩn BCNF
Một Bảng ở dạng chuẩn BCNF khi:
- Là 3NF
- Không có thuộc tính khoá mà phụ thuộc hàm vào thuộc tính không khoá.
2.5. Dạng chuẩn 4NF
- Là Dạng chuẩn BCNF
- Không có sự phụ thuộc đa giá trị.
2.6. Dạng chuẩn 5NF
- Dạng chuẩn 5NF còn được gọi là PJNF - Project-Join Normal Form
- Đây là cấp độ chuẩn hóa cơ sở dữ liệu tiên tiến nhất.
- Một bảng là Chuẩn 5 chỉ khi là 4NF và không thể bị phân tách thành các bảng nhỏ hơn mà không bị mất dữ liệu.
Tổng kết
Để chuẩn hóa một cơ sở dữ liệu từ dạng chưa chuẩn hóa đến dạng 3NF, Chúng ta cần:
- Đưa các giá trị trong các cột về cùng kiểu giá trị, loại bỏ các thuộc tính đa trị.
- Loại bỏ các phụ thuộc hàm (Tách bảng) để các thuộc tính trong bảng chỉ phụ thuộc vào khóa chính.
Bình luận