Mã bài: 11.12 Giới thiệu:
Tất cả mọi hệ thống đều phải sử dụng một cơ sở dữ liệu của mình, đó có thể là một cơ sở dữ liệu đã có hoặc một cơ sở dữ liệu được xây dựng mới. Cũng có những hệ thống sử dụng cả cơ sở dữ liệu cũ và mới. Vấn đề đặt ra là cần xây dựng một cơ sở dữ liệu giảm được tối đa sự dư thừa dữ liệu đồng thời phải dễ khôi phục và bảo trì. Vì vậy khái niệm dạng chuẩn được đưa ra để biết được lược đồ nào là tối ưu (không có dư thừa dữ liệu, nhất quán được dữ liệu, …) Bên cạnh đó các thao tác cập nhật dữ liệu (qua các phép chèn thêm, xóa, sửa đổi) gây nên những dị thường, cho nên các quan hệ nhất thiết phải được biến đổi thành các dạng phù hợp, quá trình đó được gọi là quá trình chuẩn hóa dữ liệu Bài này sẽ giới thiệu khái niệm tổng quát về dạng chuẩn 1 (1NF), dạng chuẩn 2 (2NF), dạng chuẩn 3 (3NF) và dạng chuẩn Boyce – Codd (BC NF) và cách nhận biết 1 lược đồ đạt dạng chuẩn nào.
Mục tiêu:
- Trình bày được khái niệm Dạng chuẩn 1,2,3 và Boyce-Codd ( BC).
- Xác định được các dạng chuẩn của lược đồ quan hệ.
- Nghiêm túc, tự giác trong học tập
- Đảm bảo an toàn cho nguời và thiết bị
Nội dung chính:
1. Một số khái niệm liên quan đến dạng chuẩn
+ Thuộc tính khoá/không khoá
A là một thuộc tính khoá nếu A có tham gia vào bất kỳ một khoá nào của quan
hệ, ngược lại A gọi là thuộc tính không khoá.
Ví dụ: Cho lược đồ quan hệ Q(ABC) và tập phụ thuộc hàm
F={ A→ B; A → C; B → A}
Có hai khóa là A và B. khi đó thuộc tính khoá là A, B; thuộc tính không khóa là: C.
+ Thuộc tính phụ thuộc đầy đủ-phụ thuộc hàm đầy đủ.
A là một thuộc tính phụ thuộc đầy đủ vào tập thuộc tính X nếu X →A là một phụ thuộc hàm đầy đủ (tức là không tồn tại X' X sao cho X' → A F+).
Ví dụ:
Cho lược đồ quan hệ Q(ABC) và tập phụ thuộc hàm
F={ A → B; A→ C; AB → C}
PTH A →B; A → C là các phụ thuộc hàm đầy đủ.
PTH AB → C không là phụ thuộc hàm đầy đủ vì có A → C.
Chú ý rằng, một phụ thuộc hàm mà vế trái chỉ có một thuộc tính là phụ thuộc hàm đầy đủ.
+ Thuộc tính phụ thuộc trực tiếp-phụ thuộc hàm trực tiếp (Phụ thuộc bắc
cầu)
A là một thuộc tính phụ thuộc trực tiếp vào tập thuộc tính X nếu X →A , không tồn tại Z U, X→ Z, Z→ A thì X→A là phụ thuộc trực tiếp. Nếu ngược lại thì được gọi là phụ thuộc hàm bắc cầu.
Ví dụ:
Cho lược đồ quan hệ Q(ABC) và tập phụ thuộc hàm
F={ A → B; A→ C; C → B}
PTH C →B; A → C là các phụ thuộc hàm trực tiếp.
PTH A → B là phụ thuộc hàm bắc cầu vì tồn tại C U (A → C, C → B)
2. Dạng chuẩn 1.
Lược đồ quan hệ Q được gọi là đạt dạng chuẩn 1 (1NF) nếu và chỉ nếu toàn bộ các thuộc tính của Q đều mang giá trị đơn.Chẳng hạn xét quan hệ
Hình 11.1 Lược đồ không đạt 1NF
Lược đồ quan hệ này không đạt dạng chuẩn 1 vì các thuộc tính MONHOC, DIEMTHI không mang giá trị đơn (chẳng hạn sinh viên Nguyễn Văn Thành có thuộc tính môn học là Kỹ Thuật Lập Trình, Cơ Sở Dữ Liệu, Cấu Trúc Dữ Liệu).
Hình 11.2 Lược đồ đạt 1NF
3. Dạng chuẩn 2 (2NF)
Trước khi định nghĩa dạng chuẩn 2, ta xét một ví dụ:
Cho CSDL gồm 2 quan hệ
Trong lược đồ THI thì MONTHI là khóa, trong lược đồ SINHVIEN thì MONTHI, MSSV (mã số sinh viên) là khóa
Trong quan hệ SINHVIEN thì các thuộc tính MONTHI, MSSV, DIEM xác định kết quả học tập của sinh viên. Còn MSSV, TEN, TUOI, DIACHI xác định đối tượng là sinh viên, nghĩa là trên SINHVIEN ta có hai phụ thuộc hàm: MONTHI, MSSV → DIEM VÀ MSSV → TEN, TUOI, DIACHI phụ thuộc không đầy đủ
và khóa của quan hệ
Trong quan hệ này, ta nhận thấy: việc lưu trữ thông tin một sinh viên như LAN, nếu học n môn thì lặp lại n lần TEN, TUOI, DIACHI, ta thấy quá dư thừa! Từ việc dư thừa dẫn đến những sai phạm khi thao tác dữ liệu
Bổ sung: khi thêm một sinh viên học môn nào đó, ta không biết sinh viên này đã
có chưa nên một lần nữa lại nhập TEN, TUOI, DIACHI của sinh viên. Trong quá trình thêm này có thể nhập sai tuổi chẳng hạn, dẫn đến không nhất quán dữ liệu. Một sinh viên có hai tuổi khác nhau.
Loại bỏ: Khi một sinh viên không còn học một môn học nào đó, ta phải xóa sinh
viên này khỏi quan hệ. Nếu trong quan hệ chỉ còn một bộ chứa sinh viên này mà
ta xóa đi, dẫn đến mất hẳn thông tin về sinh viên này trong hệ thống
Sửa dữ liệu: Khi cầu điều chỉnh một số thông tin nào đó của một sinh viên, ta
phải sửa tất cả các bộ của sinh viên này. Trong quá trình sửa này có thể sót một
bộ nào đó dẫn đến không nhất quán dữ liệu: môt sinh viên có hai thông tin khác nhau
Do đó: để tổ chức dữ liệu tốt hơn, ta nên tách lược đồ SINHVIEN thành hai
lược đồ như sau: SINHVIEN(MASV, TEN, TUOI, DIACHI) và DIEMTHI(MASV, MONTHI, DIEM)
Một lược đồ quan hệ Q đạt dạng chuẩn 2 thỏa mã điều kiện
-Đạt dạng chuẩn 1
-Mọi thuộc tính không khoá của Q đều phụ thuộc đầy đủ vào khoá chính.
Nếu một lược đồ quan hệ không đạt chuẩn 2 thì ta nói nó đạt dạng chuẩn 1.
Ví dụ 1:
Xét lược đồ quan hệ Q(A,B,C,D) và F={ AB → CD; B → D; C→ A}
Khoá là {A,B} và {B,C}. Do đó D là thuộc tính không khoá; AB → D không là phụ thuộc hàm đầy đủ vì có B → D. Vậy Q không đạt dạng chuẩn 2.
Ví dụ 2:
Xác định dạng chuẩn của lược đồ quan hệ sau. Q(GMVNHP) F={G→N; G→H; G→P; M→V; NHP→M}
Giải
Khoá của Q là G.
Thuộc tính không khoá là M,V,N,H,P.
Do các phụ thuộc hàm G → M; G → V; G → N;
G → H; G → P là các phụ thuộc hàm đầy đủ, nên lược đồ quan hệ Q đạt dạng chuẩn 2.
+ Hệ quả
- Q đạt 2NF nếu Q là 1NF và tập thuộc tính không khoá của Q bằng rỗng.
- Nếu khoá của quan hệ có một thuộc tính thì quan hệ đó ít nhất đạt chuẩn 2.
Ví dụ:
Q(ABCDEH) F={A → E; C → D; E → DH}
Khoá của Q là K={ABC}
D là thuộc tính không khoá và C → D , vì C là tập con thực sự của khoá nên Q không đạt dạng chuẩn 2.
4. Dạng Chuẩn 3 (third normal form)
Một lược đồ quan hệ Q đạt dạng chuẩn 3 nếu nó thỏa mãn 2 điều kiện
-Là dạng chuẩn 2
-Mọi thuộc tính không khóa không phụ thuộc bắc cầu vào khóa chính
Ví dụ:
Cho lược đồ quan hệ R=(ABCD) và F={A→B; B→C; A→D; D→C}
f1 f2 f3 f4
- Xét 1NF (hiển nhiên)
-Xét 2NF:
Vì khóa chỉ có 1 thuộc tính, do đó mọi thuộc tính không khóa đều phụ thuộc đầy
đủ vào khóa. Cho nên lược đồ (R,F) đạt 2NF
-Xét 3NF:
Thuộc tính không khóa B và D không phụ thuộc bắc cầu vào khóa A
Thuộc tính khóa C phụ thuộc bắc cầu vào khóa A, do đó lược đồ vi phạm 3NF Kết luận: dạng chuẩn cao nhất cho lược đồ (R,F) là 2NF
Ví dụ:
Cho lược đồ quan hệ Q(ABCD)
F=[AB → C ; D → B C → ABD]
K1=[AB]; K2=[AD];K3=[C]
là các khoá, vậy Q không có thuộc tính không khoá nên Q đạt chuẩn 3
+ Hệ quả
Nếu lược đồ quan hệ Q,F mà Q không có thuộc tính không khoá thì Q đạt chuẩn 3.
Ví dụ:
Xác định dạng chuẩn của lược đồ quan hệ sau.
Q(NGPM)
F={NGP→M; M→P}
Khoá của Q là {NGP}, {NGM}
NGP → M có vế trái là siêu khoá
M → P có vế phải là thuộc tính khoá.
Nên Q đạt chuẩn 3.
5. Dạng Chuẩn BC (Boyce Codd normal form- BC NF)
Một lược đồ quan hệ Q ở dạng chuẩn BC nếu với mỗi phụ thuộc hàm không hiển nhiên X → A ∈ F thì X là một siêu khoá của Q.
Nhận xét: Nếu Q đạt chuẩn BC thì Q đạt chuẩn 3
Ví dụ:
Xác định dạng chuẩn của lược đồ quan hệ sau.
Q(ACDEIB)
F={ACD→EBI;
CE→AD}
Dễ thấy Q có hai khoá là: ACD và CE. Các phụ thuộc hàm của F đều có vế trái
là siêu khoá, nên Q đạt dạng chuẩn BC.
ĐỊNH LÝ : Các lớp dạng chuẩn của một lược đồ quan hệ có quan hệ lồng nhau:
nghĩa là lớp sau nằm trọn trong lớp trước. BCNF ⊂ 3NF ⊂ 2NF ⊂ 1NF
Ví dụ:
Chẳng hạn cho lược đồ quan hệ Q(ABCD) và F = [AB → C; D → B;
C→ ABD] thì Q đạt chuẩn 3NF nhưng không là BCNF
Nếu F = [B → D, A → C, C → ABD] thì Q đạt dạng chuẩn 2NF nhưng không là
3 NF.
Dạng chuẩn của một lược đồ cơ sở dữ liệu là dạng chuẩn thấp nhất của các lược
đồ quan hệ con.
+ Thuật toán kiểm tra dạng chuẩn của một lược đồ quan hệ
Vào: Lược đồ quan hệ Q, tập phụ thuộc hàm F
Ra: Khẳng định Q là chuẩn gì?
Bước 1: Tìm tất cả các khóa của Q
Bước 2: Kiểm tra chuẩn BC nếu đúng thì Q đạt chuẩn BC, kết thúc thuật toán. Ngược lại qua bước 3
Bước 3: Kiểm tra chuẩn 3 nếu đúng thì Q đạt chuẩn 3, kết thúc thuật toán. Ngược lại qua bước 4
Bước 4: Kiểm tra chuẩn 2 nếu đúng thì Q đạt chuẩn 2, kết thúc thuật toán. Ngược lại Q đạt chuẩn 1
CÂU HỎI - BÀI TẬP
1. Cho lược đồ quan hệ R(U), U={ABCDEF} và tập phụ thuộc hàm
F={AB→C, C→B, ABD→E, F→A}
Xác định dạng chuẩn của R.
2. Cho lược đồ quan hệ R(U), U={ABCD} và tập phụ thuộc hàm
F={AB→C, A→D, BD→C}
Xác định dạng chuẩn của R
3. Cho lược đồ quan hệ R(U), U={JKLMNPQ} và tập phụ thuộc hàm
F={J→KLM, KL→NP, K→MQ, N→KP}
Xác định dạng chuẩn của R