0
Tải bản đầy đủ (.doc) (93 trang)

Đị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 )

×