Khoá của lược đồ quan hệ

Một phần của tài liệu TÀI LIỆU DẠY HỌC CƠ SỞ DỮ LIỆU (Trang 127 - 131)

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.

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(TP) = {ABDE}

Thử xóa từng thuộc tính trong TP = {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 = LR

Ví dụ 4.17. Cho L={A, B, C, D, E} R={D, E, F, G}. Vậy TG=LR={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= TN0 = B Ta có B+ = B  Q nên S1 = A không là siêu khóa S2= TNA = AB Ta có AB+ = ABC = Q nên S2 = AB là siêu khóa S3 = TNC = BC Ta có BC+ = ABC = Q nên S3 = BC là siêu khóa

S4 = TNAC = 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

Một phần của tài liệu TÀI LIỆU DẠY HỌC CƠ SỞ DỮ LIỆU (Trang 127 - 131)

Tải bản đầy đủ (PDF)

(188 trang)