Home > html

Hướng Dẫn Chuẩn Hóa Cơ Sở Dữ Liệu: 1NF, 2NF, 3NF, 4NF, 5NF và 6NF

Hướng Dẫn Chuẩn Hóa Cơ Sở Dữ Liệu: 1NF, 2NF, 3NF, 4NF, 5NF và 6NF

Bài viết này là danh sách đầy đủ các chuẩn hóa cơ sở dữ liệu, từ chuẩn hóa cơ bản (1NF) cho đến các chuẩn hóa cao hơn (5NF), cũng như các chuẩn hóa mở rộng (6NF và Domain-Key Normal Form).

1. Chuẩn hóa 1NF (First Normal Form)

Chuẩn hóa 1NF yêu cầu dữ liệu trong bảng phải có các đặc điểm sau:

  • Tất cả các cột phải chứa các giá trị nguyên thủy (atomic values), tức là không có trường hợp nào chứa nhiều giá trị (mảng, danh sách, v.v.).
  • Mỗi cột phải chứa dữ liệu của cùng một kiểu.
  • Không có các hàng trùng lặp trong bảng.

Ví dụ:
Bảng sau không ở chuẩn 1NF vì cột “Sở thích” chứa nhiều giá trị.

IDTênSở thích
1NamĐọc sách, Chơi thể thao
2HoaVẽ tranh

Sau khi chuẩn hóa 1NF:

IDTênSở thích
1NamĐọc sách
1NamChơi thể thao
2HoaVẽ tranh

2. Chuẩn hóa 2NF (Second Normal Form)

Chuẩn hóa 2NF yêu cầu bảng phải thỏa mãn các điều kiện của 1NF và:

  • Loại bỏ các phụ thuộc hàm không đầy đủ: Mỗi cột không khóa phải phụ thuộc vào khóa chính một cách đầy đủ, tức là không có sự phụ thuộc một phần vào khóa chính (partial dependency).

Ví dụ:
Bảng sau không ở chuẩn 2NF vì cột “Tên môn học” phụ thuộc vào một phần khóa chính (chỉ phụ thuộc vào Mã môn học, không phải vào ID sinh viên).

IDMã môn họcTên môn họcĐiểm
1MTH101Toán học8
1PHY102Vật lý7
2MTH101Toán học9

Sau khi chuẩn hóa 2NF:

  • Tạo bảng Sinh viên: | ID | Tên sinh viên | |—-|—————| | 1 | Nam | | 2 | Hoa |
  • Tạo bảng Môn học: | Mã môn học | Tên môn học | |————|————-| | MTH101 | Toán học | | PHY102 | Vật lý |
  • Tạo bảng Điểm: | ID sinh viên | Mã môn học | Điểm | |————–|————|——| | 1 | MTH101 | 8 | | 1 | PHY102 | 7 | | 2 | MTH101 | 9 |

3. Chuẩn hóa 3NF (Third Normal Form)

Chuẩn hóa 3NF yêu cầu bảng phải thỏa mãn các điều kiện của 2NF và:

  • Không có phụ thuộc chuyển tiếp: Các cột không phải là khóa chính không được phụ thuộc vào nhau.

Ví dụ:
Bảng sau không ở chuẩn 3NF vì “Địa chỉ” phụ thuộc vào “Mã thành phố”, và “Mã thành phố” lại phụ thuộc vào “Tên thành phố”.

Mã nhân viênTênĐịa chỉMã thành phốTên thành phố
1NamHà Nội, Cầu Giấy101Hà Nội
2HoaTP.HCM, Quận 1102TP.HCM

Sau khi chuẩn hóa 3NF:

  • Tạo bảng Nhân viên: | Mã nhân viên | Tên | Địa chỉ | |————–|——-|——————-| | 1 | Nam | Hà Nội, Cầu Giấy | | 2 | Hoa | TP.HCM, Quận 1 |
  • Tạo bảng Thành phố: | Mã thành phố | Tên thành phố | |————–|—————| | 101 | Hà Nội | | 102 | TP.HCM |
  • Tạo bảng Mã thành phố: | Mã nhân viên | Mã thành phố | |————–|————–| | 1 | 101 | | 2 | 102 |

4. Chuẩn hóa 4NF (Fourth Normal Form)

Chuẩn hóa 4NF yêu cầu bảng phải thỏa mãn các điều kiện của 3NF và:

  • Không có phụ thuộc đa giá trị: Một bảng không thể chứa hai hoặc nhiều tập hợp dữ liệu độc lập có thể tự mình chứa các giá trị.

Ví dụ:
Bảng sau không ở chuẩn 4NF vì cột “Sở thích” và “Kỹ năng” đều có thể chứa nhiều giá trị và chúng không có mối quan hệ phụ thuộc với nhau.

IDTênSở thíchKỹ năng
1NamĐọc sách, Chơi thể thaoLập trình, Giao tiếp
2HoaVẽ tranhVẽ, Thiết kế

Sau khi chuẩn hóa 4NF:

  • Tạo bảng Sở thích: | ID | Sở thích | |—-|————–| | 1 | Đọc sách | | 1 | Chơi thể thao| | 2 | Vẽ tranh |
  • Tạo bảng Kỹ năng: | ID | Kỹ năng | |—-|————–| | 1 | Lập trình | | 1 | Giao tiếp | | 2 | Vẽ | | 2 | Thiết kế |

5. Chuẩn hóa 5NF (Fifth Normal Form)

Chuẩn hóa 5NF yêu cầu bảng phải thỏa mãn các điều kiện của 4NF và:

  • Không có sự phụ thuộc khôi phục thông tin: Tất cả các bảng phải được chia nhỏ sao cho không thể tách rời thêm nữa mà không mất dữ liệu.

Ví dụ:
Bảng sau không thỏa mãn 5NF vì việc lưu trữ thông tin về các khóa học và giảng viên có thể dẫn đến thông tin thừa khi giảng viên dạy nhiều khóa học.

Mã khóa họcMã giảng viênTên giảng viên
KH101GV01Nam
KH101GV02Hoa
KH102GV01Nam

Sau khi chuẩn hóa 5NF:

  • Tạo bảng Khóa học: | Mã khóa học | Tên khóa học | |————-|————–| | KH101 | Lập trình | | KH102 | Mạng máy tính|
  • Tạo bảng Giảng viên: | Mã giảng viên | Tên giảng viên | |—————-|—————-| | GV01 | Nam | | GV02 | Hoa |
  • Tạo bảng Giảng viên khóa học: | Mã khóa học | Mã giảng viên | |————-|—————| | KH101 | GV01 | | KH101 | GV02 | | KH102 | GV01 |

6. Chuẩn hóa 6NF (Sixth Normal Form)

Chuẩn hóa 6NF liên quan đến việc xử lý dữ liệu có tính chất thay đổi theo thời gian (temporal data). Trong chuẩn 6NF, mỗi bảng chỉ chứa một mối quan hệ duy nhất với dữ liệu và không có sự thay đổi qua các thời điểm.

Ví dụ: Bảng có thể chứa thông tin về một người và các sự kiện thay đổi trạng thái của người đó theo thời gian. Dữ liệu sẽ được phân tách thành nhiều bảng nhỏ hơn để lưu trữ thông tin tại từng thời điểm.


Còn đây là ví dụ thực tế về cách áp dụng các chuẩn hóa cơ sở dữ liệu trong MySQL từ chuẩn 1NF đến 3NF, với các bảng và dữ liệu mẫu.

1. Chuẩn hóa 1NF (First Normal Form)

Giả sử chúng ta có bảng SinhVien sau, trong đó cột SởThich chứa nhiều giá trị, không tuân thủ chuẩn 1NF.

Bảng SinhVien không ở chuẩn 1NF:

CREATE TABLE SinhVien (
ID INT PRIMARY KEY,
Ten VARCHAR(100),
SoThich VARCHAR(255)
);

INSERT INTO SinhVien (ID, Ten, SoThich) VALUES
(1, 'Nam', 'Đọc sách, Chơi thể thao'),
(2, 'Hoa', 'Vẽ tranh');

Bảng trên không thỏa mãn 1NF vì cột SởThích chứa nhiều giá trị (Đọc sách, Chơi thể thao).

Sau khi chuẩn hóa 1NF:

Chúng ta sẽ tách thành các bản ghi riêng biệt cho mỗi sở thích của sinh viên.

CREATE TABLE SinhVien (
ID INT PRIMARY KEY,
Ten VARCHAR(100)
);

CREATE TABLE SoThich (
ID INT,
SoThich VARCHAR(100),
FOREIGN KEY (ID) REFERENCES SinhVien(ID)
);

-- Dữ liệu cho bảng SinhVien
INSERT INTO SinhVien (ID, Ten) VALUES
(1, 'Nam'),
(2, 'Hoa');

-- Dữ liệu cho bảng SoThich
INSERT INTO SoThich (ID, SoThich) VALUES
(1, 'Đọc sách'),
(1, 'Chơi thể thao'),
(2, 'Vẽ tranh');

2. Chuẩn hóa 2NF (Second Normal Form)

Bảng SinhVien và bảng MonHoc dưới đây có sự phụ thuộc một phần vào khóa chính (mã môn học). Điều này vi phạm chuẩn 2NF.

Bảng SinhVienMonHoc không ở chuẩn 2NF:

CREATE TABLE SinhVienMonHoc (
ID INT,
MaMonHoc VARCHAR(10),
TenMonHoc VARCHAR(100),
Diem DECIMAL(5,2),
PRIMARY KEY (ID, MaMonHoc)
);

-- Dữ liệu cho bảng SinhVienMonHoc
INSERT INTO SinhVienMonHoc (ID, MaMonHoc, TenMonHoc, Diem) VALUES
(1, 'MTH101', 'Toán học', 8),
(1, 'PHY102', 'Vật lý', 7),
(2, 'MTH101', 'Toán học', 9);

Ở đây, TenMonHoc phụ thuộc vào MaMonHoc, nhưng không phải vào ID sinh viên. Do đó, chúng ta cần phân tách bảng để tuân thủ chuẩn 2NF.

Sau khi chuẩn hóa 2NF:

Tách bảng SinhVienMonHoc thành ba bảng SinhVien, MonHocDiem:

CREATE TABLE SinhVien (
ID INT PRIMARY KEY,
Ten VARCHAR(100)
);

CREATE TABLE MonHoc (
MaMonHoc VARCHAR(10) PRIMARY KEY,
TenMonHoc VARCHAR(100)
);

CREATE TABLE Diem (
ID INT,
MaMonHoc VARCHAR(10),
Diem DECIMAL(5,2),
PRIMARY KEY (ID, MaMonHoc),
FOREIGN KEY (ID) REFERENCES SinhVien(ID),
FOREIGN KEY (MaMonHoc) REFERENCES MonHoc(MaMonHoc)
);

-- Dữ liệu cho bảng SinhVien
INSERT INTO SinhVien (ID, Ten) VALUES
(1, 'Nam'),
(2, 'Hoa');

-- Dữ liệu cho bảng MonHoc
INSERT INTO MonHoc (MaMonHoc, TenMonHoc) VALUES
('MTH101', 'Toán học'),
('PHY102', 'Vật lý');

-- Dữ liệu cho bảng Diem
INSERT INTO Diem (ID, MaMonHoc, Diem) VALUES
(1, 'MTH101', 8),
(1, 'PHY102', 7),
(2, 'MTH101', 9);

3. Chuẩn hóa 3NF (Third Normal Form)

Giả sử bảng NhanVien có sự phụ thuộc chuyển tiếp, tức là Tên Thành Phố phụ thuộc vào Mã Thành Phố. Điều này vi phạm chuẩn 3NF.

Bảng NhanVien không ở chuẩn 3NF:

CREATE TABLE NhanVien (
ID INT PRIMARY KEY,
Ten VARCHAR(100),
DiaChi VARCHAR(255),
MaThanhPho INT,
TenThanhPho VARCHAR(100)
);

-- Dữ liệu cho bảng NhanVien
INSERT INTO NhanVien (ID, Ten, DiaChi, MaThanhPho, TenThanhPho) VALUES
(1, 'Nam', 'Hà Nội, Cầu Giấy', 101, 'Hà Nội'),
(2, 'Hoa', 'TP.HCM, Quận 1', 102, 'TP.HCM');

Ở đây, TenThanhPho phụ thuộc vào MaThanhPho, không phải vào ID của nhân viên. Vì vậy, ta cần tách bảng NhanVien để tuân thủ chuẩn 3NF.

Sau khi chuẩn hóa 3NF:

Tách thành các bảng NhanVien, ThanhPho:

CREATE TABLE NhanVien (
ID INT PRIMARY KEY,
Ten VARCHAR(100),
DiaChi VARCHAR(255),
MaThanhPho INT,
FOREIGN KEY (MaThanhPho) REFERENCES ThanhPho(MaThanhPho)
);

CREATE TABLE ThanhPho (
MaThanhPho INT PRIMARY KEY,
TenThanhPho VARCHAR(100)
);

-- Dữ liệu cho bảng ThanhPho
INSERT INTO ThanhPho (MaThanhPho, TenThanhPho) VALUES
(101, 'Hà Nội'),
(102, 'TP.HCM');

-- Dữ liệu cho bảng NhanVien
INSERT INTO NhanVien (ID, Ten, DiaChi, MaThanhPho) VALUES
(1, 'Nam', 'Hà Nội, Cầu Giấy', 101),
(2, 'Hoa', 'TP.HCM, Quận 1', 102);

Tổng kết

  • 1NF: Loại bỏ các cột có dữ liệu không nguyên tử.
  • 2NF: Loại bỏ các phụ thuộc phần (partial dependency).
  • 3NF: Loại bỏ các phụ thuộc chuyển tiếp (transitive dependency).

Các chuẩn hóa cao hơn như 4NF5NF sẽ giúp giảm thêm các vấn đề dư thừa dữ liệu và mối quan hệ giữa các bảng phức tạp hơn, nhưng chúng chủ yếu được sử dụng trong các hệ thống phức tạp hoặc với các yêu cầu lưu trữ và truy vấn dữ liệu đặc biệt. Chúc các bạn học tập và làm việc tốt nhé!

bbugtea

bbugtea

Là người yêu thích, tìm hiểu quy trình gia công hệ thống phần mền website. Câu tục ngữ yêu thích nhất: "CÓ CÔNG MÀI SẮT CÓ NGÀY NÊN KIM".

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *