Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 12

Thuật toán xác định tất cả các

khoá của một lược đồ quan hệ

Sử dụng định lý Lucchessi - Osborn


Xác định một khoá của lược đồ quan hệ

Thế nào là 1 khoá?


► X là khoá của lược đồ quan hệ R = <U, F> nếu:
 X+F = U (X là siêu khoá)
 Không tồn tại X’  X, X’+ = U
Thuật toán 1: Tìm một khoá của một lược đồ quan hệ
► Vào: R =<U,F> ► Phương pháp
► Ra : K (1 khoá của R) Function Key(R)
Begin
K:=U;
For mỗi AU Do
If (K\A)F+= U Then K:=K\{A};
Return K;
End;
Trang | 2
Xác định một khoá của lược đồ quan hệ

Ví dụ
Giả thiết:R = <U,F>, U = ABCDEG;
F = {B → C, C → B, A → GD}
Ban đầu: K = ABCDEG
► (K \ C)F+ = ADEG  U
► (K \ A)F+ = BCDEG  U ► (K \ D)F+ = ACEGBD = U
► (K \ B)F+ = ACDEGB = U  K = ACEG
 K = ACDEG ► (K \ E)F+ = ACGBD  U
► (K \ G)F+ = ACEGDB = U
Vậy K = ACE là khoá của lược đồ quan hệ.  K = ACE
Nhược điểm: Phải xét hết tất cả các thuộc tính.
Trang | 3
Xác định một khoá của lược đồ quan hệ

Định lý Hồ Thuần - Nguyễn Văn Bào (điều kiện cần để X là khoá)

Phát biểu định lý


Cho R = <U, F>, cho X  U. Khi đó, nếu X là khoá của R thì:
 (U \ P)  X  (U \ P)  (T  P)
Trong đó:
 T : Hợp tất cả các thuộc tính thuộc vế trái của F,
 P : Hợp tất cả các thuộc tính thuộc vế phải của F.

Ý nghĩa
Định lý này cho phép ta thu hẹp phạm vi tìm kiếm khoá.

Trang | 4
Xác định một khoá của lược đồ quan hệ

Định lý Hồ Thuần - Nguyễn Văn Bào (điều kiện cần để X là khoá)


Ví dụ
Giả thiết:
R = <U,F>, U = ABCDEG;
► Nếu gọi K là tập tất cả các khoá của R
F = {B → C, C → B, A → GD}
Ta có:
 K  {AE, AEB, AEC, AEBC}
► T = ABC ► (AE)+ = AEGD  U  AE  K
► P = BCDG
T  P = BC
► Gọi X là khoá của R: ►
(AEB)+ = AEBGDC = U  AEB  K
Với (U \ P)  X  (U \ P)  (T  P)
 AE  X  AEBC ► (AEC)+ = AEBGDC = U  AEC  K
 K = {AEB, AEC}
Trang | 5
Xác định một khoá của lược đồ quan hệ

Các hệ quả

► Hệ quả 1: Nếu (U \ P)F+ = U thì U \ P là khoá duy nhất của R.


► Ví dụ: Xét R = <U, F>, với U = A1A2A3A4A5A6
F = {A1 → A2 , A3 → A4, A5 → A6}
 P = A2A4A6 mà (U \ P)+ = (A1A3A5)+ = A1A3A5A2A4A6 = U
 R có 1 khoá duy nhất là A1A3A5
► Hệ quả 2: Nếu T  P =  thì U \ P là khoá duy nhất của R.
► Hệ quả 3: (U \ P)  (T  P) là siêu khoá của R.

Trang | 6
Xác định một khoá của lược đồ quan hệ

Thuật toán 2: Tìm một khoá của lược đồ quan hệ R


► Vào: R =<U,F>
► Ra : 1 khoá của R
► Phương pháp
Function Key(R);
Begin
K := (U\P)(TP)
For mỗi A (TP) Do
If (K\A)F+= U Then K:= K\
A;
Return K;
End;

Trang | 7
Xác định một khoá của lược đồ quan hệ

Ví dụ
Giả thiết: ► T=ABC
T  P = BC
R = <U,F>, U = ABCDEG; ► P=BCDG
F = {B → C, C → B, A → GD} ► U \ P=AE
► Với K := (U \ P)  (T  P)
 K = ABCE
► (K \ B)+ = (ACE)+ = AGDCBE = U
 K = ACE
► (K \ C)+ = (AE)+ = AGDE  U
 ACE  K
Vậy K = ACE là khoá của lược đồ quan hệ.

Trang | 8
Xác định một khoá của lược đồ quan hệ

Thuật toán 3: Tìm một khoá của lược đồ quan hệ R nhận S làm siêu khóa
► Vào: R =<U,F> và siêu khóa S
► Ra : 1 khoá của R nhận S làm siêu khóa
► Phương pháp
Function Key(R);
Begin
K := S
For mỗi A  S-(U-P) Do
If (K\A)F+= U Then K:= K\
A;
Return K;
End;

Trang | 9
Định lý Lucchessi - Osborn

Phát biểu định lý

Định lý Lucchessi - Osborn (Điều kiện cần và đủ để bổ sung khoá)

► Cho R = <U, F>. Gọi K là một tập khác rỗng các khoá của lược đồ
quan hệ R. Khi đó, điều kiện cần và đủ để có thể bổ sung khoá mới

vàoK là:  K  K,  XY  F: T = X  (K \ Y) không chứa


phần tử nào của K, và khóa mới nhận T làm siêu khóa.

Trang | 10
Thuật toán 4: Tìm tất cả các khoá của một lược đồ quan hệ

► Vào:R =<U,F> Procedure TimTatCaKhoa(R);


► Ra : K Begin
1.Tìm một khoá K của R
K := {K};
2.For <mỗi K K > Do
For <mỗi XYF> Do
Begin
T := X(K\Y);
If (T không chứa phần tử nào của )ThenK
Begin
Tìm khoá K’ nhận T làm siêu khoá;

K := K  {K’}
Goto 2; {không cần xét lại (K,XY)đã xét}
End;
End;

Trang | 11
Return K;
End;
Xác định tất cả các khoá

Ví dụ
Cho R = <U, F> với U = ABCDEG
F = {B  C, C  B, A  GD}
Ở ví dụ trước ta đã xác định được 1 khoá là ACE
►Xét K = ACE  K:
Xét B  C  F : T=B  (K\C)=B  AE  T = ABE không
chứa phần tử nào của K
 K’ =ABE  K = {ACE, ABE}
Xét C  B  F : T=C  (K\B) = C  ACE  T = ACE  K
 T = ACE  K
►Xét K =Xét K
A  GD  F : T=A  (K\GD) = A  ACE
ABE  :
Xét B  C  F : T=B  (K\C)=B  ABE  T = ABE  K
Xét C  B  F : T=C  (K\B) = C  AE  T = ACE  K
Xét A  GD  F : T=A  (K\GD) = A  ABE  T = ABE  K
Vậy K
Trang | 12
= {ABE, ACE}

You might also like