You are on page 1of 5

7/4/23, 5:01 AM 3 bước chuẩn hóa NF cơ sở dữ liệu - Học lập trình từ con số 0

U a
3 bước chuẩn hóa NF cơ sở dữ liệu
May 11, 2020 | Blog | 2 comments

Bài viết này sẽ giới thiệu đến bạn 3 bước chuẩn hóa NF Cơ sở dữ
liệu.

Mục đích của việc chuẩn hóa NF Cơ sở dữ


liệu
1. Giảm thiểu dư thừa dữ liệu
2. Loại bỏ các bất thường khi cập nhật cơ sở dữ liệu

Các kiểu chuẩn hóa cơ sở dữ liệu


Có 3 dạng chuẩn hóa cơ bản đó là:

– First Normal Form (1NF): dạng chuẩn 1NF

– Second Normal Form (2NF): dạng chuẩn 2NF

– Third Nomal Form (3NF): dạng chuẩn 3NF

Các dạng chuẩn được sắp xếp theo thứ tự từ thấp đến cao. Để
chuẩn hóa 2NF thì cơ sở dữ liệu của bạn phải đạt chuẩn 1NF,
tương tự nếu đạt chuẩn 3NF thì phải đạt chuẩn 1NF và 2NF.

Dạng chuẩn 1NF


Cho 1 bảng như bên dưới:

Privacy - Terms

https://codegym.vn/blog/2020/05/11/3-buoc-chuan-hoa-nf-co-so-du-lieu/ 1/8
7/4/23, 5:01 AM 3 bước chuẩn hóa NF cơ sở dữ liệu - Học lập trình từ con số 0

Bảng có 3 khóa chính là customer_id, order_id và product_id.

Bảng dữ liệu này vi phạm cả điều kiện của chuẩn 1NF


vì:  address  chứa các giá trị trùng lặp, hơn thế nữa, giá
trị  address  trong từng hàng không phải là đơn trị (chỉ có 1 giá
trị), thêm vào đó, thuộc tính total_amount hoàn toàn có thể tính
toán được bằng cách  quantity * unit_price, không nhất thiết
phải đưa vào bảng, gây ra dư thừa dữ liệu. Qua nhận xét trên, ta
có thể hình dung ra 3 điều kiện cần phải tuân theo đó là:

Các thuộc tính của bảng phải là nguyên tố


Giá trị của các thuộc tính trên các hàng phải là đơn trị, không
chứa nhóm lặp
Không có một thuộc tính nào có giá trị có thể tính toán được
từ một thuộc tính khác

Từ đó, ta có thể thiết kế lại bảng dữ liệu trên như sau:

Tách các thuộc tính lặp trong bảng


như:  customer_name,  phone  ra thành một bảng mới
là customers
Tách address thành một bảng riêng có khóa là customer_id để
biết địa chỉ đó thuộc về customer nào.
Loại bỏ thuộc tính total_amount.

Kết quả như sau:

https://codegym.vn/blog/2020/05/11/3-buoc-chuan-hoa-nf-co-so-du-lieu/ 2/8
7/4/23, 5:01 AM 3 bước chuẩn hóa NF cơ sở dữ liệu - Học lập trình từ con số 0

Dạng chuẩn 2NF


Quy tắc chuẩn hóa từ chuẩn 1NF thành 2NF:

Bước 1: Loại bỏ các thuộc tính không khóa phụ thuộc vào một
bộ phận khóa chính và tách ra thành một bảng riêng, khóa
chính của bảng là bộ phận của khóa mà chúng phụ thuộc vào.

Bước 2: 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ó là khóa chính ban đầu.

Bảng dữ liệu mới mà ta thiết kế vẫn chưa đạt chuẩn 2NF là vì:
một số thuộc tính

như  description  ,  unit_price  phụ thuộc vào 1 phần của khóa


là  product_id  chứ không cần phụ thuộc cả vào tập khóa
(customer_id,  order_id,  product_id), hay thuộc
tính  customer_name  và  phone  cũng chỉ phụ thuộc
vào  customer_id, thuộc tính  order_date  phụ thuộc
vào  customer_id  và  order_id, thuộc tính  quantity  phụ thuộc
vào order_id và product_id.

Vậy nên để đạt chuẩn 2NF thì ta sẽ thiết kế tiếp bảng dữ liệu
chuẩn 1NF như sau:

Tách các thuộc tính (product_id, description, unit_price) thành


một bảng riêng là products.
Các thuộc tính (customer_id,  order_id,  order_date) làm thành
một bảng, mình đặt tên là orders.
Còn lại các thuộc tính (order_id,  product_id,  quantity) làm
thành một bảng trung gian giữa products và orders, mình đặt
https://codegym.vn/blog/2020/05/11/3-buoc-chuan-hoa-nf-co-so-du-lieu/ 3/8
7/4/23, 5:01 AM 3 bước chuẩn hóa NF cơ sở dữ liệu - Học lập trình từ con số 0

là order_products.

Chỉ cần tuân thủ 2 chuẩn mà ta đã được cơ sở dữ liệu chuẩn hóa


như sau:

Dạng chuẩn 3NF


Điều kiện:

Phải đạt chuẩn 2NF


Mọi thuộc tính không khóa phụ thuộc bắc cầu vào thuộc tính
khóa (nghĩa là tất cả các thuộc tính không khóa phải được suy
ra trực tiếp từ thuộc tính khóa)

Quy tắc chuẩn hóa từ 2NF thành 3NF:

Bước 1: Loại bỏ các thuộc tính phụ thuộc bắc cầu ra khỏi quan
hệ và tách chúng thành quan hệ riêng có khóa chính là thuộc
tính bắc cầu.

Bước 2: Các thuộc tính còn lại lập thành một quan hệ có khóa
chính là khóa ban đầu.

Để ý thấy cơ sở dữ liệu mà ta thiết kế ở chuẩn 2NF cũng đã đạt


chuẩn 3NF. Thế nên mình sẽ lấy một ví dụ khác để các bạn tham
khảo như sau:

Ví dụ bảng sau vi phạm chuẩn 3NF:

https://codegym.vn/blog/2020/05/11/3-buoc-chuan-hoa-nf-co-so-du-lieu/ 4/8
7/4/23, 5:01 AM 3 bước chuẩn hóa NF cơ sở dữ liệu - Học lập trình từ con số 0

Ta thấy thuộc tính  country_name  phụ thuộc vào  country_id,


mà country_id lại phụ thuộc vào khóa chính là id. Vì vậy ta nên
tách bảng trên thành 2 bảng sau:

Author: Nguyễn Vũ Thành Tiến

Xem thêm các tài liệu, bài chia sẻ, hướng dẫn khác tại đây.
Đăng ký nhận bộ tài liệu kỹ năng dành cho lập trình viên
(video hướng dẫn + slide) tại đây
> Xem thêm: TÀI LIỆU LẬP TRÌNH CĂN BẢN – ĐƠN GIẢN, DỄ
HỌC!

Xem thêm video: Database Design (Thiết kế cơ sở dữ liệu)

[Java tutorial] Bài 1.17: Database Design (Thiết kế cơ


sở dữ liệu)

https://codegym.vn/blog/2020/05/11/3-buoc-chuan-hoa-nf-co-so-du-lieu/ 5/8

You might also like