Các thuật toán tìm khóa trong cơ sở dữ liệu quan hệ

33 3.1K 1
Các thuật toán tìm khóa trong cơ sở dữ liệu quan hệ

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Các thuật toán tìm khóa trong cơ sở dữ liệu quan hệ

Trang 1/1 ÐẠỤ ỷỌạ QUỐạ ịỤự TỷÀNỷ PỷỐ ỷỒ ạỷÍ MỤNỷ TRUNG TÂM PỷÁT TRỤỂN ạÔNị NịỷỆ TỷÔNị TỤN BÁO ạÁO TỷU ỷOẠạỷ M ÔN ạÕ SỞ ỏỮ LỤỆU NÂNị ạựO ÐỀ TÀỤể CÁạ TỷUẬT TOÁN TÌM KỷOÁ TRONG C Õ SỞ ỏỮ LỤỆU QUựN ỷỆ Giảng viên phụ trách: TS. ÐỖ PỷÚạ Học viênể  Võ Thế Dân – CH0301010  Trịnh Minh Tuấn – CH0301083 Lớpể Cao học ạNTTQM – Khóa ợ Thaìng ủ nãm ồệệủ Trang 2/2 TÀI LIỆU THAM KHẢO - Chuyên ðề CSDL Nâng cao : PGS. Nguyễn Xuân Huy, TS. Ðỗ Phúc - Giáo trình CSDL Nâng Cao – TS. Ðỗ Phúc - Thiết Kế Các Hệ CSDL -Tập 2 – Ullman ( Trần Ðức Quang dịch) - Closed sets and Translations of relation schemes – 1991 - Nguyễn Xuân Huy - Balanced relation scheme and problem of key representation – 1985 – J.Demetrovics, H ồ Thuần, Nguyễn Xuân Huy, Lê Vãn Bảo. - Nhập Môn CSDL Quan Hệ - GS. Lê Tiến Výõng Trang 3/3 I. Lời nói ðầu Qua quá trình học môn cõ sở dữ liệu trýớc ðây, khái niệm về khóa và tìm khóa của một lýợc ðồ quan hệ, chúng tôi chỉ tìm hiểu ở mức cõ bản, chýa có ðiều kiện ðầu tý sâu hõn, do ðó việc tìm khóa rất tốn thời gian và còn gặp nhiều khó khãn ðối với nhiều bài toán trong thực tế với ðộ phức tạp lớn. D ýới sự gợi ý của Thầy Tiến sĩ Ðỗ Phúc, chúng tôi ðã hiểu ðýợc vấn ðề cặn kẽ hõn và cố gắng tìm kiếm vài thuật toán tìm khóa hầu giải quyết một số bài toán trong thực tế có ðộ phức tạp týõng ðối lớn. Do nhu c ầu thực tế, với dữ liệu có số thuộc tính lớn thì việc tìm khóa là rất phức tạp. Do ðó bài toán “Tìm Khóa” luôn là vấn ðề hấp dẫn nhiều ngýời tìm hiểu nhằm mục ðích giảm thiểu ðộ phức tạp càng nhiều càng tốt. Ở góc ðộ là học viên, với sự ham muốn tìm tòi, học hỏi và sự hýớng dẫn ðộng viên của Thầy, chúng tôi ðã tìm hiểu bài toán “Tìm khóa” với mong muốn là tìm ðýợc những giải thuật có ðộ phức tạp thấp hõn so với giải thuật tìm khóa chuẩn. Trong b ài thu hoạch này, chúng tôi kính trình ðến Thầy kết quả tìm hiểu và việc xây dựng các thuật toán tìm khóa sau hõn hai tháng học tập. Tuy r ằng rất nỗ lực, nhýng với sự hiểu biết còn hạn chế nên bài thu hoạch không tránh khỏi nhiều thiếu sót. Chúng tôi rất mong nhận ðýợc những chỉ bảo của Thầy. Trang 4/4 II. Một Số khái niệm cõ bản A. Quan Hệ 1. Quan hệể Gọi R = { A1, A2, …, An } là tập hữu hạn các thuộc tính, mỗi thuộc tính Ai với i=1,2, ,n có miền giá trị týõng ứng là Di, ký hiệu dom(Ai). Quan h ệ r trên tập thuộc tính R là tập con của tích Descarte D=D1*D2*…*Dn. 2. L ýợc ðồ quan hệể Là tập hữu hạn các thuộc tính R={A1, A2, …, An} với Ai là thuộc tính Cho D=D1*D2* …*Dn. Khi ðó:  Bộ t ðýợc ðịnh nghĩa trên R là một ánh xạ từ R vào D sao cho t(Ai) thuộc Di.  Quan hệ r là tập các bộ {t1, t2, …, tp} B. Phụ thuộc hàm 1. Phụ thuộc hàm Cho R(U) là một lýợc ðồ quan hệ với U = { A1, A2, …, An} là tập thuộc tính. X,Y là tập con của U. Phụ thuộc hàm X Y (ðọc là X xác ðịnh Y) ðýợc ðịnh nghĩa là:  t, t’  r, nếu t.X = t’.X thì t.Y = t’.Y Ý nghĩa: nếu 2 bộ có cùng giá trị X thì có cùng giá trị Y. 2. Bao ðóng của tập phụ thuộc hàm Gọi F là tập các phụ thuộc hàm trên lýợc ðồ quan hệ R. G ọi XY là một phụ thuộc hàm. X,Y  U Ta n ói F khẳng ðịnh logic XY (viết là F|=XY) nếu mỗi quan hệ r của R thỏa các phụ thuộc trong F thì cũng thỏa XY Bao ðóng của F là tập các phụ thuộc hàm ðýợc khẳng ðịnh logic từ F, nghĩa là: F + = { XY | F|=XY } Trang 5/5 3. Hệ tiên ðề ựrmstrong Ðể xác ðịnh ðýợc khóa và hiểu ðýợc các phép suy diễn logic cho các phụ thuộc hàm nói chung, chúng ta phải có những quy tắc suy diễn cho biết làm sao ðể có thể suy ra một hay nhiều phụ thuộc từ các phụ thuộc ðã có. N ãm 1974, Armstrong ðã ðýa ra một tập các quy tắc suy diễn. Các quy tắc này là ðúng ðắn, nghĩa là khi sử dụng chúng, ta sẽ suy ra từ F một phụ thuộc hàm thuộc F + . Hõn nữa những quy tắc suy diễn ðầy ðủ theo nghĩa: từ tập các phụ thuộc F ðã biết, những quy tắc này cho phép suy ðýợc tất cả các phụ thuộc hàm thuộc F + . Tập các quy tác ðó ðýợc gọi là Hệ tiên ðề Armstrong, bao g ồm các quy tắc suy diễn sau: G ọi R là lýợc ðồ quan hệ U l à tập thuộc tính của R. X,Y,Z,W,V  U F l à tập các phụ thuộc hàm A1: Tính Phản Xạ Nếu Y  X  U thì X  Y A2: Tính Tãng Trýởng Nếu X  Y và Z  U thì XZ  YZ, với XZ là X  Z, YZ là Y  Z A3: Tính Bắc Cầu Nếu X  Y và Y  Z thì X  Z Bổ ðề : hệ tiên ðề Armstrong là ðúng ðắn, nghĩa là nếu X  Y ðýợc suy từ F nhờ hệ tiên ðề này thì X  Y ðúng trong mọi quan hệ mà các phụ thuộc của F ðúng. Chứng minh: Xét A1: R õ ràng là ðúng ðắn vì không thể có một quan hệ r với 2 bộ giống nhau ở các thành phần trong X nhýng lại khác nhau ở một tập con nào ðó của X ! X ét A2: Gi ả sử quan hệ r thỏa XY, và có 2 bộ t1, t2  r giống nhau ở các thuộc tính của XZ nhýng khác nhau ở các thuộc tính của YZ. Vì t1, t2 không thể khác nhau ở các thuộc tính của Z nên phải khác nhau ở thuộc tính của Y. Ðiều này mâu thuẩn với giả thiết vì do XY, nên t1 và t2 phải giống nhau ở các thuộc tính của Y. X ét A3: Gi ả sử quan hệ r thỏa XY và YZ, và có 2 bộ t1, t2r giống nhau ở các thuộc tính của X và khác nhau ở các thuộc tính Z. Do X Y, và r1.X = r2.X nên r1.Y = r2.Y Trang 6/6 Do YZ, và r1.Y = r2.Y nên r1.Z = r2.Z. Ðiều này trái với giả thiết. 4. Các quy tắc suy diễn bổ sung A4: Quy tắc Hợp Nếu X  Y và X  Z thì X  YZ Chứng minh: Do XY, áp dụng tính tãng trýởng ðối với X ta có XXY Do X Z, áp dụng tính tãng trýởng ðối với X ta có XYYZ Áp dụng Tính Bắc Cầu ðối với XXY và XYYZ ta có XYZ A5: Quy tắc Giả Bắc Cầu Nếu X  Y và WY  Z thì XW  Z Ch ứng minh: Do XY, áp dụng tính tãng trýởng ðối với W ta có XWWY Áp dụng Tính Bắc Cầu ðối với XY và WYZ ta có XWZ A6: Quy tắc Phân Rã Nếu X  YZ thì X  Y và X  Z Ch ứng minh: Áp dụng tính phản xạ Hệ quả: nếu X  Y thì X  Ai, Ai  Y 5. Bao ðóng của tập thuộc tính Cho R(U) trong ðó U là tập các thuộc tính. Gọi F là tập phụ thuộc hàm và X là một tập con của U. Bao ðóng của X ứng với F (ký hiệu là X + ) là tập các thuộc tính A sao cho XA ðýợc suy từ F nhờ hệ tiên ðề Armstrong Bổ ðề ể X  Y ðýợc suy từ F nhờ hệ tiên ðề Armstrong nếu và chỉ nếu Y  X + . Chứng minh: Ðặt Y = A1,A2,…,An và giả sử Y  X. Theo ðịnh nghĩa trên, XAi ðýợc suy ra bằng hệ tiên ðề Armstrong với mọi i. Bằng quy tắc hợp, thì XY là ðúng. Ng ýợc lại, giả sử XY ðýợc suy ra từ hệ tiên ðề Armstrong. Bằng quy tắc phân rã ta có XAi ðúng với mọi i. V ậy Y  X + . Trang 7/7 Bài toán thành viênể Procedure MEMBER Va Ìo: tập phụ thuộc hàm F và phụ thuộc hàm XY Ra: Ðúng nếu F |= XY và Sai n ếu ngýợc lại MEMBER(F, XY) Begin If Y  Closure(X,F) then return (True) Else return (False) End Giải thuật tính bao ðóngể Nhập: tập thuộc tính hữu hạn X, tập phụ thuộc hàm F và X U Xu ất: X + , bao ðóng của X ứng với F Ph ýõng pháp: Begin Olddep=  Newdep=X While Newdep <> Olddep do begin Olddep = Newdep For each pth W Z  F do If W  Newdep then Newdep = Newdep  Z End {if} End {for} End {while} End Hệ quả ợể X + là tập các thuộc tính A sao cho F|=XA Hệ quả ồể F + là tập các phụ thuộc ðýợc suy từ F bằng hệ tiên ðề Armstrong. Trang 8/8 C. Khoá của lýợc ðồ quan hệ Cho quan hệ r(R), tập K  R ðýợc gọi là khóa của quan hệ r nếu K + =R và nếu bớt 1 phần tử khỏi K thì K + ≠R. Nhý thế, tập K  R và (K\A) + ≠R,  A  K Nh ận xét:  Một quan hệ có nhiều khóa  Khóa bao hàm (còn gọi là siêu khóa) là một tập chứa khóa. Nói cách khác, khóa là một trýờng hợp ðặc biệt của khóa bao hàm. D. Ph át biểu bài toán Mục ðích chính yếu của bài thu hoạch ðýợc tóm tắt bởi bài toán sau ðây: Cho l ýợc ðồ quan hệ (R,F), trong ðó R là tập các thuộc tính, F là tập các phụ thuộc hàm xác ðịnh trên R. Câu hỏi ðýợc ðặt ra là Tìm tất cả các Khoá của lýợc ðồ quan hệ (R,F). Lucchesi v à Osborn ðã chúng minh ðây là bài toán loại NP-Khó ( NP- complete) (Lucchesi , Osborn : CandidateKeys for Relations - 1978) Trang 9/9 III. Các thuật toán tìm khoá cõ bản A. Qui ýớc cú pháp Ng ôn ngữ tựa Pascal - Hýớng ðối týợng. 1. Kiểu dữ liệu Set ể Kiểu Tập Hợp trong Ðại Số bao gồm các phép toán Ðại số trên Tập Hợp: - M ô tả A là Tập Hợp : A: Set - Ph ép gán tập A vào B: B:=A; - Ph ép Hợp : C là hợp của A và B: C:=A  B; - Ph ép Giao: C là giao của A và B: C:=A  B; - Ph ép Hiệu: C là hiệu của A và B: C:=A - B; - Ðịnh nghĩa A là Tập rỗng: A:=0; - S ố phần tử của tập A: A.SizeOf() ( Hoặc SizeOf(A) ) - T ập hợp chỉ chứa một phần tử thứ i của A: A.BaseOf(i) (Hay BaseOf(i,A)) - Biểu thức logic A rỗng hay không: A!=0 ( Hoặc A<>0) - Bi ểu thức logic A,B khác nhau: A!=B ( Hoặc A<>B) - Bi ểu thức logic A,B bằng nhau: A=B - Bi ểu thức logic A là tập con của B: A  B - Bi ểu thức logic A là tập con của B hay bằng B: A  B 2. Kiểu dữ liệu Setsể Kiểu dãy ( Array ) mỗi phần tử là một Set. Th í dụ : L: Array[1 100] of Set; thì ta gọi L có kiểu Sets. Tr ên kiểu Sets có các phép toán sau: - Ðịnh nghĩa L có zero phần tử: L.Reset(); - Th êm vào L một tập hợp A : L.Add(A) - S ố tập hợp có trong L: L.SizeOf() - T ập hợp thứ i trong L: L.Set(i) - H ủy tập thứ i trong L: L.Sub(i) - Ki ểm tra việc tồn tại X trong L: L.Exist(X) 3. Kiểu dữ liệu ấỏể Biểu diển một phụ thuộc hàm , là gồm 2 tập hợp X và Y trong phụ thuộc hàm có dạng XY. M ô tả f là một phụ thuộc hàm: f: FD - T ập hợp vế trái của f: f.X ( Hay f.X()) - T ập hợp vế phải của f: f.Y ( Hay f.Y()) 4. Kiểu dữ liệu ấỏsể Biểu diển một danh sách các phụ thuộc hàm. M ô tả F là danh sách phụ thuộc hàm : F : FDs - S ố lýợng các phụ thuộc hàm trong F: F.SizeOf() ( Hay SizeOf(F) ) - Kh ởi ðộng F, zero phần tử: F.Reset(); - Ph ụ thuộc hàm thứ i: F.FD(i) - Th êm một phụ thuộc hàm f vào F: F.Add(f) ( F:=F + f) - Thay th ế phụ thuộc hàm thứ I bởi f: F.Replace(I,f); - Hu ỷ bỏ phụ thuộc hàm thứ i: F.Sub(i); ( F:=F – f) Trang 10/10 5. Một số thủ tục ụ hàm cõ bản ể Function Closure(X :Set ; Var F : FDs) : Set; // Tìm bao ðóng của X dựa trên Tập F // T ài liệu tham khảo: Giáo Trình CSDL Nâng Cao – TS. Ðỗ Phúc Var Old,New:Set; W,Z: Set; f: FD; i: Integer; Begin Old:=0; New:=X; While (Old <> New) Begin Old:=New; For i:=1 to F.SizeOf() do Begin f:= F.FD(i); W:=f.X ; Z:=f.Y; if ( W  New) then New:=New  Z; End; End; Return (New) ; End; Procedure AddSuperKey(K: Set; Var Keys: Sets); // Thêm một Super Key vào danh sách Keys // Keys Ch ỉ chứa các SuperKey có kích thýớc nhỏ Var i: Integer; X: Set; Begin For i:=1 to Keys.SizeOf() do Begin X:=Keys.Set(i); If ( K  X) Then Begin Keys.Sub(i) ; i:= i - 1; End; End; Keys.Add(K); End; [...]... Closure(K-L,F) xong 2.3 Bổ ð ởọộ ể ề ồ Cho lýợc ð quan hệ ỮRụấỀụ trong ðó R là tập các thuộc tính và ấ là tập các phụ thuộc hàmọ K là tập gồm các khóa của (R.F) Gọi L là ợ nút láụ ấ_L là tập các phụ thuộc hàm trong ấ mà có vế phải là Lọ ồ ó Ta xây dựng lýợc ð quan hệ ỮR-{L},F-F_L), trong ð R-{L} là tập các thuộc tính và ấ-F_L là tập các phụ thuộc hàmọ ịọi K’ là tập các khóa của ỮR-{L},F-F_L) Ta có K là tập con... 28/28 V Nhận xét - Kết luận Theo nhý chúng ta ð biết , bài toán tìm tất cả các khoá của lýợc ð quan hệ ã ồ (R,F) là bài toán loại NP- Khó Ý týởng chính trong bài thu hoạch này , chúng tôi cố gắng phân hoạch (R,F) thành các lýợc ð quan hệ con sao cho thoả một ồ số tính chất tìm khoá Vì thời gian có hạn chúng tôi chýa có ð kiện ð chi iều ể tiết, hệ thống lại nội dung Hõn nýÞa caìc thuâòt toìan xuâìt phaìt... lệ App_Timer= 34 / 1 Trang 32/32 MỤạ LỤạ Trang Tài liệu tham khảo 2 ầu Lời nói ð 3 Một số khái niệm cõ bản 4 Các thuật tóan tìm khóa cõ bản 9 Quy ýớc về cú pháp 9 Thuật tóan từ trên xuống 11 Thuật tóan từ dýới lên 12 ồ Thuật tóan ð thị 12 Xây dựng một số thuật tóan mới 13 Một số quy ýớc 13 Thuật tóan lọai tập lá 14 Thuật tóan loại tập suy diễn 16 Thuật tóan phân rã 19 Nhận xét và kết luận 29 Trang... vào (i) n (ii) Ta có X=(X-E)  (XE) Hõ nữa trong quá trình tìm khóa ta có thể xuất phát từ tập gốc K’ mà XE  Closure(K’,F) nên ta có thể thay thế XE bởi K’ 3 Tý týởng thuật toán a Từ (R,F) ta biến dạng thành (R1,F1) , trong ð R1 < R ó ó ộ Số các phụ thuộc hàm F1 nhỏ hõn F Do ð ð phức tạp tính toán giảm ð i b Ta tìm tập khoá chặn trên của (R,F) bằng cách tìm tập khoá trên (R1,F1) ể c Ta chỉ cần duyệt... không xuất hiện trong quá trình tìm Closure(K,F) Thực vậy, Thuật toán tìm Bao ðóng chỉ duyệt tìm các f : WZ thoả ðiều kiện Là WClosure(K,F) vì X không là Tập con của Closure(K,F) nên f không ðýợc chọn trong quá trình tìm Closure(K,F) Ta giả sử rằng K là một khoá, tức closure(K,F)=R; Ta sẽ chứng minh rằng Closure(K,F – f)=R Thực vậy, Giã sử rằng: Closure(K,F – f)R, tức là E không có trong Closure(K,F... T.BaseOf(i); T=T-A; FindKeys(G  A,T,R,F,Keys); End; End; IV Xây dựng một số thuật toán mới A Một số qui ýớc : Cho (R,F) là 1 lýợc ð quan hệ, trong ð R là tập các thuộc tính và F là ồ ó tập các phụ thuộc hàm Giả sử F ð ð ã ýợc rút gọn nhý sau : o Chỉ tồn tại các phụ thuộc hàm dạng XA trong ð A là 1 thuộc tính ó của R o Chỉ tồn tại các phụ thuộc hàm không tầm thýờng nghĩa là XA thuộc F thì A không thuộc... mệnh ð D.4 nhý sau: ề 1.4 Mệnh ð D.4 Cho (R,F), gọi R1 là các thuộc tính gốc, R2=R – R1 ề Thì ta phân rã (R,F) thoả mệnh ð D.3 Trang 24/24 3 Tý týởng thuật toán Xét (R,F) là lýợc ð quan hệ Ta có thể cãn cứ vào một số yếu tố của các ồ phụ thuộc hàm trong F , từ ð có thể phân rã (R,F) thành các (R1,F1), ó (R2,F2), (Rn,Fn) thoả mệnh ð D.3 Việc tìm khoá trên từng thành phần ề (Ri,Fi) có ð phức tạp thấp... Trang 11/11 C Thuật toán từ dýới lên Input X:=0; T:= R; Keys.Reset() Output: Keys là Tập các Khoá Procedure FindKeys( X, T, R: Set; Var F: FDs; Var Keys: Sets) Var A: Set; Begin If ( Closure(X,F)=R) Then Begin AddSuperKey(X,Keys); Return ; End; For i:=1 To T.SizeOf() do Begin A:= T.BaseOf(i); T=T-A; FindKeys(XA,T,R,F,Keys); End; End; D Thuật toán ð thị ồ Ðây là thuật toán cải biên từ thuật toán từ dý... ng với F ) nhý sau : õ F’ = F1’  F1”  F2’  F2” trong ðó :  các thành phần là tách biệt  pth XY sao cho Y  R1 và XR2 ðý thay thế ợc bởi f F1”  pth XY sao cho Y  R2 và XR1 ðý thay thế ợc bởi f F2” Thuật toán tính bao ðóng của 1 tập các thuộc tính ðã ðýợc chứng minh là ðúng Ta viết lại thuật toán sao cho vẫn tý ng ðý ngvới õ õ thuật toán cũ nhý sau: Nhậpể tập thuộc tính K, tập phụ... thuộc K, tức Ki là 1 khóa của (R,F) Ta có Ki là con của R-La do nút lá không tham gia vào khóa (bổ ð 2) ề Với XL thuộc F_La ta có Closure(R,F-{XL}) = R-{L} 3 Tý týởng thuật toán a Từ việc xác ð các nút lá ta loại bỏ chúng và các phụ thuộc ịnh hàm liên quan ð chúng Nhý vậy từ (R,F) ð ến ýợc thu hẹp thành (R1,F1) b Sau khi thực hiện býớc a có thể trên (R1,F1) lại xuất hiện 1 tập các nút lá mới khi ð . Môn CSDL Quan Hệ - GS. Lê Tiến Výõng Trang 3/3 I. Lời nói ðầu Qua quá trình học môn cõ sở dữ liệu trýớc ðây, khái niệm về khóa và tìm khóa của một lýợc ðồ quan hệ, chúng tôi chỉ tìm hiểu. cố gắng tìm kiếm vài thuật toán tìm khóa hầu giải quyết một số bài toán trong thực tế có ðộ phức tạp týõng ðối lớn. Do nhu c ầu thực tế, với dữ liệu có số thuộc tính lớn thì việc tìm khóa là. ðộng viên của Thầy, chúng tôi ðã tìm hiểu bài toán Tìm khóa với mong muốn là tìm ðýợc những giải thuật có ðộ phức tạp thấp hõn so với giải thuật tìm khóa chuẩn. Trong b ài thu hoạch này, chúng

Ngày đăng: 30/07/2015, 11:03

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan