You are on page 1of 15

Học phần: Hệ thống cơ sở dữ liệu

Bài 5 Chuẩn hóa quan hệ


- Mục đích: Cung cấp cho sinh viên kỹ thuật chuẩn hóa về dạng chuẩn 3.
- Yêu cầu: Sinh viên nhận thực hiện được việc chuẩn hóa quan hệ về dạng chuẩn 3.
- Hình thức tổ chức dạy học: Lý thuyết, tự học
- Thời gian: Lý thuyết( trên lớp: 3; online: 3) Tự học, tự nghiên cứu: 12
- Nội dung chính:

Chuẩn hóa quan hệ


5. 1. Một số khái niệm
Dư thừa dữ liệu và dị thường cập nhật
Dư thừa dữ liệu là khi chúng ta lưu trữ cùng một thông tin ở nhiều hơn một chỗ, khi đó
có thể loại bỏ các dư thừa dữ liệu mà không làm mất mát thông tin.
Ví dụ cho một cơ sở dữ liệu vũ trụ có một quan hệ như sau

Ma_sv Ten Ten_lop Ngay_TL Ma_mh Ten_mh Diem

114 Lan CN01 03/01/2008 t04, t07 SQL, Java 5,7

123 Nam CN01 03/01/2008 t04, t07 SQL, Java 5,6

154 Chi CN02 14/02/2008 t04 SQL 8

693 Anh CN02 14/02/2008 t03 HTML 6

Trong bảng trên có dư thừa dữ liệu ví dụ dữ liệu về lớp như tên lớp, ngày thành lập
được lặp lại ở nhiều nơi. Khi có dư thừa dữ liệu thì thường xảy ra các dị thường cập nhật,
chúng bao gồm:
● Dị thường khi chèn: Không thể thêm môn CSDL vào bảng vì môn này chưa
có sinh viên nào học và thi.
● Dị thường khi sửa: Khi sửa tên một lớp thì phải sửa nhiều dòng.
● Dị thường khi xóa: Khi xóa sinh viên mã 693 thì môn HTML cũng bị xóa
Trang 1
Học phần: Hệ thống cơ sở dữ liệu

khỏi CSDL.
● Thuộc tính suy diễn: là các thuộc tính có thể tính toán được từ các thuộc tính khác.
Ví dụ: ThTien = DG x SL

Thuộc tính lặp: Thuộc tính A là lặp nếu nó có nhiều giá trị khác nhau tương ứng với
một giá trị của nhóm thuộc tính tương ứng. Ví dụ: MaHang, TenHang, DG, SL, ThTien.
Ngay MaDH NgNhan DiaChi MaHang TenHang DG SL ThTien

1/8/97 N02 Nam Hà Nội A1 Xe đạp 1000 2 2000

A2 Xe máy 5000 1 5000

2/8/97 N03 Bình Huế A2 Xe máy 5000 2 10000

A3 Yên xe 50 5 250

A5 Giỏ xe 10 10 100

Trong thiết kế các quan hệ không được phép có nhóm lặp vì tất cả các thuộc tính cần
phải có giá trị nguyên tố (tức là mỗi ô chỉ có một giá trị).
● Phụ thuộc hàm bộ phận vào khóa: Là các phụ thuộc hàm có tập thuộc tính xác
định hàm là một phần của khóa chính. Ngược lại là phụ thuộc hàm đầy đủ vào khóa.
Ví dụ:

PK = {SoHD, MaHang}
MaHang -TenHang là phụ thuộc hàm bộ phận vào khóa
{SoHD, MaHang} -SoLuong là phụ thuộc hàm đầy đủ vào khóa
● Phụ thuộc hàm không khóa: Là phụ thuộc hàm giữa các thuộc tính không nằm
trong khóa chính. Ví dụ
Trang 2
Học phần: Hệ thống cơ sở dữ liệu

PK = {SoHD, MaHang}
MaNCC - TenNCC là phụ thuộc hàm không khóa
5. 2. Các dạng chuẩn
Chuẩn hóa là tiến trình tách dữ liệu từ một quan hệ lớn vào một tập các quan hệ nhỏ
hơn mà vẫn đảm bảo tính toàn vẹn dữ liệu đồng thời loại bỏ được các dư thừa dữ liệu trong
quan hệ. Tiến trình chuẩn hóa dựa trên một tập các luật được gọi là các dạng chuẩn. Có 7
dạng chuẩn trong đó 4 dạng chuẩn được Edgar F. Codd đưa ra vào năm 1974. Chúng là:
● Dạng chuẩn một (1NF)
● Dạng chuẩn hai (2NF)
● Dạng chuẩn ba (3NF)
● Dạng chuẩn Boyce-Codd (BCNF)
● Dạng chuẩn bốn (4NF)
● Dạng chuẩn năm (5NF)
● Dạng chuẩn miền khóa (DKNF)
Ba dạng chuẩn đầu là các luật cần thiết nhất trong tất cả các thiết kế cơ sở dữ liệu còn
bốn dạng chuẩn sau phức tạp hơn và chỉ được yêu cầu trong một số trường hợp. Trong bài
học này chúng ta chỉ xem xét ba dạng chuẩn đầu tiên.
Dạng chuẩn 1 (1NF - First Normal Form): Một quan hệ là ở dạng chuẩn 1 nếu toàn bộ
các miền thuộc tính đều là các miền đơn và không tồn tại nhóm thuộc tính lặp.
Ví dụ: Khoá chính là Mã SV. Nhóm thuộc tính lặp là Môn học và Điểm.

Mã SV Tên SV Môn học Điểm Môn học Điểm


135 Anh SA1 5 SA2 7

136 Bình SA2 6 SD 5


140 Lan SD 8

Trang 3
Học phần: Hệ thống cơ sở dữ liệu

Dạng chuẩn 2 (2NF - Second Normal Form): Một quan hệ ở dạng chuẩn 2 nếu nó đã
ở dạng chuẩn 1 và không tồn tại phụ thuộc hàm bộ phận vào khoá.
Ví dụ: Cho một quan hệ: R (A, B, C, D, E); Khoá chính là {A, B}

Các phụ thuộc hàm: {{A,B}- D; A- C; D- E}

A - C là phụ thuộc hàm bộ phận vào khoá


* Chú ý: Quan hệ có khoá chính là một thuộc tính luôn ở dạng chuẩn 2
Dạng chuẩn 3 (3NF - Third Normal Form): Một quan hệ ở dạng chuẩn 3 nếu nó đã ở
dạng chuẩn 2 và không tồn tại phụ thuộc hàm bắc cầu vào khoá (hay phụ thuộc hàm giữa các
thuộc tính không khoá).
Ví dụ: Cho một quan hệ: R (A, B, D, E); Khoá chính là {A, B}

Các phụ thuộc hàm: {{A,B}- D; D- E }

D- E là phụ thuộc hàm giữa các thuộc tính không khoá

Quá trình chuẩn hóa quan hệ là quá trình chuyển từ quan hệ chưa chuẩn hóa (quan hệ
có chứa một hay nhiều nhóm dữ liệu lặp) về quan hệ ở dạng chuẩn cần thiết (thường là dạng
chuẩn 3).
Ví dụ
● Quan hệ chưa chuẩn hóa (dạng chuẩn 0NF): Quan hệ không ở 1NF vì có các thuộc
tính lặp Ma_mh, Ten_mh, Diem

Ma_sv Ten Ten_lop Ngay_TL Ma_mh Ten_mh Diem


114 Lan CN01 03/01/2008 t04, t07 SQL, Java 5,7
123 Nam CN01 03/01/2008 t04, t07 SQL, Java 5,6
154 Chi CN02 14/02/2008 t04 SQL 8
693 Anh CN02 14/02/2008 t03 HTML 6
● Quan hệ ở 1NF: Quan hệ có các phụ thuộc hàm Ma_mh -en_mh; {Ma_sv,
Ma_mh}->Diem. Khóa của quan hệ là {Ma_sv, Ma_mh}

Ma_sv Ma_mh Ten_mh Diem

Trang 4
Học phần: Hệ thống cơ sở dữ liệu

114 t04 SQL 5


114 t07 Java 7
123 t04 SQL 5
123 t07 Java 6
154 t04 SQL 8
693 t03 HTML 6
❖ Quan hệ đã ở dạng chuẩn 1 vì không có thuộc tính lặp
❖ Có Ma_mh- Ten_mh là phụ thuộc hàm bộ phận vào khóa => quan hệ không
ở dạng chuẩn 2
● Quan hệ ở 2NF: Quan hệ có các phụ thuộc hàm Ma_sv- Ten, Ten_lop;

Ten_lop - Ngay_TL. Khóa của quan hệ là {Ma_sv}

Ma_sv Ten Ten_lop Ngay_TL


114 Lan CN01 03/01/2008
123 Nam CN01 03/01/2008
154 Chi CN02 14/02/2008
693 Anh CN02 14/02/2008
❖ Quan hệ đã ở dạng chuẩn 1 vì không có thuộc tính lặp
❖ Quan hệ đã ở dạng chuẩn 2 vì không có phụ thuộc hàm bộ phận
❖ Có Ten_lop- Ngay_TL là phụ thuộc hàm giữa các thuộc tính không khóa => quan
hệ không ở dạng chuẩn 3

● Quan hệ ở 3NF: Quan hệ có các phụ thuộc hàm Ma_sv- Ten, Ten_lop. Khóa của
quan hệ là {Ma_sv}

Ma_sv Ten Ten_lop


114 Lan CN01
123 Nam CN01

Trang 5
Học phần: Hệ thống cơ sở dữ liệu

154 Chi CN02


693 Anh CN02
❖ Quan hệ đã ở dạng chuẩn 1 vì không có thuộc tính lặp
❖ Quan hệ đã ở dạng chuẩn 2 vì không có phụ thuộc hàm bộ phận
❖ Quan hệ không ở dạng chuẩn 3 vì không có phụ thuộc hàm giữa các thuộc tính không
khóa.
● Chú ý:
❖ Không có cách chứng minh chính xác một quan hệ đang ở dạng chuẩn nào.
❖ Để chứng minh một quan hệ KHÔNG ở dạng chuẩn X thì cần chỉ ra vi phạm dạng
chuẩn X của quan hệ đó.
❖ Nếu không chỉ ra được vi phạm dạng chuẩn X của quan hệ thì có thể kết luận quan hệ
đang ở dạng chuẩn X.

Ví dụ: Cho biết các quan hệ sau ở dạng chuẩn nào


Quan hệ R1 với tập phụ thuộc hàm là: FD = {A- B, C- D, AC- E}
◦ PK = {A,C}
◦ Quan hệ đã ở 1NF vì không có thuộc tính lặp
◦ Quan hệ chưa ở 2NF vì có phụ thuộc hàm bộ phận vào khóa là: A- B
và C- D
Quan hệ R2 với tập phụ thuộc hàm là: FD = {A- BE,B- C}
◦ PK = {A}
◦ Quan hệ đã ở 1NF vì không có thuộc tính lặp
◦ Quan hệ đã ở 2NF vì không có phụ thuộc hàm bộ phận vào khóa
◦ Quan hệ chưa ở 3NF vì có phụ thuộc hàm không khóa là B- C

5. 3. Các bước chuẩn hoá quan hệ


Quá trình mô hình hóa dữ liệu, xây dựng ERD được xem là cách tiếp cận từ trên xuống
(top-down) trong thiết kế cơ sở dữ liệu. ERD bắt đầu bằng cách xác định bằng trực giác các

Trang 6
Học phần: Hệ thống cơ sở dữ liệu

đối tượng quan trọng (hay các thực thể) dựa vào những dữ liệu mà hệ thống lưu giữ và sau
đó xác định các thuộc tính là những đặc điểm mô tả mỗi thực thể cùng với các mối quan hệ
giữa các thực thể.
Chuẩn hóa được xem là cách tiếp cận từ dưới lên (bottom-up) bởi vì nó bắt đầu với một
tập hợp các thuộc tính và tổ chức chúng thành các quan hệ có cấu trúc tốt hơn loại bỏ dư thừa
dữ liệu (có thể loại bỏ dữ liệu trùng lặp mà không làm mất mát thông tin).
Chuẩn hóa còn được sử dụng để kiểm tra các thực thể đã được xác định trong quá trình
mô hình hóa thực thể-quan hệ thành các nhóm dữ liệu logic và khẳng định chúng không là
dữ liệu dư thừa.
Quá trình chuẩn hóa quan hệ có thể chia thành 5 bước:
● Bước 1: Lấy danh sách thuộc tính.
● Bước 2: Chuẩn hoá về dạng chuẩn 1.
● Bước 3: Chuẩn hoá về dạng chuẩn 2.
● Bước 4: Chuẩn hoá về dạng chuẩn 3.
● Bước 5: Viết quan hệ dưới dạng bản ghi logic.

Cụ thể các bước được tiến hành như sau


5. 3. 1. Lấy danh sách thuộc tính
● Từ một biểu mẫu (hoá đơn, chứng từ,…) lấy ra một danh sách các thuộc tính
cho quan hệ chưa chuẩn hoá (0NF - 0 Normal Form).
● Bỏ qua phần đầu đề và phần dưới cùng (một số ghi chú, chữ ký …) của biểu
mẫu. Mỗi tiêu đề còn lại trong biểu mẫu là một thuộc tính.
● Không lấy các thuộc tính được suy diễn từ những thuộc tính khác (như thành
tiền = đơn giá x số lượng) và các thuộc tính trình bày như ‘số thứ tự’ nếu có.
● Bổ sung thêm một số thuộc tính định danh tương ứng với một số thuộc tính tên
gọi chưa có định danh nếu cần thiết.
● Xác định nhóm thuộc tính lặp.
5. 3. 2. Chuẩn hoá về dạng chuẩn 1 (1NF)
Chuẩn hóa từ 0NF về 1NF bằng cách loại bỏ nhóm lặp.

Trang 7
Học phần: Hệ thống cơ sở dữ liệu

● Tách nhóm thuộc tính lặp: Tách các thuộc tính không nằm trong nhóm lặp
thành một quan hệ. Xác định phụ thuộc hàm cho các thuộc tính trong quan
hệ này từ đó xác định khoá chính của quan hệ.
● Các thuộc tính của nhóm lặp và khoá chính của quan hệ trên tạo thành một
quan hệ. Xác định phụ thuộc hàm cho các thuộc tính trong quan hệ này từ
đó xác định khoá chính của quan hệ (khóa chính của quan hệ này thường là
khóa ghép).
5. 3. 3. Chuẩn hóa về dạng chuẩn 2 (2NF)
Chuẩn hóa từ 1NF về 2NF bằng cách loại bỏ phụ thuộc bộ phận vào khoá. Vì phụ thuộc
bộ phận vào khóa chỉ có ở các quan hệ có khoá ghép nên các quan hệ có khóa là một thuộc
tính đã ở 1NF thì đương nhiên cũng ở 2NF.
● Tách các thuộc tính tham gia phụ thuộc bộ phận vào khoá vào một quan hệ
mới. Khoá chính của quan hệ là thuộc tính xác định hàm.
● Phần còn lại cùng với khoá chính của quan hệ trên tạo thành một quan hệ giữ
nguyên khoá chính như quan hệ ban đầu.
5. 3. 4. Chuẩn hoá về dạng chuẩn 3 (3NF)
Chuẩn hóa từ 2NF về 3NF bằng cách loại bỏ phụ thuộc hàm giữa các thuộc tính không
khoá.
● Tách các thuộc tính tham gia vào phụ thuộc hàm giữa các thuộc tính không
khoá vào một quan hệ mới. Khoá chính của quan hệ là thuộc tính xác định
hàm.
● Phần còn lại và khoá chính của quan hệ trên là một quan hệ giữ nguyên khoá
chính như quan hệ ban đầu.
5. 3. 5. Viết quan hệ dưới dạng các bản ghi logic
● Đặt tên cho các quan hệ tương ứng với dữ liệu lưu trữ.
● Viết các quan hệ dưới dạng bản ghi logic, xác định khóa chính, khóa ngoài
tương ứng.
5. 4. Ví dụ chuẩn hóa quan hệ
Xây dựng mô hình quan hệ ở dạng chuẩn 3 từ biểu mẫu sau:
Trang 8
Học phần: Hệ thống cơ sở dữ liệu

Hình 1. Biểu mẫu Hóa đơn.

Chú ý: Đơn giá hàng thay đổi trong các hóa đơn khác nhau.

Kết quả chuẩn hóa


● Danh sách thuộc tính: Số HD, Ngày lập, Mã KH, Tên KH, Điện thoại, Địa
chỉ, Tên hàng, Loại, Đơn giá, Số lượng, Ghi chú, Mã NV, Họ tên NV
● Bổ sung thêm thuộc tính: Mã hàng
● Nhóm lặp (&): Mã hàng, Tên hàng, Loại, Đơn giá, Số lượng

Tách nhóm lặp được kết quả chuẩn hóa sau :

Trang 9
Học phần: Hệ thống cơ sở dữ liệu

0NF 1NF
SoHD Phụ thuộc hàm
SoHD

NgayLap NgayLap
MaKH
MaKH
TenKH
TenKH
ĐienThoai NgayLap TenKH
ĐienThoai
ĐiaChi MaKH DiaChi
ĐiaChi SoHD
GhiChu
GhiChu DienThoai
MaNV
HoTenNV MaNV HoTenN
V
& MaHang SoHD TenHang
MaHang
& TenHang MaHang
Loai
TenHang
& Loai SoHD
Loai
DonGia
& ĐonGia
ĐonGia SoLuong
& SoLuong
SoLuong
GhiChu

MaNV

HoTenNV

Trang 10
Học phần: Hệ thống cơ sở dữ liệu

Tách về 2NF

0NF 1NF 2NF Phụ thuộc hàm


SoHD SoHD
NgayLap NgayLap
MaKH NgayL TenKH
MaKH
TenKH ap
TenKH ĐienThoai MaKH DiaChi
ĐienThoai ĐiaChi SoHD
ĐiaChi GhiChu GhiCh DienTh
u oai
& MaHang MaNV
HoTenNV MaNV HoTen
& TenHang NV
& Loai
& ĐonGia
& SoLuong TenHang
SoHD MaHang MaHang
GhiChu MaHang TenHang Loai
MaNV TenHang
Loai
HoTenNV Loai
ĐonGia
SoLuong SoHD TenHang
MaHang MaHang
ĐonGia Loai
SoHD
SoLuong DonGia

SoLuong

Trang 11
Học phần: Hệ thống cơ sở dữ liệu

Tách về 3NF

0NF 1NF 2NF 3NF Tên gọi


SoHD SoHD MaKH KHACH_HANG
NgayLap NgayLap TenKH
MaKH
MaKH ĐienThoai
TenKH
TenKH ĐiaChi
ĐienThoai
ĐienThoai ĐiaChi
MaNV
NHAN_VIEN
ĐiaChi GhiChu HoTenNV
& MaHang MaNV SoHD
HOA_DON
& TenHang HoTenNV NgayLap

& Loai MaKH

& ĐonGia GhiChu

& SoLuong MaNV


SoHD MaHang
GhiChu HANG
MaHang TenHang
MaNV
TenHang
HoTenNV Loai
Loai
SoHD
ĐonGia CHI_TIET_HD
SoLuong MaHang
ĐonGia
SoLuong

Các bản ghi logic:


KHACH_HANG (MaKH, TenKH, ĐienThoai, ĐiaChi)
NHAN_VIEN (MaNV, HoTenNV)
HOA_DON (SoHD, NgayLap, MaKH, GhiChu, MaNV)
HANG (MaHang, TenHang, Loai)

Trang 12
Học phần: Hệ thống cơ sở dữ liệu

CHI_TIET_HD (SoHD,MaHang, ĐonGia, SoLuong)

*Nhận xét: Chuyển đồ thị phụ thuộc hàm của ví dụ trên thành bản ghi logic cũng chính
là chuẩn hóa quan hệ về 3NF. Vì vậy khi thực hành chỉ cần xác định đồ thị phụ thuộc hàm
sau đó tách đồ thị phụ thuộc hàm thành các bản ghi logic ta sẽ có các quan hệ ở 3NF.
Vào thời kỳ đầu của mô hình quan hệ khi mô hình hóa chưa được phát triển, cách tiếp
cận duy nhất để thiết kế cơ sở dữ liệu chính là chuẩn hóa quan hệ. Tuy nhiên, khi phương
pháp mô hình hóa được sử dụng trong thiết kế cở sở dữ liệu, hầu hết quá trình chuẩn hóa đã
thực sự được tiến hành trong suốt giai đoạn mô hình hóa bởi vì các luật và các quy tắc mô
hình hóa được xây dựng trên cơ sở của các luật chuẩn hóa. Vì vậy việc chuẩn hóa bây giờ
được sử dụng chủ yếu chỉ để kiểm tra các quan hệ được rút ra từ quá trình mô hình hóa đã
thực sự chuẩn hay chưa.
Bài tập
Xây dựng các quan hệ ở dạng 3NF từ các biểu mẫu sau:
1)

2)

Trang 13
Học phần: Hệ thống cơ sở dữ liệu

3)

Trang 14
Học phần: Hệ thống cơ sở dữ liệu

Tài liệu chính:


[1] Nguyễn Thị Thanh Huyền, Ngô Thị Bích Thúy, Giáo trình cơ sở dữ liệu, 2011
[2] Nguyễn Thị Thanh Huyền, Ngô Thị Bích Thúy, Phạm Thị Kim Phượng, Giáo trình
phân tích thiết kế hệ thống, 2011

Trang 15

You might also like