Định nghĩa khoá và siêu khoá theo ngôn ngữ phụ thuộc hàm

Một phần của tài liệu Nhập môn Cơ sở dữ liệu Phạm Thị Thanh (Trang 52 - 55)

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 đồ

Một phần của tài liệu Nhập môn Cơ sở dữ liệu Phạm Thị Thanh (Trang 52 - 55)

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

(93 trang)
w