a. Định nghĩa khóa: dùng phụ thuộc hàm
Định nghĩa 4.13. Cho R là một lược đồ quan hệ với các thuộc tính A1A2…An
và cho trước tập các pth F. Gọi X là một tập con của A1A2…An , X là một khoá của (R, F) nếu:
(i) Pth X→A1A2…An thuộc F+. Nghĩa là có sự phụ thuộc của tất cả các thuộc tính vào tập thuộc tính X được cho trước hoặc được suy ra từ những pth đã cho, và
(ii) Không có tập Y nào là tập con thực sự của X, mà có pth Y→A1A2…An thuộc F+.
Ví dụ 4.11. Gọi R=ABC và F={A→B, B→C}Ta thấy chỉ có một khoá duy nhất là A, bởi vì A→ABC thuộc F+ và không có bất kỳ tập thuộc tính X nào không chứa A mà X→ABC đúng.
b. Thuật toán tìm khoá b1. Thuật toán tìm 1 khoá
Phát biểu bài toán tìm khoá tối thiểu: Cho lược đồ quan hệ R = <U, F>, hãy tìm một khoá (tối thiểu) của quan hệ R.
Mục tiêu: cho một lược đồ U có các thuộc tính {A1, A2,..., An} và tập pth F.
Hãy tìm một khóa cho lược đồ đó.
Thuật toán Bước 1.
+ Gán K=U+ (U+ là tập thuộc tính của U) Bước 2. ta có A là thuộc tính của U
+ Tính bao đóng của (Ki-1\A)+ nếu ((Ki-1\A)+ =U+) thì loại bỏ A ra khỏi K tức là Ki =(Ki-1\A), nếu (Ki-1\A)+U+ thì Ki =Ki-1.
Lặp lại bước trên n lần Bước n. Kết luận K=Kn
Ví dụ 4.12. cho U={A, B, C, D, E} và F={AB→C, AC→B, BC→DE} tìm một khóa của lược đồ quan hệ r xác định trên U và F ?
Bước 1.
+ K=U tức là K=ABCDE
128 Bước 2.
+ Tính bao đóng của (K\A)+ nghĩa là tính (BCDE)+ = BCDE ta thấy kết quả tính bao đóng không bằng U+ nên K=ABCDE
Bước 3.
+ Tính bao đóng của (K\B)+ nghĩa là tính (ACDE)+=ABCDE ta thấy kết quả tính bao đóng bằng U+ nên loại B ra tập K ban đầu K=ACDE
Bước 4.
+ Tính bao đóng của (K\C)+ nghĩa là tính (ADE)+ = ADE ta thấy kết quả tính bao đóng không bằng U+ nên không bỏ C ra tập K ta có K=ACDE
Bước 5.
+ Tính bao đóng của (K\D)+ nghĩa là tính (ACE)+=ACEBD ta thấy kết quả tính bao đóng bằng U+ nên bỏ D ra tập K ta có K=ACE
Bước 6.
+ Tính bao đóng của (K\E)+ nghĩa là tính (AC)+ = ACBDE ta thấy kết quả tính bao đóng bằng U+ nên bỏ E ra tập K ta có K=AC
Kết quả khóa là K=AC
b2. Thuật toán tìm một khoá cải tiến Input
Lược đồ quan hệ R(U, F), F ={Ti→Pi| Ti, PiU, TiPi =ỉ, i=1, 2, …, p}, U={A1, A2,..., An}
Output
Một khóa X của R.
Thuật toán Bước 1. Đặt
T = Ti với Ti→Pi ϵ F, TiϵU P = Pi với Ti→Pi ϵ F, PiϵU K = U\P
Bước 2. Tính K+
Nếu K+ = U → Kết luận K là khoá, ngược lại tiếp tục bước 3 Bước 3. Tính K = K(TP)
Với mỗi Ai(TP) thực hiện:
- K:= K\{Ai}
- Nếu K+ ≠ U thì K:= K {Ai} Bước 4. Kết luận K là khoá
Ví dụ 4.13. Cho lược đồ R = <U, F> với U ={ABCDE}, F ={A→B, B→C, B→DE, A→E, A→D}. Hãy tìm một khoá tối thiểu K của lược đồ R?
129 Bước 1.
T = {AB} (T là tập các thuộc tính xuất hiện phía trái) P = {BCDE} (P là tập các thuộc tính xuất hiện phía phải) K = U\P = {A}
Bước 2.
Tính thử K+
Ta có K+= {ABCDE}
Vì K+= U, nên K = {A} là một khoá của R.
Ví dụ 4.14. Cho lược đồ quan hệ R=<U, F>, trong đó: U={ABCDE}, F={AB→DE, E→AD, D→C}. Hãy tìm một khoá tối thiểu K của lược đồ R
Bước 1.
T = {ABED}
P = {DEAC}
K = U\P = {B}
Bước 2. Tính thử K+
Ta có K+ = {B} U, nên tiếp tục Bước 3 Bước 3.
Ta có K = K(TP) = {ABDE}
Thử xóa từng thuộc tính trong TP = {AED} khỏi K
Thử loại bỏ A khỏi K, ta có: K={BED} và K+={BEDAC}=U→loại được A Thử loại bỏ {E} khỏi K, ta có: K = {BD} và K+ = {BDC}U→không thể loại được {E}, suy ra K={BDE}
Thử loại bỏ {D} khỏi K ta có: K ={BE} và K+ ={BEADC}=U Đến đây ta đã thử hết.
Bước 4.
Khóa tối thiểu tìm được là: K ={BE}
b3. Thuật toán tìm tất cả các khoá của lược đồ quan hệ Ta gọi:
• Q là tập CSDL
• F là tập pth
• L (left): là các thuộc tính chỉ xuất hiện bên trái
• R (right): là các thuộc tính chỉ xuất hiện ở vế phải
• S (supperkey): là tập các siêu khóa
130
• K (key): là tập các khóa
• Tập thuộc tính nguồn (TN): bao gồm các thuộc tính chỉ xuất hiện ở vế trái, không xuất hiện ở vế phải của F (tập pth) và các thuộc tính không xuất hiện ở cả vế trái và vế phải của F. Vậy TN=Q\R. Nghĩa là ta lấy Q trừ cho R để tìm thuộc tính chỉ xuất hiện ở L và các thuộc tính không xuất hiện ở cả L và R
Ví dụ 4.15. Cho tập Q={A, B, C, D, E} L={A, B} R={B, C, E}
TN = Q \ R = {A, D}
Tập thuộc tính đích (TĐ): Bao gồm các thuộc tính chỉ xuất hiện ở R, không xuất hiện ở L. Vậy TĐ=R\L
Ví dụ 4.16. Cho L={A, B, C, D, E} R={E, F, G, H} TĐ = {F, G, H}
Tập thuộc tính trung gian (TG) : Chứa các thuộc tính xuất hiện ở cả L và R.
Vậy TG = LR
Ví dụ 4.17. Cho L={A, B, C, D, E} R={D, E, F, G}. Vậy TG=LR={D, E}
Thuật toán
Bước 1. Tìm tập thuộc tính nguồn TN và tập thuộc tính trung gian TG.
Bước 2.
Nếu TG = 0 thì K(Key) = TN, và kết thúc thuật toán, kết luận K là khoá.
Ngược lại, nếu TG # 0 thì qua bước 3 Bước 3. Tìm tất cả các tập con Xi của TG
Bước 4. Tìm siêu khóa(Si) bằng cách với mọi Xi , nếu (TNXi)+ =Q thì khi đó Si=TNXi
Bước 5. Tìm khóa(Ki) bằng cách loại bỏ các siêu khóa không tối thiểu Với mọi Si Sj thuộc S
Nếu Si chứa trong Sj thì loại bỏ Sj ra khỏi tập siêu khóa. Khi đó, tập S còn lại chính là tập khóa cần tìm
Ví dụ 4.18.
Ta có S = {AB, ABC, ED, EDF}
Ta thấy AB chứa trong ABC, ED chứa trong EDF vậy ta cần phải loại bỏ ABC và EDF.
Vậy S = {AB, ED} chính là tập khóa cần tìm
Ví dụ 4.19. Cho R=<Q, F> với Q={ABC} F={AB→C, C→A}. Tìm tất cả các khóa của lược đồ
Bước 1. L = {ABC} R = {CA} TN = {B}
Bước 2. Vì TG = {AC} 0 nên ta làm tiếp bước 3 Bước 3. Ta có tập con Xi của tập TG = {0, A,C,AC}
131
Bước 4. Ta lấy từng thuộc tính thuộc tập con Xi của tập TG hợp với TN ta có các thuộc tính sau:
S1= TN0 = B Ta có B+ = B Q nên S1 = A không là siêu khóa S2= TNA = AB Ta có AB+ = ABC = Q nên S2 = AB là siêu khóa S3 = TNC = BC Ta có BC+ = ABC = Q nên S3 = BC là siêu khóa
S4 = TNAC = ABC Ta có ABC+ = ABC = Q nên S4 = ABC là siêu khóa Vậy ta có tập siêu khóa S={AB, BC, ABC}.
Bước 5. Tuy nhiên, vì AB chứa trong ABC và BC chứa trong ABC nên loại bỏ siêu khóa ABC ra khỏi tập siêu khóa