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

NORMALIZATIONRULES

2.1. chuẩn hoá bậc 1 - 1NF

Bảng FEE SERVICES

FromZoneToZoneTransportTransport NameT<0.5 (kg)1.0 - 3.03.0 - 5.05.0-10.0>10
HNBG,BN,HPRoadStandard Express2127455050+(x-10)*10
HNHCMFlyUrgent Express1921275050+(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ị:

FromZoneToZoneTransportTransport NameT<0.5 (kg)1.0 - 3.03.0 - 5.05.0-10.0> 10.0 per kg
HNBGRoadStandard Express2127455010
HNBNRoadStandard Express2127455010
HNHPRoadStandard Express2127455010
HNHCMFlyUrgent Express192127509

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

TransportTransport Name
RoadStandard Express
FlyUrgent Express

Bảng FEE SERVICES

FromZoneToZoneTransportT<0.5 (kg)1.0 - 3.03.0 - 5.05.0-10.0> 10.0 per kg
HNBGRoad2127455010
HNBNRoad2127455010
HNHPRoad2127455010
HNHCMFly192127509

2.3. chuẩn hoá bậc 3 - 3NF

Cho Bảng Employee:

EmployeeID*EmployeeNamePrefCodePrefName
1Alice26Michigan
2Bob28Wyoming
3John28Wyoming
4Bob26Michigan

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*EmployeeNamePrefCode
1Alice26
2Bob28
3John28
4Bob26

Bảng Pref

PrefCode*PrefName
26Michigan
28Wyoming

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.