22. PHỦ CỦA TẬP PHỤTHUỘC HÀM
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
Xét tập M=U\A thấy rằng M là tập con lớn nhất của U không chứa A, suy ra L M, do vậy:
M L ( theo luật phản xạ ) L R ( theo giả thiết ) R A ( do A R )
Suy ra, M A ( do tính chất bắc cầu)
Hơn nữa, M M nên M M A =U suy ra M là siêu khoá và không chứa A, từ M ta thu đợc một khoá không chứa A, tức:
K M và AK, suy ra A I mâu thuẫn với giả thiết.
Chứng minh I =S để chứng minh I =S ta chứng minh I S và S I Chứng minh I S lấy A I suy ra A( Ri - Li ) suy ra A ( Ri - Li) Suy ra A S
Chứng minh S I lấy A S suy ra A ( Ri –Li ) suy ra nếu ARi thì A Li suy ra AI
Từ các chứng minh trên suy ra (1) đƣợc chứng minh.
Định lý 1: Cho lƣợc đồ quan hệ =(U, F), gọi N={ ( Ri -Li ) | Li I } khi đó N N (hay N là tập chứa một số các phần tử không khoá của lƣợc đồ )
Chứng minh:
A R A L
Lấy A N ta cần chứng minh A K, với K là khoá bất kỳ nào của lƣợc đồ, giả sử ngƣợclại tồn tại một khoá K để A K, suy ra K - A Li -A do K I Li ( theo giả thiết), suy ra K - A Li vì Li không chứa A
Vậy K- A Li ( luật phản xạ) Li Ri ( giả thiết)
Ri A ( luật tách )
Suy ra K-A A, hơn nữa K-A K-A nên K - A K mà K là khoá nên K U mà K - A U vậy K - A là siêu khoá, mâu thuẫn với giả thiết K là khoá.
Định lý 2: với Y N và X I thì Y ( XY)+ \ X N
Chứng minh Y (XY)+ \ X Hiển nhiên Y (XY)+ Do X Y = nên Y \ X = Y Y \ X (XY)+
\ X Suy ra Y (XY)+
\ X
Chứng minh ( XY)+ \ X N, ta chứng minh bằng phản chứng. Giả sử tồn tại A ( XY)+ \ X ( 1) mà AN (2)
Do A ( XY)+ \ X nên A ( XY)+ hay XY A
A Y vì Y N , A N suy ra AX do (1) suy ra AXY Do (2) suy ra có một khoá K, A K
K‟=K\A M=K‟XY
M XYA và MK‟ suy ra MK‟A=KU
Vì siêu khoá M có tập Y không chứa N vì Y là tập con của N suy ra K‟X là khoá XI , I K suy ra X\ A K \ A
Vì A X nên X K\ A=K‟
Vậy K‟X=K‟ suy ra K‟X là siêu khoá suy ra K‟ là siêu khoá , vô lý.
Hệ quả: Từ định lý 2 ta thấy nếu N={ ( Ri -Li ) | Li I } thì N‟=(NI)+\I N. Định lý 3: Cho lƣợc đồ quan hệ =(U, F), gọi N‟‟=R \ L | (R=Ri, L=Li LiRi F) (N‟‟ là tập tất cả các thuộc tính chỉ xuất hiện ở vế phải mà không xuất hiện ở vế trái của các phụ thuộc hàm) thì N‟‟ N
*Thuật toán tìm giao của tất cả các khóa
Cho một lƣợc đồ quan hệ = (U, F), với F={Li Ri với i=1,..n } Hãy tìm giao của tất cả các khoá
Giải:
Giao của tất cả các khoá I ={ U \ n
i1
(Ri – Li)}
Ví dụ: Hãy tìm giao của tất cả các khoá của lƣợc đồ =(U,F) Với U=ABCDEGH
F={AB CDE, AC BCG, BDG, ACHHE, CG BDE }
I = U \ ((CDE – AB) (BCG – AC) (G – BD) (HE – ACH) (BDE – CG) ) =U \ ( CDE BG G E BDE ) =U \ BCDEG=AH
Nhận xét:
- Với lƣợc đồ đã cho ta có thể tìm I một cách dễ dàng
- Lƣợc đồ có duy nhất một khoá khi và chỉ khi I là khoá hay (I)+ =U
24.3.4. Thuật toán kiểm tra một lược đồ đã cho có một hay nhiều khoá
Bài toán: cho lƣợc đồ quan hệ = (U, F) hỏi rằng lƣợc đồ có một hay nhiều khoá. b1. Tính I
b2. Nếu (I)+ = U thì lƣợc đồ đã cho có duy nhất một khoá b3. Nếu (I)+ U thì lƣợc đồ có nhiều khoá
Trong ví dụ trên ta có I =AH do vậy ( I )+ U do vậy lƣợc đồ đã cho có nhiều khoá.
24.3.5. Thuật toán tìm tất cả các khoá của lược đồ quan hệ
Thuật toán 1:
Bƣớc 1:Xác định tất cả các tập con khác rỗng của Q+ . Kết quả tìm đƣợc giả sử là các tập thuộc tính X1,X2,...X2n-1
Bƣớc 2:Tìm bao đóng của các xi
Bƣớc 3:Siêu khóa là các xi có bao đóng đúng bằng Q+ .Giả sử ta đã có các siêu khóa là S={S1,S2,...Sm}
Bƣớc 4:Xây dựng tập chứa tất cả các khóa của Q+ từ tập S bằng cách xét mọi Si,Sj con của S(i#j), nếu Si ⊂ Sj thì ta loại Sj (i,j=1...n), kết quả còn lại của S chính là tập