a.Thuật toán cơ bản
Bƣớc 1:Xác định tất cả các tập con của Q
Để xác định tất cả các tập con của một lƣợc đồ quan hệ Q(A1, A2,…, An) ta lần lƣợt duyệt tất cả 2n
-1 tập hợp con khác rỗng của Q+ (n là số thuộc tính
của lược đồ quan hệ Q), kết quả tìm đƣợc giả sử là các tập thuộc tính: S
={X1, X2, …,X2n-1 }
Bƣớc 2: Tính Xi+
Bƣớc 3: Nếu Xi+
= Q+ thì Xi là siêu khoá
Nếu một tập con Xi (i = 1..,2n-1) của Q+ có bao đóng đúng bằng Q+ thì tập con dó (theo định nghĩa trên) là một siêu khoá của Q.
Giả sử sau bƣớc này có m siêu khoá: S = {S1, S2,…, Sm}
Bƣớc 4: Xây dựng tập chứa tất cả các khoá của Q từ tập S
Xét mọi Si, Sj con của S (i j), nếu Si Sj thì ta loại Sj (i, j =1..m), kết quả còn lại chính là tập tất cả các khoá cần tìm.
Ví dụ 10: Tìm tất cả các khóa của lƣợc đồ quan hệ và tập phụ thuộc hàm nhƣ sau:
Q(C, S, Z); F = {f1:CS Z; f2:Z C}
Xi X i
+ Siêu khóa khóa
C C S S CS CSZ CS CS Z ZC CZ CZ SZ SZC SZ SZ CSZ CSZ CSZ
Vậy lƣợc đồ quan hệ Q có hai khóa là: {C,S} và {S,Z}
Thuật toán trên thì dễ hiểu, dễ cài đặt, tuy nhiên nếu với n khá lớn thì phép duyệt để tìm ra tập tất cả các tập con của tập Q+
là không hiệu quả. Do vậy cần thu hẹp không gian duyệt. Chúng ta sẽ nghiên cứu thuật toán cải tiến theo hƣớng giảm số thuộc tính của tập cần duyệt tất cả các tập con.
b.Thuật toán cải tiến
Trƣớc khi đi vào thuật toán cải tiến, ta cần quan tâm một số khái niệm sau:
+ Tập thuộc tính nguồn (TN) chứa tất cả các thuộc tính có xuất hiện ở vế trái và không xuất hiện ở vế phải của các phụ thuộc hàm và các thuộc tính không xuất hiện ở cả vế trái lẫn vế phải của các phụ thuộc hàm.
+ Tập thuộc tính đích (TD) chứa tất cả các thuộc tính có xuất hiện ở vế phải và không xuất hiện ở vế trái của các phụ thuộc hàm.
72
+Tập thuộc tính trung gian (TG) chứa tất cả các thuộc tính xuất hiện ở cả vế trái lẫn vế phải của các phụ thuộc hàm.
Hệ quả: Nếu K là khóa của Q thì TN K và TD K =
Chứng minh TN K
Theo hệ quả 2 của thuật toán tìm bao đóng ta có K+
K TD TG Ta chứng minh A TN A K. Thật vậy:
Nếu A K K+ K TD TG Q+- A K không là khóa mâu thuẫn
Chứng minh TD K =
Giả sử có thuộc tính A TD K ta sẽ dẫn đến điều mâu thuẫn. Thật vậy:
Theo hệ quả 1 của thuật toán tìm bao đóng thì K+
= (K - A)+ A A TD có X là vế trái của một phụ thuộc hàm trong F sao cho X A (1) và A X X K+ = (K-A)+A vì A X X (K-A)+ ị (K-A) X (2)
(1) và (2) cho (K-A) A A (K-A)+ (K-A)+ A = (K-A)+ K+ = (K-A)+ mâu thuẫn với điều K là khóa.
Dựa vào hệ quả trên ta có thuật toán tìm tất cả khóa sau:
Dữ liệu vào: Lƣợc đồ quan hệ Q và tập phụ thuộc hàm F
Dữ liệu ra: Tất cả các khóa của quan hệ
Thuật toán tìm tất cả khóa của một lƣợc đồ quan hệ
Bƣớc 0. Tìm tập thuộc tính nguồn(TN), tập thuộc tính trung gian(TG)
Tìm tất cả các tập con của tập trung gian gọi là Xi (bằng phƣơng pháp duyệt nhị phân)
If tập trung gian = then
Tập Khoá = Tập nguồn ;kết thúc Ngƣợc lại
Chuyển sang bƣớc 1
Bƣớc 1 Tìm tất cả các tập con của tập trung gian: Xi
S =
Xi tập trung gian
if (Tập nguồn Xi)+ = Q+ then S = S { Tập nguồn Xi} {S là tập các siêu khoá cần tìm} Bƣớc 2: Tính TN Xi Bƣớc 3: Tính (TN Xi)+ Bƣớc 4: Nếu Xi+ = Q+ thì Xi là siêu khoá
Nếu một tập con TN Xi có bao đóng đúng bằng Q+ thì TN Xi là một siêu khoá của Q. Giả sử sau bƣớc này có m siêu khoá:
S = {S1, S2,…, Sm}
73
Xét mọi Si, Sj con của S (i j), nếu Si Sj thì ta loại Sj (i,j =1..m), kết quả còn lại chính là tập tất cả các khoá cần tìm.
Ví dụ 11: Giải lại bài tập ví dụ 10
áp dụng thuật toán cải tiến ta có lời giải nhƣ sau: TN = {S}; TG = {C,Z}
Gọi Xi là các tập con của tập TG:
Xi (TN Xi) (TNXi)+ Siêu khóa khóa
F S S
C SC Q+ SC SC
Z SZ Q+ SZ SZ
CZ SCZ Q+ SCZ
Kết quả quan hệ trên có hai khóa là : {S,C} và {S,Z}
Chú ý :
Thuật toán cải tiến này tìm đƣợc tất cả các khoá, nhƣng không chắc tìm ra tất cả các siêu khoá.
BÀI TẬP:
Bài 1: Nêu định nghĩa khóa của lƣợc đồ quan hệ, cho ví dụ. Bài 2: Nêu thuật toán tìm khóa, cho ví dụ.
Bài 3: Cho quan hệ R trên tập thuộc tính U = {A, B, C, D, E, G) và tập các phụ
thuộc hàm F = {AB C, ACD, DEG, GB, AD, CGA}. a. Tính bao đóng {AC}+ của tập thuộc tính {AC}.
b. Tập các phụ thuộc hàm F đã là tối thiểu cha? Vì sao? Nếu cha,tìm một phủ tối thiểu của F.
Bài 4: Cho quan hệ R trên tập thuộc tính U = {G, H, I, K, L, M} và tập các phụ
thuộc hàm F = {GH L, IM, LK, HMLG, GKI, HL}.
a. Chứng minh rằng nếu R thoả mãn F thì R cũng thoả mãn các phụ thuộc hàm HI G và GH KM.
b.Tính bao đóng {G, H}+ của tập thuộc tính {G, H}.
c. Tập các phụ thuộc hàm F đã là tối thiểu chƣa? Vì sao? Nếu chƣa, tìm một phủ tối thiểu của F.
Bài 5: Tìm khóa của sơ đồ quan hệ sau:
a. W=(R,F)
Trong đó: R=(ABCDEF); F={ABC, CD, DE, DEF}. b. W=(R,F)
74
Bài 6: Cho lƣợc đồ quan hệ R(U,F), U = ABCDEG F = { BEC CDAB ACBD BCAE CAD}
a. Tính (AC)+
b. Chứng tỏ BADE
c. Tìm tất cả các khóa của lƣợc đồ quan hệ trên . d. Tìm phủ tối thiểu của tập phụ thuộc hàm trên.
Bài 7: Cho lƣợc đồ quan hệ R(U,F), U = ABCDEG F = { ABC CA BCD DEG CGBD ACDB CDAG}
a. Tính (CD)+ .
b. Tìm tất cả các khóa của lƣợc đồ quan hệ trên. c. Tìm phủ tối thiểu của tập phụ thuộc hàm F.
Bài 8: Xét quan hệ R(A,B,C,D,E) và tập các phụ thuộc hàm sau: F= {AB C, CD E, DE B}
a. Tìm một khóa của lƣợc đồ quan hệ trên. b. Tìm tất cả các khóa của lƣợc đồ quan hệ.
Bài 9: Cho lƣợc đồ quan hệ R(U, F) với U = ABCDEG F = { A B, BE C, EC
A, AD G, ED C}
a. Phụ thuộc hàm f: ECD ABG có đƣợc suy dẫn từ F? b. Tìm tất cả các khóa của R
75