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=XY 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={XYW, XWZ, ZY, XYZ} Hãy cho biết XYZ có dƣ thừa trong F hay không?
Giải:
1) Tạm thời xóa XYZ ra khỏi F
G:=F-{XYZ}={XYW, XWZ, ZY} 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 XYZ 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: LR in G Do If RL+ 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)
- fF 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,
ZYF.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 ZY 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} ABC là phụ thuộc hàm không đầy đủ. BC 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 ABD 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‟ YF+
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 ABD có A+ =ABCD suy ra ADF+
.Trong F ta thay AB bằng A D suy ra F={ABC,BC,AD}
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={ABC,BC,ABD } ta suy ra F={AB,AC,BC,ABD} =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={ABC,BD,ABD } thì F dƣ thừa vì: F-F‟={ ABC,BD}
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) , KU 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 KU hoặc KU \ 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) AK thì (K-{A})+U Hoặc nó tƣơng đƣơng với a) KU
b) AK 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 | LiRi F Đặt R= Ri | LiRi F
Đặt K= U\ R L Thì K là một siêu khoá
Ví dụ: Cho U=ABCDEGHK
F={ ACBGE, DHACD, BGAEH} 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 | XU }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 KM
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 | LiRi F, R= Ri | LiRi 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={ ADHBC, GHBE, DCG, CHK}
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, BDG, ACHHE,
CG BDE }.
b) =(U,F) với U=ABCDEGH; F={AG CBE, AC BCG, GDBA, ACHHE,
CG BDE }.
c) = (U, F) với U=ABCDEH, F={ BCE, DA, CA, AED, BECH}.
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, BDG, ACHHE, 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, GDBA, ACHHE, 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 Ita sẽ chứng minh bằng phản chứng
Giả sử A T (2) mà AI (3)
Từ (3) suy ra khoá K, để AK, 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ó AI và A T suy ra tồn tại một phụ thuộc hàm L R