Phụ thuộc hàm khôngdƣ thừa

Một phần của tài liệu Đề cương bài giảng học phần: Cơ sở dữ liệu (2014 - 2015) (Trang 117 - 144)

22. PHỦ CỦA TẬP PHỤTHUỘC HÀM

22.3. Phụ thuộc hàm khôngdƣ thừa

22.3.1. Phụ thuộc hàm dư thừa

Cho F là một tập các phụ thuộc hàm trên U, f là một phụ thuộc hàm của F tức f F, f đƣợc gọi là dƣ thừa trong F nếu nhƣ (F-f)+

=F+

Hay có thể nói tƣơng đƣơng f đƣợc gọi là dƣ thừa trong F nếu nó suy dẫn đƣợc từ tập F sau đã bỏ đi phụ thuộc hàm f.

Thuật toán thành viên

Input

- Tập phụ thuộc hàm F - f  F

Output

- True nếu nhƣ f là dƣ thừa trong F

- False nếu nhƣ f là không dƣ thừa trong F

* Thuật toán xác định f = XY có là thành viên của F hay không?

1) Tạm xóa f khỏi F, gọi G là tập thu đƣợc

G=F-f, nếu G thì chuyển qua bƣớc 2, còn không thì kết thúc thuật toán và kết luận f là không dƣ thừa trong F

2) Giả sử f=XY nếu G├ f tức Y X+

G thì f là dƣ thừa trong F còn ngƣợc lại f là không dƣ thừa (là thành viên).

Hoặc:

Bƣớc 1: Tính X+

Bƣớc 2: So sánh X+ với Y nếu X+  Y thì ta khẳng định X  Y là thành viên của F.

Ví dụ:

Giả sử có tập F={XYW, XWZ, ZY, XYZ} Hãy cho biết XYZ có dƣ thừa trong F hay không?

Giải:

1) Tạm thời xóa XYZ ra khỏi F

G:=F-{XYZ}={XYW, XWZ, ZY} 2) Tính (XY)+G ( bao đóng của XY trong tập G) ta có (XY)+G= XYWZ thế nên Z(XY)+

Vậy, phụ thuộc hàm XYZ là dƣ thừa trong F.

22.3.2. Phủ không dư

Cho F và G là hai phụ thuộc hàm trên U, F đƣợc gọi là phủ không dƣ của G khi và chỉ khi

Định lý: Mọi tập phụ thuộc hàm đều tồn tại phủ không dƣ

Thuật toán tìm phủ không dƣ

Input

- Tập phụ thuộc hàm G

Output

- Tập phụ thuộc hàm F là phủ không dƣ của G tức là

Method b1) Gán F:=G b2) For each f in G Do If (F-f)+ = F+ Then F:=F-f EndIf EndFor b3) Return F

Về mặt thực tế thay bƣớc 2 trong thuật toán trên bởi b2) For each FD f: LR in G Do If RL+ F-{f} Then F:=F- {f} EndIf EndFor

Ví dụ: Tìm phủ không dƣ của tập phụ thuộc hàm: F={B→D, B→C, C→D}

Bài làm:

+/ Xét B→C là phụ thuộc hàm dƣ thừa?

B→C∈G+? với G= F- {B→C}= {B→D, C→D}

BG+=BD⟹B→C∉G+⟹trong F, B→C không dƣ thừa. +/Xét B→D là phụ thuộc hàm dƣ thừa? B→D∈G+? với G= F- {B→D}= {B→C, C→D} BG+= BCD⟹B→D ∈ G+ trong F, B→D dƣ thừa. Ta gán: F=F-{ B→D }={B→C, C→D} Tƣơng tự, xét C→D - F+= G+ ( F là phủ của G)

-  fF thì (F-f)+F+ ( tức mọi phụ thuộc hàm trong F đều không dƣ thừa)

- F+= G+ ( F là phủ của G)

Kết quả của bƣớc 3 cho phủ không dƣ: F={B→C, C→D}

22.4 Phủ thu gọn

Cho F và G là hai tập phụ thuộc hàm trên tập thuộc tính U.

22.4.1. Phụ thuộc hàm có vế trái dư thừa:

F là các phụ thuộc hàm trên lƣợc đồ quan hệ Q, Z là tập thuộc tính,

ZYF.Nói rằng phụ thuộc hàm Z Y có vế trái dƣ thừa (phụ thuộc hàm không đầy đủ) nếu có một A Z sao cho:

F=F-{Z Y} {(Z-A)Y}

Ngƣợc lại ZY là phụ thuộc hàm có vế trái không dƣ thừa hay Y phụ thuộc hàm đầy đủ vào Z hay phụ thuộc hàm đầy đủ.

Ví dụ:

Q(A,B,C) F={AB C,B C}

F=F-{AB C} {(AB-A)  C}={B C} ABC là phụ thuộc hàm không đầy đủ. BC là phụ thuộc hàm đầy đủ.

Chú ý:

Phụ thuộc hàm có vế trái dƣ thừa chứa một thuộc tính là phụ thuộc hàm đầy đủ. Ví dụ:

Cho tập phụ thuộc hàm F={A BC,B C,AB D} thì phụ thuộc hàm ABD có vế trái dƣ thừa B vì:

F=F-{AB D} {A D} ={A BC,B C,A D}

Ta nói F là tập phụ thuộc hàm có vế trái không dƣ thừa nếu F không chứa phụ thuộc hàm có vế trái dƣ thừa.

* Thuật toán loại khỏi F các phụ thuộc hàm có vế trái dƣ thừa:

Bƣớc 1: Lần lƣợt thực hiện bƣớc 2 cho các phụ thuộc hàm X Y của F. Bƣớc 2: Với mọi tập con thực sự X‟  của X.

Nếu X‟ YF+

thì thay X Y trong F bằng X‟ Y thực hiện lại bƣớc 2 Ví dụ:

Ở ví dụ trên phụ thuộc hàm ABD có A+ =ABCD suy ra ADF+

.Trong F ta thay AB bằng A D suy ra F={ABC,BC,AD}

22.4.2. Tập phụ thuộc hàm có vế phải một thuộc tính:

Mỗi tập phụ thuộc hàm F đều tƣơng đƣơng với một tập phụ thuộc hàm G mà VP của các phụ thuộc hàm trong G chỉ gồm một thuộc tính.

Ví dụ:

F={ABC,BC,ABD } ta suy ra F={AB,AC,BC,ABD} =G

Nói rằng F là tập phụ thuộc hàm khôngdƣ thừa nếu không tồn tại F„ F sao cho F„  F Ngƣợc lại, F là tập phụ thuộc hàm dƣ thừa.

Ví dụ:

Cho F={ABC,BD,ABD } thì F dƣ thừa vì: F-F‟={ ABC,BD}

Thuật toán loại khỏi F các phụ thuộc hàm dƣ thừa: Bƣớc 1: Lần lƣợt xét các phụ thuộc hàm X Y của F.

Bƣớc 2: Nếu X Y là thành viên của F –{ X Y } thì loại X Y khỏi F. Bƣớc 3: Thực hiện bƣớc 2 cho các phụ thuộc hàm tiếp theo của F

22.4.4. Tập phụ thuộc hàm tối thiểu:

F đƣợc gọi là một phụ thuộc hàm tối thiểu (phủ tối thiểu) nếu F thỏa mãn đồng thời ba điều kiện sau:

1. F là tập phụ thuộc hàm có vế trái không dƣ thừa. 2. F là tập phụ thuộc hàm có vế phải một thuộc tính. 3. F là tập phụ thuộc hàm không dƣ thừa.

*Thuật toán tìm phủ tối thiểu của một tập phụ thuộc hàm

Bƣớc 1: Loại khỏi F các phụ thuộc hàm có vế trái dƣ thừa.

Bƣớc 2: Tách các phụt huộc hàm có vế phải trên một thuộc tính thành các phụ thuộc hàm có vế phải một thuộc tính.

Bƣớc 3: Loại khỏi Fcác phụ thuộc hàm dƣ thừa.

Trong đó, điều kiện 1, 2 có thể thay đỏi vị trí cho nhau. Ví dụ:

Cho lƣợc đồ quan hệ Q(A, B, C, D) và tập phụ thuộc F nhƣ sau: F={AB→CD, B→C, C→D}

Hãy tính phủ tối thiểu của F. Giải:

Bƣớc 1: AB→CD là phụ thuộc hàm có vế trái dƣ thừa? B→CD∈F+? trả lời : B+= BCD⟹B→CD∈F+

Vậy AB→CD là phụ thuộc hàm có vế trái dƣ thừa A⟹kết quả của bƣớc 1 là: F={B→CD, B→C, C→D}

Bƣớc 2: kết quả của bƣớc 2 là: F={B→D, B→C, C→D} F1tt

Bƣớc 3: trong F1tt, B→C là phụ thuộc hàm dƣ thừa? B→C∈G+? với G= F- {B→C}= {B→D, C→D}

BG+=BD⟹B→C∉G+⟹trong F1tt, B→C không dƣ thừa. Trong F1tt, B→D là phụ thuộc hàm dƣ thừa?

B→D∈G+? với G= F1tt- {B→D}= {B→C, C→D} BG+= BCD⟹B→D∈G+

trong F1tt, B→D dƣ thừa. Kết quả của bƣớc 3 cho phủ tối thiểu:

23. BÀI TẬP VỀ PHỤ THUỘC HÀM 23.1. Nhắc lại lý thuyết 23.1. Nhắc lại lý thuyết

23.2. Bài tập áp dụng

24. KHÓA CỦA LƢỢC ĐỒ QUAN HỆ 24.1. Siêu khóa và khóa 24.1. Siêu khóa và khóa

Định nghĩa 1: Cho lƣợc đồ quan hệ =(U,F) , KU nếu K+= U, thì ta nói K là một siêu khoá.

Chú ý: Điều kiện K+=U có thể thay bằng KU hoặc KU \ K

Định nghĩa 2: Cho lƣợc đồ quan hệ =(U,F), tập K U đƣợc gọi là khoá của lƣợc đồ  nếu nhƣ nó thoả mãn:

a) K là một siêu khoá

b)  K1  K thì K1 Không là siêu khoá tức K+1  U

Chú ý: Định nghĩa này là tƣơng dƣơng với định nghĩa:

Cho lƣợc đồ quan hệ =(U,F), tập K U đƣợc gọi là khoá của lƣợcđồ  nếu nhƣ nó thoả mãn:

a) K U  F+

b)  K1  K thì K1  U  F+

Hai điều kiện trên còn tƣơng đƣơng với a) K+=U

b) AK thì (K-{A})+U Hoặc nó tƣơng đƣơng với a) KU

b) AK thì (K-{A})+U

- Thuộc tính A đƣợc gọi là thuộc tính khoá (hay còn gọi là thuộc tính nguyên thuỷ hoặc cơ sở, sơ cấp) nếu nhƣ nó có mặt trong một khoá nào đó.

- Thuộc tính A đƣợc gọi là thuộc tính không khoá (thứ cấp) nếu nhƣ nó không có trong một khoá bất kỳ nào.

Chú ý: Trong một số tài liệu thì thuật ngữ khoá đƣợc dùng để chỉ siêu khoá và thuật

ngữ khoá tối thiểu đƣợc dùng theo nghĩa khoá.

*Tính chất

1. Hợp của 2 siêu khoá là một siêu khoá

2. Giao của 2 siêu khoá chắc chắn là một siêu khoá 3. Hai khoá bất kỳ là không bao nhau

4. Hợp của hai khoá là một khoá khi và chỉ khi lƣợc đồ có duy nhất một khoá 5. Một lƣợc đồ có thể có nhiều khoá

6. Bản thân U là một siêu khoá

7. Với mọi quan hệ R trên U, thì R luôn có ít nhất một khoá

*Tìm một siêu khoá của lƣợc đồ

Bản thân U cũng là một siêu khoá, tuy nhiên trong nhiều bài toán ta cần tìm một siêu khoá có số phần tử nhỏ hơn số phần tử của tập U để tăng tốc độ tính toán, có nhiều cách để tìm một siêu khoá của lƣợc đồ, sau đây là một cách khá đơn giản mà cho ta tập siêu khoá có số phần tử nhỏ hơn số phần tử của tập U khá nhiều:

Đặt L= Li |  LiRi F Đặt R= Ri |  LiRi F

Đặt K= U\ R  L Thì K là một siêu khoá

Ví dụ: Cho U=ABCDEGHK

F={ ACBGE, DHACD, BGAEH} Hãy tìm một siêu khoá của lƣợc đồ L=AC  DH  BG=ABDGH

R=BGE  ACD  AEH=ABCDEGH

Ta có thể chọn K= ABCDEGHK \ ABCDEGH  ABDGH = ABDGHK Dễ dàng kiểm tra rằng K+

= U

Nhận xét: Khi đã có một siêu khoá nếu ta bỏ đi một số thuộc tính ta sẽ thu đƣợc một

khoá.

24.2. Họ Sperner và khóa

Nếu gọi K là tập tất cả các khoá của lƣợc đồ =(U,F), nh vậy mỗi phần tử của K là một tập thuộc tính và các tập hợp đó là không bao nhau.

Định nghĩa: Họ Sperner trên U là họ M={ X | XU }sao cho hai phần tử của M là không bao nhau.

Nhận xét: Tập hợp K tất cả các khoá của lƣợc đồ là một họ Sperner trên U. Xây dựng lƣợc đồ quan hệ có các khoá là các phần tử của họ Sperner

Bài toán: Cho M là một họ Sperner trên U thì có tồn tại hay không một lƣợc đồ quan hệ =(U,F) sao cho K =M (lƣợc đồ có các khoá là các phần tử của họ M).

Trả lời: Có tồn tại một lƣợc đồ =(U,F) đợc xây dựng nhƣ sau: Xây dựng F, giả sử M={X1, X2,..., Xn} ta xây dựng F nhƣ sau F={ Xi U\ Xi  i=1, .., n } Khi đó lƣợc đồ =(U,F) có K =M Chứng minh: Để chứng minh K =M ta chứng minh K M (1) và M K (2) Chứng minh (1) Lấy K K ta cần chứng minh K  M Giả sử ngƣợc lại KM

Do K là khoá nên K+ =U việc tìm bao đóng của K phải áp dụng các phụ thuộc hàm trong tập F có vế trái là tập con của K, tức là  Mi  M để Mi  K (Mi tập con thực sự của K vì giả thiết K M)

Mặt khác, Mi+ =U tức là Mi là siêu khoá của lƣợc đồ, Mi là tập con thực sự của khoá K mà Mi lại là một siêu khoá mâu thuẫn với giả thiết K là khoá. Vậy K  M.

Chứng minh (2)

Lấy Mi  M ta cần chứng minh Mi  K thật vậy theo thuật toán xây dựng lƣợc đồ thì Mi+ =U tức Mi là siêu khoá, tuy nhiên Mi là khoá vì lấy Mi‟  Mi thì (Mi‟)+ U vì các phần tử của họ Sperner là không bao nhau, mà Mi‟  Mi thế nên  Mj  M thì Mj  Mi‟ thế nên (Mi‟)+ =Mi‟ U

Ví dụ: Cho U=ABCDEGH và họ Sperner M={ACD, ABE, GH }, hãy xây dựng một

lƣợc đồ quan hệ =(U,F) sao cho K = M Giải:

Lấy F={ ACD  BEGH, ABE  CDGH, GH ABCDE}

Rõ ràng lƣợc đồ =(U,F) với U và F đƣợc xác định nhƣ trên chính là lƣợc đồ cần tìm. Nhận xét: Số khoá của lƣợc đồ đƣợc xây dựng theo thuật toán trên bằng lực lƣợng của họ M.

24.3. Một số vấn đề về khóa

Cho =(U,F) ta cần quan tâm một số vấn đề sau:

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

Cho một lƣợc đồ  = (U, F), hãy tìm một khoá K. Tƣ tƣởng chung:

b1) Trƣớc hết chọn một siêu khoá K

b2) Từ siêu khoá đó kiểm tra xem nó có phải là khoá không

b3) Nếu K là khoá thì dừng thuật toán, ngƣợc lại chuyển bƣớc tiếp theo.

b4) Nếu K chƣa phải là khoá thì có K1 là tập con thực sự của và lớn nhất của K và K1 là siêu khoá, thay K bằng K1 và quay trở lại bƣớc b2.

* Thuật toán tìm một khóa của lƣợc đồ quan hệ:

Input: Lƣợc đồ quan hệ  =(U, F) Output: Một khoá K của lƣợc đồ

Method

- Chọn một siêu khoá K của lƣợc đồ chẳng hạn có thể chọn K=U hoặc K= U\ R  L với L= Li |  LiRi F, R= Ri |  LiRi F

- For each attribute A in K Do If (K-A)+ = U Then

K:=K-{A} EndIf

EndFor - Return K

Ví dụ: Cho lƣợc đồ quan hệ =(U, F) với U=ABCDEGHK

F={ ADHBC, GHBE, DCG, CHK}

Hãy tìm một khoá của lƣợc đồ

Chọn siêu khoá K=ACDGH

Nên gán K:=K – {C}= ADGH

xét (K-D)+ = (AGH)+ =ABEGH U nên không loại đƣợc D xét (K-G)+ = (ADH)+ = ABCDEGHK=U, loại G

Nên gán K=K- {G} = ADH

xét (K-H)+=(AD)+ =ACDG U nên không loại đƣợc H Vậy, một khoá của lƣợc đồ là ADH

Bài tập: Hãy tìm một khóa của lƣợc đồ sau:

a)=(U,F) với U=ABCDEGH; F={AB  CDE, AC  BCG, BDG, ACHHE,

CG  BDE }.

b) =(U,F) với U=ABCDEGH; F={AG  CBE, AC  BCG, GDBA, ACHHE,

CG  BDE }.

c) = (U, F) với U=ABCDEH, F={ BCE, DA, CA, AED, BECH}.

Nhận xét : Ta cha có một thuật toán nào để tìm tất cả các khoá của lƣợc đồ, do vậy ta

phải tìm cách tiếp cận khác nhau đối với khoá.

24.3.2. Kiểm tra một tập cho trước có phải là khoá hay không?

Cho một lƣợc đồ  = (U, F), Cho K U hỏi rằng K có phải là khoá hay không?

Cách làm: Tính K+, nếu K+  U thì K không là khoá của lƣợc đồ. nếu K+

= U chứng tỏ K là một siêu khoá, để kiểm tra K có phải là khoá không ta lấy mọi tập con thực sự lớn nhất của K, nếu tất cả các tập con thực sự lớn nhất của K đều không là siêu khoá thì chứng tỏ K là khoá, nếu tồn tại một tập con thực sự lớn nhất của K là siêu khoá thì chứng tỏ K không là khoá.

Ví dụ: cho lƣợc đồ =(U,F) với U=ABCDEGH

F={AB  CDE, AC  BCG, BDG, ACHHE, CG  BDE } và K = ACGH hỏi rằng K có là khoá của lƣợc đồ hay không? K+= ACGH  BCG  HE  BDE = U suy ra K là siêu khoá

Các tập con thực sự lớn nhất của K là ACG, CGH, ACH, AGH; dễ dàng kiểm tra các tập ACG có (ACH)+= U vậy K không là khoá.

Bài tập: Cho lƣợc đồ quan hệ =(U,F) với U=ABCDEGH

F={AG  CBE, AC  BCG, GDBA, ACHHE, CG  BDE }. Hãy cho biết những tập thuộc tính nào sau đây là khóa của lƣợc đồ: AG, AC, GDC, CGH

24.3.3. Giao của tất cả các khoá

Ký hiệu I là tập mà mỗi phần tử của nó tham gia vào tất cả các khoá của lƣợc đồ hay I là giao của tất cả các khoá của lƣợc đồ.

Ký hiệu N là tập mà mỗi phần tử của nó không tham gia vào bất cứ một khoá nào của lƣợc đồ.

Kí hiệu S ={ U \ (Ri – Li) |  Li Ri  F } Sau này ta sẽ chứng minh I =S = { U \ 

F R L i i i i ) L \ R (   |  Li Ri  F}

Định nghĩa: Cho lƣợc đồ quan hệ  = (U, F), thuộc tính A trong U đƣợc gọi là thuộc

tính tiền định nếu nh A có mặt ở vế phải của một phụ thuộc hàm bất kỳ thì A cũng phải xuất hiện ở vế trái của phụ thuộc hàm đó hoặc thuộc tính A không xuất hiện trong bất cứ phụ thuộc hàm nào.

Gọi tập tất cả các thuộc tính tiền định của lƣợc đồ  là T ta sẽ chứng minh: T =I =S (1)

Ta cần chứng minh (1)

Chứng minh T =I , để chứng minh T =I ta sẽ chứng minh T I và I  T - Chứng minh T Ita sẽ chứng minh bằng phản chứng

Giả sử A T (2) mà AI (3)

Từ (3) suy ra  khoá K, để AK, do K là khoá nên K+ =U

Việc tìm K+ sử dụng thuật toán tìm bao đóng, tức là phải có bƣớcthứ i nhƣ sau: K(i) không chứa A nhng K(i+1) lai chứa A, có nghĩa là ta phải sử dụng một phụ thuộc hàm có dạng L  R, bởi vì L  K(i) nên A L

Vậy tồn tại phụ thuộc hàm mà vế phải chứa A mà vế trái không chứa A, do đó trái với giả thiết A là thuộc tính tiền định

- Chứng minh I  T ta cũng chứng minh bằng phản chứng Giả sử có AI và A T suy ra tồn tại một phụ thuộc hàm L R

Một phần của tài liệu Đề cương bài giảng học phần: Cơ sở dữ liệu (2014 - 2015) (Trang 117 - 144)