11
Chương 9: Phụ thuộc hàmChương 9: Phụ thuộc hàm(Functional Dependency)(Functional Dependency)
22
Nội dungNội dung
Dư thừa dữ liệuDư thừa dữ liệu Phụ thuộc hàmPhụ thuộc hàm Hệ tiên đề AmstrongHệ tiên đề Amstrong Bao đóng của tập phụ thuộc hàmBao đóng của tập phụ thuộc hàm Bao đóng của tập thuộc tínhBao đóng của tập thuộc tính Tìm khóaTìm khóa
33
Dư thừa dữ liệuDư thừa dữ liệu(Data redundancy)(Data redundancy)
Mục đích của thiết kế CSDL là gom Mục đích của thiết kế CSDL là gom các thuộc tính thành các quan hệ sao các thuộc tính thành các quan hệ sao cho giảm thiểu dư thừa dữ liệu cho giảm thiểu dư thừa dữ liệu
Hậu quả của dư thừa dữ liệu:Hậu quả của dư thừa dữ liệu:• Lãng phí không gian đĩaLãng phí không gian đĩa• Các bất thường khi cập nhật Các bất thường khi cập nhật
Ba loại bất thường:Ba loại bất thường:• Bất thường khi thêm vàoBất thường khi thêm vào• Bất thường khi xóa bỏBất thường khi xóa bỏ• Bất thường khi sửa đổiBất thường khi sửa đổi
44
Phụ thuộc hàmPhụ thuộc hàm(Functional Dependency)(Functional Dependency)
Phụ thuộc hàm mô tả mối liên hệ Phụ thuộc hàm mô tả mối liên hệ giữa các thuộc tính giữa các thuộc tính
Dựa vào phụ thuộc hàm để thiết kế Dựa vào phụ thuộc hàm để thiết kế lại CSDL, loại bỏ các dư thừa dữ liệu lại CSDL, loại bỏ các dư thừa dữ liệu
55
Phụ thuộc hàmPhụ thuộc hàm(Functional Dependency)(Functional Dependency)
Cho lược đồ quan hệ R(U), r là 1 quan hệ Cho lược đồ quan hệ R(U), r là 1 quan hệ bất kỳ trên R, X và Y là 2 tập thuộc tính bất kỳ trên R, X và Y là 2 tập thuộc tính con.con.
Định nghĩa: Phụ thuộc hàm (FD) f: X Định nghĩa: Phụ thuộc hàm (FD) f: X Y Y trên lược đồ quan hệ R nếu và chỉ nếu mỗi trên lược đồ quan hệ R nếu và chỉ nếu mỗi giá trị X trong r có quan hệ chính xác với 1 giá trị X trong r có quan hệ chính xác với 1 giá trị Y trong r. Nghĩa là bất kể khi nào 2 giá trị Y trong r. Nghĩa là bất kể khi nào 2 bộ của r có cùng giá trị X thì cũng có cùng bộ của r có cùng giá trị X thì cũng có cùng giá trị Y.giá trị Y.
t1, t2 t1, t2 r(R): t1[X] = t2[X] r(R): t1[X] = t2[X] t1[Y]= t2[Y] t1[Y]= t2[Y]
66
Phụ thuộc hàmPhụ thuộc hàm(Functional Dependency)(Functional Dependency)
X là vế trái, ký hiệu left(f) hay còn gọi X là vế trái, ký hiệu left(f) hay còn gọi là determinantlà determinant
Y là vế phải, ký hiệu right(f) hay còn Y là vế phải, ký hiệu right(f) hay còn gọi là dependentgọi là dependent
77
Phụ thuộc hàmPhụ thuộc hàm(Functional Dependency -FD)(Functional Dependency -FD)
Phụ thuộc hàm là 1 Phụ thuộc hàm là 1 đặc điểm ngữ đặc điểm ngữ nghĩanghĩa của các thuộc tính, được xem của các thuộc tính, được xem là 1 ràng buộc giữa các thuộc tính.là 1 ràng buộc giữa các thuộc tính.
Ví dụ: Một nhân viên chỉ có 1 tiền Ví dụ: Một nhân viên chỉ có 1 tiền lương nhưng nhiều nhân viên có thể lương nhưng nhiều nhân viên có thể có cùng 1 mức lươngcó cùng 1 mức lương
Emp_ID Emp_ID Salary Salary
Salary -/-> Emp_IDSalary -/-> Emp_ID
88
Phụ thuộc hàmPhụ thuộc hàm(Functional Dependency -FD)(Functional Dependency -FD)
Nếu X là 1 candidate key thì tất cả Nếu X là 1 candidate key thì tất cả các thuộc tính Y của lược đồ R sẽ các thuộc tính Y của lược đồ R sẽ phải phụ thuộc hàm vào X phải phụ thuộc hàm vào X
Ví dụ: trong lược đồ PROFESSOR có Ví dụ: trong lược đồ PROFESSOR có ProfId là primary key nên:ProfId là primary key nên:
ProfId ProfId Name, Qualification Name, Qualification Có 1 số FD trong lược đồ sẽ gây ra dư Có 1 số FD trong lược đồ sẽ gây ra dư
thừa dữ liệu.thừa dữ liệu.
99
Ví dụ FD và dư thừa dữ liệuVí dụ FD và dư thừa dữ liệu
Xét lược đồ PERSON(SSN, Name, Xét lược đồ PERSON(SSN, Name, Address,Hobby) với quy tắc là 1 người Address,Hobby) với quy tắc là 1 người có thể có nhiều sở thích (hobby)có thể có nhiều sở thích (hobby)• SSN,Hobby SSN,Hobby SSN, Name, Address,Hobby SSN, Name, Address,Hobby
Bất thường xảy ra khi một người có Bất thường xảy ra khi một người có nhiều sở thích thay đổi địa chỉnhiều sở thích thay đổi địa chỉ
1010
Giải thuật kiểm tra phụ thuộc hàmGiải thuật kiểm tra phụ thuộc hàm
Bài toán: cho quan hệ r và 1 phụ Bài toán: cho quan hệ r và 1 phụ thuộc hàm f:Xthuộc hàm f:X Y. Kiểm tra xem r Y. Kiểm tra xem r thỏa mãn f hay không?thỏa mãn f hay không?
Function Satisfies(r,f:XFunction Satisfies(r,f:X Y) Y)• Sắp thứ tự các bộ trong r theo các thuộc Sắp thứ tự các bộ trong r theo các thuộc
tính của Xtính của X• If mỗi tập các bộ có cùng giá trị X thì có If mỗi tập các bộ có cùng giá trị X thì có
cùng giá trị Y thencùng giá trị Y then Satisfies = trueSatisfies = true
• ElseElse Satisfies = falseSatisfies = false
1111
Tập phụ thuộc hàmTập phụ thuộc hàm
Gọi F là 1 tập phụ thuộc hàm trên R nếu Gọi F là 1 tập phụ thuộc hàm trên R nếu mọi phụ thuộc hàm trong F đều là phụ mọi phụ thuộc hàm trong F đều là phụ thuộc hàm trên Rthuộc hàm trên R
Phụ thuộc hàm tầm thường ( trivial FD) Phụ thuộc hàm tầm thường ( trivial FD) hay phụ thuộc hàm hiển nhiên xhay phụ thuộc hàm hiển nhiên x Y nếu Y Y nếu Y X X
Số tập con có thể có của R = Số tập con có thể có của R = {A1,A2,...,An} là 2{A1,A2,...,An} là 2nn. Ứng với mỗi tập con . Ứng với mỗi tập con sẽ có tối đa 2sẽ có tối đa 2nn. Số FD tối đa có thể có . Số FD tối đa có thể có trong 1 lược đồ là 2trong 1 lược đồ là 22n2n..
1212
Tập phụ thuộc hàmTập phụ thuộc hàm FD được dùng để thể hiện các ràng FD được dùng để thể hiện các ràng
buộc bảo toàn (integrity constraint), buộc bảo toàn (integrity constraint), vì vậy DBMS cần phải quản lý các FD.vì vậy DBMS cần phải quản lý các FD.
Với 1 tập S chứa toàn bộ các FD của Với 1 tập S chứa toàn bộ các FD của 1 lược đồ, có cách nào tìm ra 1 tập T 1 lược đồ, có cách nào tìm ra 1 tập T S sao cho mọi FD của S đều ngầm S sao cho mọi FD của S đều ngầm suy từ các FD của T. Khi đó, DBMS suy từ các FD của T. Khi đó, DBMS chỉ quản lý các FD của T, các FD chỉ quản lý các FD của T, các FD trong S sẽ được quản lý một cách tự trong S sẽ được quản lý một cách tự động.động.
1313
Hệ tiên đề AmstrongHệ tiên đề Amstrong
Phụ thuộc hàm XPhụ thuộc hàm XY được Y được suy diễn suy diễn luận lýluận lý từ F nếu mọi quan hệ thỏa từ F nếu mọi quan hệ thỏa mãn mọi phụ thuộc hàm trong F thì mãn mọi phụ thuộc hàm trong F thì cũng thỏa mãn Xcũng thỏa mãn XYY• Ký hiệu F|=XKý hiệu F|=XYY• F bao hàm (implies) XF bao hàm (implies) XYY• XXY được suy diễn theo quan hệ từ FY được suy diễn theo quan hệ từ F
1414
Hệ tiên đề AmstrongHệ tiên đề Amstrong
Quy tắc suy diễn (inference rule): Quy tắc suy diễn (inference rule): nếu 1 quan hệ thỏa mãn 1 số phụ nếu 1 quan hệ thỏa mãn 1 số phụ thuộc hàm nào đó thì quan hệ này thuộc hàm nào đó thì quan hệ này cũng thỏa mãn 1 số phụ thuộc hàm cũng thỏa mãn 1 số phụ thuộc hàm kháckhác
1515
Hệ tiên đề AmstrongHệ tiên đề Amstrong Các tiên đề suy diễn:Các tiên đề suy diễn:
• F1. Phản xạ (reflexivity): YF1. Phản xạ (reflexivity): YX X XXYY
• F2. Gia tăng (augmentation): XF2. Gia tăng (augmentation): XY Y XZ XZ YZYZ
• F3. Bắc cầu (transitivity): XF3. Bắc cầu (transitivity): XY và Y và YYZ Z X X ZZ
1616
Hệ tiên đề AmstrongHệ tiên đề Amstrong
F4. Hợp (additivity): XF4. Hợp (additivity): XY và XY và XZ Z X X YZYZ F5. Chiếu (projectivity): XF5. Chiếu (projectivity): XYZ YZ X X YY F6. Bắc cầu giả (pseudotransitivity): XF6. Bắc cầu giả (pseudotransitivity): XY Y
và YZvà YZW W XZ XZ WW
1717
Bao đóng của tập phụ thuộc hàmBao đóng của tập phụ thuộc hàm
Bao đóng (closure) của tập phụ thuộc Bao đóng (closure) của tập phụ thuộc hàm F là 1 tập phụ thuộc hàm nhỏ hàm F là 1 tập phụ thuộc hàm nhỏ nhất chứa F sao cho không thể áp nhất chứa F sao cho không thể áp dụng hệ tiên đề Amstrong trên tập dụng hệ tiên đề Amstrong trên tập này để tạo ra 1 phụ thuộc hàm khác này để tạo ra 1 phụ thuộc hàm khác không có trong tập hợp nàykhông có trong tập hợp này
Ký hiệu F+Ký hiệu F+ F+ là 1 tập hợp các FD được suy diễn F+ là 1 tập hợp các FD được suy diễn
từ Ftừ F
1818
Các tính chất của bao đóng của tập Các tính chất của bao đóng của tập phụ thuộc hàmphụ thuộc hàm
1. Tính phản xạ: với mọi tập phụ thuộc hàm F+ ta luôn có F F+
2.2. Tính đơn điệu: nếu F Tính đơn điệu: nếu F G thì F+ G thì F+ G+G+
3.3. Tính lũy đẳng: với mọi tập phụ Tính lũy đẳng: với mọi tập phụ thuộc hàm F ta luôn có (F+)+ = F+.thuộc hàm F ta luôn có (F+)+ = F+.
1919
Hệ tiên đề AmstrongHệ tiên đề Amstrong
Hệ tiên đề Amstrong là Hệ tiên đề Amstrong là đúng đắnđúng đắn (sound) (sound) các phụ thuộc hàm suy các phụ thuộc hàm suy diễn từ F (tập phụ thuộc hàm trên r) diễn từ F (tập phụ thuộc hàm trên r) theo hệ tiên đề Amstrong cũng là theo hệ tiên đề Amstrong cũng là một phụ thuộc hàm trên rmột phụ thuộc hàm trên r
Hệ tiên đề Amstrong là Hệ tiên đề Amstrong là toàn vẹntoàn vẹn (completeness) (completeness) bảo đảm rằng f bảo đảm rằng f F+ nếu và chỉ nếu f là 1 FD được suy F+ nếu và chỉ nếu f là 1 FD được suy diễn diễn
2020
Phụ thuộc hàm tương đươngPhụ thuộc hàm tương đương
Nếu F và G là 2 tập FD. F Nếu F và G là 2 tập FD. F suy diễnsuy diễn G ( G ( F entails G) nếu F suy diễn được tất F entails G) nếu F suy diễn được tất cả các FD có trong G. cả các FD có trong G.
F và G là tương đương nhau nếu F F và G là tương đương nhau nếu F suy diễn G và G suy diễn Fsuy diễn G và G suy diễn F
2121
Kiểm tra các tập FD tương đươngKiểm tra các tập FD tương đương
Input: F,G – các tập FDInput: F,G – các tập FD Output: true nếu F tương đương G,Output: true nếu F tương đương G,
false nếu ngược lại false nếu ngược lại
For each f For each f F doF do
if G does not entail f then return falseif G does not entail f then return false
For each g For each g G do G do
if G does not entail f then return falseif G does not entail f then return false
Return trueReturn true
2222
Ví dụVí dụ Hãy khảo sát 2 tập FD sau: Hãy khảo sát 2 tập FD sau:
• F={ ACF={ ACB, AB, AC, DC, DA}A}• G={AG={AB, AB, AC, DC, DA, DA, DB}B}
F và G có tương đương nhau không???F và G có tương đương nhau không???
Từ ATừ AC + Tiên đề F2 C + Tiên đề F2 A AAC (1)AC (1)Từ (1)+ ACTừ (1)+ ACB + tiên đề F3 B + tiên đề F3 A ABBTừ DTừ DA + AA + AB + tiên đề F3 B + tiên đề F3 D D B BF suy diễn GF suy diễn GTương tự khi xét G suy diễn FTương tự khi xét G suy diễn F
2323
Bao đóng của tập phụ thuộc hàmBao đóng của tập phụ thuộc hàm
Ví dụ cho F={Ví dụ cho F={ABAB C C, , CCBB} trên r(ABC)} trên r(ABC) F+={AF+={AA, ABA, ABA, ACA, ACA, ABCA, ABCA,A,
BBB, ABB, ABB, BCB, BCB, ABCB, ABCB, B, CCC, ACC, ACC, BCC, BCC, ABCC, ABCC,C,
ABABAB, ABCAB, ABCAB, AB, ACACAC, ABCAC, ABCAC,AC, BCBCBC, ABCBC, ABCBC,BC, ABCABCABC,ABC, ABABCC, AB, ABAC, ABAC, ABBC, ABBC, ABABC,ABC, CCBB,C,CBC, ACBC, ACB, ACB, ACAB }AB }
2424
Bao đóng của tập thuộc tínhBao đóng của tập thuộc tính
Bao đóng của tập thuộc tính X dựa Bao đóng của tập thuộc tính X dựa trên một tập phụ thuộc hàm F trên một tập phụ thuộc hàm F (closure of X under F) là 1 tập thuộc (closure of X under F) là 1 tập thuộc tính Y sao cho:tính Y sao cho:XXYY F+ F+XXZZ F+: Z F+: Z YY
Hoặc = {A|XHoặc = {A|XA A F+} F+}FX
2525
Giải thuật tìm bao đóng của tập Giải thuật tìm bao đóng của tập thuộc tính trên tập phụ thuộc hàmthuộc tính trên tập phụ thuộc hàm
Input: tập thuộc tính X và tập phụ thuộc hàm FInput: tập thuộc tính X và tập phụ thuộc hàm F Output: bao đóng của X dựa trên FOutput: bao đóng của X dựa trên FProcedure Closure(X,F,Closure_X)Procedure Closure(X,F,Closure_X)BeginBegin
Closure_X:=X;Closure_X:=X; repeatrepeat
Old_X := Closure_X;Old_X := Closure_X;for mỗi Wfor mỗi WZ trong F doZ trong F do
if W if W Closure_X then Closure_X then Closure_X :=Closure_X Closure_X :=Closure_X Z; Z;
until Closure_X = Old_X;until Closure_X = Old_X;End;End;
2626
Ví dụ tìm bao đóng của XVí dụ tìm bao đóng của X
Cho R(A,B,C,D,E,F) và tập Cho R(A,B,C,D,E,F) và tập F={f1:DF={f1:DB, f2: AB, f2: AC, f3: ADC, f3: ADE, E, f4:Cf4:CF}F}
Tìm ATìm A++FF: :
• AA++FF ={A} ={A}
• Duyệt F lần 1: Từ f2 Duyệt F lần 1: Từ f2 A A++FF = {AC}; Từ f4 = {AC}; Từ f4
A A++FF = {ACF} = {ACF}
• Duyệt F lần 2: ADuyệt F lần 2: A++FF không thay đổi không thay đổi
AA++FF = {ACF} = {ACF}
Tìm {AD}Tìm {AD}++F F ??????
2727
Kiểm tra thành viên trong F+Kiểm tra thành viên trong F+ Để xác định F|= XĐể xác định F|= XY, cần kiểm tra Y, cần kiểm tra
XX Y Y F+ F+ Giải thuật:Giải thuật:
• Nhập: phụ thuộc hàm XNhập: phụ thuộc hàm XY và tập FY và tập F• Xuất: true nếu F|= XXuất: true nếu F|= XY, ngược lại là Y, ngược lại là
falsefalseFunction Member(X,Y,Z)Function Member(X,Y,Z)
BeginBeginif Y if Y Closure(X,F) then Member = true Closure(X,F) then Member = trueelse Member = false;else Member = false;
EndEnd
2828
Ví dụ kiểm tra phụ thuộc hàm Ví dụ kiểm tra phụ thuộc hàm
Cho F={DCho F={DB, AB, AC, ADC, ADE, CE, CB}. B}. Kiểm tra F có bao hàm AKiểm tra F có bao hàm AB??B??
- Tìm A- Tìm A++FF? ? A A++
FF = {ACB} = {ACB}
- Do B - Do B A A++FF nên F bao hàm A nên F bao hàm ABB
2929
Giải thuật tìm khóa của lược đồ quan hệGiải thuật tìm khóa của lược đồ quan hệ
Nhập: R(U) và tập phụ thuộc hàm FNhập: R(U) và tập phụ thuộc hàm F Xuất: tập hợp K bao gồm tất cả khóa Xuất: tập hợp K bao gồm tất cả khóa
của Rcủa R Tập thuộc tính nguồn (TN) chứa tất Tập thuộc tính nguồn (TN) chứa tất
cả các thuộc tính xuất hiện ở vế trái cả các thuộc tính xuất hiện ở vế trái và không xuất hiện ở vế phải của các và không xuất hiện ở vế phải của các phụ thuộc hàm và các thuộc tính phụ thuộc hàm và các thuộc tính không xuất hiện ở cả vế trái lẫn vế không xuất hiện ở cả vế trái lẫn vế phải của các phụ thuộc hàm phải của các phụ thuộc hàm
TN=U- TN=U- ffF F right(f)right(f)
3030
Giải thuật tìm khóa của lược đồ quan hệGiải thuật tìm khóa của lược đồ quan hệ
Tập thuộc tính đích (TD) chứa tất cả Tập thuộc tính đích (TD) chứa tất cả các thuộc tính có xuất hiện ở vế phải các thuộc tính có xuất hiện ở vế phải và không xuất hiện ở vế trái của các và không xuất hiện ở vế trái của các phụ thuộc hàmphụ thuộc hàm
TD= TD= ffF F right(f) - right(f) - ffF F left(f)left(f) Tập thuộc tính trung gian (TG) chứa Tập thuộc tính trung gian (TG) chứa
tất cả các thuộc tính xuất hiện ở cả tất cả các thuộc tính xuất hiện ở cả vế trái lẫn vế phải của các phụ thuộc vế trái lẫn vế phải của các phụ thuộc hàmhàm
3131
Thuật toán tìm tất cả khóaThuật toán tìm tất cả khóa Bước 1: Bước 1: tạo tập thuộc tính nguồn TN. tạo tập thuộc tính nguồn TN.
Tập thuộc tính trung gian TGTập thuộc tính trung gian TG Bước 2:Bước 2: if TG = if TG = then lược đồ quan then lược đồ quan
hệ chỉ có 1 khóa Khệ chỉ có 1 khóa K
K=TN Kết thúcK=TN Kết thúc
Ngược lại qua bước 3Ngược lại qua bước 3 Bước 3Bước 3: tìm tất cả các tập con Xi của : tìm tất cả các tập con Xi của
tập trung gian TGtập trung gian TG
……....
3232
Thuật toán tìm tất cả khóa (tt)Thuật toán tìm tất cả khóa (tt) Bước 4: tìm các siêu khóa Si bằng Bước 4: tìm các siêu khóa Si bằng
cách cách Xi Xi
if (TN if (TN Xi)+ = Q+ then Si Xi)+ = Q+ then Si = TN = TN XiXi
Bước 5: tìm khóa bằng cách loại bỏ Bước 5: tìm khóa bằng cách loại bỏ các siêu khóa không tối tiểucác siêu khóa không tối tiểu Si, Sj Si, Sj S S
if Siif Si Sj then Loại Sj ra khỏi tập siêu Sj then Loại Sj ra khỏi tập siêu khóa Skhóa S
S còn lại chính là tập khóa cần tìm S còn lại chính là tập khóa cần tìm
3333
Ví dụ 1Ví dụ 1
Cho R(A,B,C,D,E,F) và F={DCho R(A,B,C,D,E,F) và F={DB, AB, AC, C, ADADE, CE, CF}. Tìm tất cả các khóa của RF}. Tìm tất cả các khóa của R
B1: TN={AD}, TG={C}B1: TN={AD}, TG={C} Xi là các tập con của TGXi là các tập con của TG
XXii XXii TN TN (X(Xii TN)+ TN)+ Siêu Siêu khóakhóa
KhóaKhóa
ADAD ADBCEF=R+ADBCEF=R+ ADAD ADAD
CC ADCADC ADBCEF=R+ADBCEF=R+ ADCADC
3434
Ví dụ 2Ví dụ 2 Cho R(A,B,C,D,E,F) và F={ACho R(A,B,C,D,E,F) và F={AD, CD, CAF, AF,
ABAB EC}. Tìm khóa của R? EC}. Tìm khóa của R? TN={B} , TG={AC}TN={B} , TG={AC} Khóa của R là {AB} và {BC}Khóa của R là {AB} và {BC}
XXii XXii TN TN (X(Xii TN)+ TN)+ Siêu khóaSiêu khóa KhóaKhóa
BB BB
CC CBCB ABCDEF=R+ABCDEF=R+ BCBC BCBC
AA ABAB ABCDEF=R+ABCDEF=R+ ABAB ABAB
ACAC ABCABC ABCDEF=R+ABCDEF=R+ ABCABC