2. Phụ thuộc hàm (Function Defendency-FD)
2.7. Định nghĩa khoá và siêu khoá theo ngôn ngữ phụ thuộc hàm
Cho lược đồ quan hệ R(U, F), F là tập phụ thuộc hàm xác định trên U. K là một tập con của U (K⊆U), Khi đó:
+ K được gọi là siêu khoá của R nếu K→U
+ K là khoá của R nếu K→ U và ∀K’ ⊆K thì K’→U
Thuật toán tìm 1 khoá
Input: Lược đồ quan hệ R(U, F), Tập thuộc tính U, Tập phụ thuộc hàm F={Ti→Pi | Ti,Pi ⊆U, TiWPi =∅, i=1…n}
Output: K là tập con của U sao cho K là khoá của R Action: Đặt P= ∪Pi
Bước 1: Đặt K0=U \ P (những thuộc tính không nằm trong vế phải FD) Bước 2: Nếu K0+ = U thì chuyển Bước 5
Bước 3: K1:=K0∪ (T ∩ P)
Bước 4: Với mỗi Ai ∈T∩P ta thực hiện
Tính Nếu (Ki-1\{Ai})+ = U
Ngược lại
Bước 5: Kết luận Ki là khoá
VD1: Cho lược đồ quan hệ r(U) với U={A,B,C,D,E,F,G,H} F={A→BC,B→E,CE→GH}
Tìm 1 khoá của R Đặt: P=BCEGH
K0=U \ P = ADF Tính (K0)+ =ABCDEFGH Kết luận ADF là một khoá của R
VD2: Cho lược đồ quan hệ R(U) với U={A,B,C,D,E,F,G,H}
F={AB→CD, C→D, E→FG, AE→H} Tìm 1 khoá của R
Đặt: P=CDFGH
Tính :K0=U \ P =ABE, (ABE)+=U Kết luận ABE là khoá của R
VD3:Cho lược đồ quan hệ R(U) với U={A,B,C}
F={AB →C, C→B} Tìm 1 khoá của R { } = −−1 1 \ i i i i K A K K
Đặt P=BC
K0=A tính A+=A ≠ U K1=A ∪ BC
K2=A∪ B (AB)+ =ABC=U, vậy AB là một khoá của R
VD4:Cho lược đồ quan hệ R(U) với U={A,B,C,D,E,G}
F={AB →C, G→A, C→B, ABD→E} Tìm 1 khoá của R
Đặt P=ABCE
K0=U \ P = DG tính DG+ = ADG ≠ U K1= DG ∪ ABC
K2= DG∪ AB, (ABDG)+ =ABCDEG = U vậy bỏ được C K3= DG∪ A, (ADG)+=ADG ≠ U, không bỏ được B, K3=K2
K4=DG∪ B, (BDG)+=ABCDEG=U vậy bỏ được A Kết luận BGD là một khoá của R.
Thuật toán tìm mọi khoá của một quan hệ:
Input: Lược đồ quan hệ R(U,F)
Output: Tập KR tất cả các khoá của lược đồ R
Ý tưởng: Thực hiện như thuật toán tìm một khoá nhưng thay đổi thứ tự bớt các thuộc tính Ai
Giả mã:
1. Đặt T=∪Ti và P=∪Pi
2. KR:={K | K là khóa của lược đồ R(U,F) và K chứa trong siêu khóa (U\P) ∪(T∩P)}
3. For each K in KR do 4. For each (Ti→Pi) in F do 5. M:=Ti∪ (K\Pi); 6. Test:=true; 7. for each H in KR do 8. if H ⊆ M then test:=false; 9. If test then
KR:= KR∪ {K | K là khóa của R(U,F) và K chứa trong T} 10. end (4)
12. Return KR
VD1: Xét lại VD3 ở trên
Cho lược đồ quan hệ R(U) với U={A,B,C} F={AB →C, C→B} Tìm mọi khoá của R
Đặt P=BC
K0=A tính A+=A ≠ U K1=A ∪ BC
K2=A∪ B (AB)+ =ABC=U, bỏ được C, vậy AB là một khoá của R, K2’=A∪ C (AC)+=ABC=U, bỏ được B, vậy AC là một khoá của R Kết luận R có 2 khoá là AB và AC
VD2: Xét lại VD4 ở trên
Cho lược đồ quan hệ R(U) với U={A,B,C,D,E,G}
F={AB →C, G→A, C→B, ABD→E} Tìm mọi khoá của R
Đặt P=ABCE
K0=U \ P = DG tính DG+ = ADG ≠ U K1= DG ∪ ABC
K2= DG∪ AB, (ABDG)+ =ABCDEG = U vậy bỏ được C K3= DG∪ A, (ADG)+=ADG ≠ U, không bỏ được B, K3=K2
K4=DG∪ B, (BDG)+=ABCDEG=U vậy bỏ được A, DGB là một khoá của R
K2’= DG∪ BC, (BCDG)+ =ABCDEG = U vậy bỏ được A
K3= DG∪ C, (DGC)+=ABCDEG=U vậy bỏ được B, DGC là một khoá của R.
Kết luận R có 2 khoá là DGB, DGC
Chú ý: Thuật toán tìm mọi khóa cải tiến
Input: Lược đồ quan hệ R(U, F), Tập thuộc tính U, Tập phụ thuộc hàm F={Ti->Pi
| Ti,Pi ⊆U, TiWPi =∅, i=1…n}
Output: Mọi Ki là tập con của U sao cho Ki là khoá của R Action: Đặt P= ∪Pi
Bước 1: Đặt K0=U \ P (những thuộc tính không nằm trong vế phải FD) Bước 2: Nếu K0+ = U thì K0 là khóa duy nhất và kết thúc
Bước 3: K1:=K0
Bước 4: Với mỗi Ai ∈T∩P ta thực hiện
Tính Nếu (Ki-1)+ = U
Ngược lại
Bước 5: Kết luận các (Ki )+ là các khoá của lược đồ