Các thuật toán tìm khóa trong cơ sở dữ liệu quan hệ
Trang 1ÐẠỤ ỷỌạ QUỐạ ịỤự TỷÀNỷ PỷỐ ỷỒ ạỷÍ MỤNỷ
-
ÐỀ TÀỤể
Trang 2T ÀI LIỆU THAM KHẢO
- 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
Trang 3I 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 4II 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
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 XY là một phụ thuộc hàm X,Y U
Ta nói F khẳng định logic XY (viết là F|=XY) nếu mỗi quan hệ r của R
thỏa các phụ thuộc trong F thì cũng thỏa XY
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+= { XY | F|=XY }
Trang 53 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
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ụ
Xét A3:
Giả sử quan hệ r thỏa XY và YZ, và có 2 bộ t1, t2r giống nhau
ở các thuộc tắnh của X và khác nhau ở các thuộc tắnh Z
Do XY, và r1.X = r2.X nên r1.Y = r2.Y
Trang 6Do YZ, 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ì XYZ
Ch ứng minh:
Do XY, áp dụng tắnh tãng trýởng đối với X ta có XXY
Do XZ, áp dụng tắnh tãng trýởng đối với X ta có XYYZ
Áp dụng Tắnh Bắc Cầu đối với XXY và XYYZ ta có XYZ
A5: Quy t ắc Giả Bắc Cầu
N ếu X Y và WY Z thì XWZ
Ch ứng minh:
Do XY, áp dụng tắnh tãng trýởng đối với W ta có XWWY
Áp dụng Tắnh Bắc Cầu đối với XY và WYZ ta có XWZ
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 XY thì XAi, AiY
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
XA đýợ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, XAi
đýợc suy ra bằng hệ tiên đề Armstrong với mọi i Bằng quy tắc hợp, thì
XY là đúng
Ngýợc lại, giả sử XY đýợc suy ra từ hệ tiên đề Armstrong Bằng quy
Trang 7B ài toán thành viênể
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
Olddep = Newdep For each pth WZ F do
Trang 8C Kho á của lýợc đồ quan hệ
Cho quan hệ r(R), tập KR đýợ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 KR và (K\A) +≠R, AK
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á
Trang 9III 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: AB
- Biểu thức logic A là tập con của B hay bằng B: AB
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 XY
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 105 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
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ỏ
Trang 11Function CheckKey( X , R : Set; Var F: FDs) : Boolean;
// Ki ểm tra một SuperKey có phải là Key hay không
If (Closure(X – X.BaseOf(i), F) = R ) then
Return (False);
Return (True);
End;
B Thu ật toán từ trên xuống
Input ban ðầu : X=R ; Keys.Reset();
OutPut : Keys là Tập các Khoá trên ( R,F )
Procedure FindKeys(X , R: Set; Var F: FDs; Var Keys: Sets)
Var
T: Set;
I: Integer;
Begin
If ( Keys.Exist(X) ) Then return;
AddSuperKey(X, Keys); // X là SuperKey
End;
Ðộ phức tạp: Tính trên số lần thực hiện Hàm Closure
Trang 12C 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
Đây là thuật toán cải biên từ thuật toán từ dýới lên
Input G là Tập nút gốc, T: Tập các nút trung gian
Tập nút gốc đýợc tắnh trên thuật toán sau:
G:= (R Ờ ( _XX _YY)) ( _XX - _YY);
Tập T các nút trung gian đýợc xác định sau:
T:= ( R Ờ ( _YY - _XX) ) Ờ G;
Trong đó _XX, _YY đýợc tắnh nhý sau:
Procedure SumXY( Var _XX, _YY : Set ; Var F: FDs)
Trang 13Procedure FindKeys( G, T, R: Set; Var F: FDs; Var Keys: Sets)
For i:=1 To T.SizeOf() do
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 XA 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à XA thuộc
F thì A không thuộc X
Ph ép Chiếu:
Cho (R,F), Cho R1 l à tập con của R
Ta g ọi (R1,F1) là kết quả của phép chiếu (R,F) trên tập R1 nếu và chỉ
n ếu
F1={ X Y thuộc F ; trong đó XY thuộc R1 }
Ta g ọi (R1,F1) là kết quả của phép chiếu mở rộng (R,F) trên tập R1
n ếu và chỉ nếu
F1={ f : X Y trong đó f thoả các điều kiện (a), (b) }
(a): N ếu f:XY thuộc F , trong XY thuộc R1 thì f thuộc F1
(b): N ếu f:XY thuộc F, trong đó Y thuộc R1, X không thuộc
R1, X R1<>
Th ì Phụ thuộc hàm XR1 Y thuộc F1
Ph ụ thuộc hàm dý thừa đối với việc tìm khoá:
Ph ụ thuộc hàm f đýợc gọi là dý thừa trong việc tắnh toán xác định
Kho á của (R,F)
t ức là Nếu K là khoá của (R,F) thì K cũng là Khoá của (R,F Ờ f)
Danh s ách Tập hợp chặn trên: Cho K,L l à Danh sách các Tập hợp
T ức K,L là kiểu Sets
Trang 14L đýợc gọi là Tập Chặn Trên của K nếu nhý mọi phần tử của K đều
l à phần tử của L
B Thu ật toán loại Tập Lá
1 Kh ái niệm ể Tập ịốcụ Lá và Trung gian
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 Trên R ta xây dựng các tập thuộc tắnh sau :
- N út gốc ể
Cho G là 1 thuộc tắnh thuộc R, G đýợc gọi là nút gốc nếu :
với mọi XA thuộc F thì A <> G
- N út lá ể
Cho L là 1 thuộc tắnh thuộc R, L đýợc gọi là nút lá nếu :
với mọi XA thuộc F thì L không thuộc X
N ếu K là một khoá của (R,F) thì G K ( G là tập con của K)
T ức là Nút gốc phải tham gia vào các khóa
Chứng minh : Cho G là 1 thuộc tắnh thuộc tập Goc
Vì K là khóa nên có phụ thuộc hàm KG thuộc Closure(F)
Nếu G không thuộc K mâu thuẩn với định nghĩa G là thuộc tắnh
Trang 15Nếu Closure(K-L,F) = R thì L không thuộc K vì nếu ngýợc lại sẽ
trái với giả thiết K là khoá
Nếu Closure(K-L,F) <> R
Xét Closure(K-L,F) :
Nếu X thuộc Closure(K-L,F) xong
Nếu X không thuộc 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 của
a Từ việc xác định các nút lá ta loại bỏ chúng và các phụ thuộc
hàm liên quan đến chúng Nhý vậy từ (R,F) đýợ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 đó ta tiếp tục lặp lại býớc a
c Khi không còn phát sinh nút lá mới, ta sẽ tìm khoá trên (R1,F1) sau đó duyệt trên tập các khoá vừa tìm đýợc để cho ra các khóa
của (R,F)
4 X ây dựng thuật toán
Procedure Projection(Var R1: Set; Var F1, F: FDs) Begin
Trang 16Procedure RemoveLeaf(Var R: Set; Var F: FDs) Var XX,YY:Set;
F1: FDs;
Begin
L:=R;
While ( L <> 0) do Begin
SumXY(XX,YY,F);
L:=YY – XX; // L l à tập nút Lá
If ( L<>0) Then
Begin R:=R – L; // Loại bỏ các nút Lá
Cho (R,F), R l à tập các thuộc tính, F là tập các phụ thuộc hàm
Cho K l à tập con của R , ðặt E:= Closure(K,F) - K
E g ọi là Tập Suy diễn từ K
Gi ả sử KE<> tức tồn tại thuộc tính A KE
V ì A E và E= Closure(K’,F) – K’ nên A Closure(K’,F)
Trang 17E l à thuộc tắnh suy diễn từ K
N ếu f: XE , trong đó X không là tập con của Closure(K,F)
Th ì f là dý thừa trong việc tìm khoá có chứa K
Ch ứng Minh:
Ta s ẽ chứng minh rằng: Closure (K,F) = (Closure(K,F Ờ f)
Hay f: XE 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 : WZ tho ả điều kiện
L à WClosure(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 Ờ f) Vì theo nhý chứng minh trên E phải thuộc
Gi ã sữ rằng không tồn tại trong F các phụ thuộc hàm có dạng
f: XEi trong đó Ei thuộc tập E, X không là tập con của
Closure(K Ỗ,F)
Ta thay đổi F nhý sau:
(i) V ới mọi f: XY thu ộc F, YE thì thu gọn F:=F Ờ f
(ii) V ới mọi f:XY thu ộc F, XE<> thì thay f bằng
(X-E) KỖY
F sau khi thay đổi ta gọi là F1
Th ì khoá của (R,F) cũng là khoá của (R Ờ E,F1)
Trang 18Ch ứng Minh:
Do m ệnh ðề C.4 nên ta có thể áp dụng vào (i)
(ii) Ta c ó X=(X-E) (XE) H õn nữa trong quá trình tìm khóa
ta c ó thể xuất phát từ tập gốc K’ mà XE Closure(K’,F) nên ta
c Ta chỉ cần duyệt tuyến tính trên danh sách Khoá chặn trên ðể
chỉ ra danh sách khoá của (R,F)
d Việc loại bỏ các phụ thuộc hàm dý thừa trong việc xác ðịnh khoá, có thể tìm ra các nút Lá mới và ta có thể thu hẹp R1 ðýợc nhỏ hõn nữa
e Sau mỗi býớc tìm một khoá, Tập Trung Gian T ðýợc thu hẹp nhanh
Tức là nếu G dự kiến là Tập thuộc tính tham gia khoá, thì : T:= T – Closure(G,F); là tập trung gian mới
4 X ây dựng thuật toán chuẩn
Procedure FindKeys( G, T, R: Set; Var F: FDs; Var Keys: Sets) Var
A,C : Set;
Begin
C:= Closure(G,F);
If ( C=R) Then Begin AddSuperKey(G,Keys); Return ;
End;
T:= T – C; // Loại Tập Suy Diễn Bổ ðề C.1
For i:=1 To T.SizeOf() do
Trang 19D Thu ật toán phân rã
1 Kh ái niệm
Cho 3 danh s ách kiểu Sets : L1, L2 và L
Ta định nghĩa phép toán X trên Sets nhý sau: L:= L1 L2
- V ới mọi Tập A thuộc L1 thì L:= L A Tức là L.Add(A)
- V ới mọi Tập B thuộc L2 thì L:= L B Tức là L.Add(B)
- V ới mọi Tập A thuộc L1, Tập B thuộc L2 thì : L:= L (AB )
Ta thấy rằng tập khoá K của (R,F) là:
K={ AC, AD,AE, BC,BD,BE }
Nếu ta đặt R1=AB và F1= { AB; BA }
Và R2=CDE và F2= { CD; DE; EC }
Gọi L1 là tập khoá của (R1,F1) L1={A,B}
Gọi L2 là tập khoá của (R2,F2) L2={ C,D,E } Đặt L:= L1 L2
Thì L= { A,B,C,D,E, AC,AD,AE,BC,BD,BE }
Nhận xét là KL tức L là tập chặn trên của K
Các thuật toán tìm tất cả các Khoá của (R,F) có độ phức tạp là số lần
thực hiện hàm tắnh Bao Đóng của các tập X nào đó : Closure(X,F)
Với thắ dụ 2 nói trên , có 6 khoá , Giả sữ Độ phức tạp là 6
Với (R1,F1) có độ phức tạp là 2
Với (R2,F2) có độ phức tạp là 3
Để tìm L , ta có độ phức tạp là 2 + 3 = 5 (nhỏ hõn 6, chú ý là: 6 = 2*3)
Vấn đề đýợc đặt ra là : Nếu có một phép phân rã (R,F) thành (R1,F1) và (R2,F2) sau cho K1 K2 là tập chặn trên của K thì độ phức tạp tắnh
toán cho việc tìm tất cả các khoá trên (R,F) đýợc giảm thiểu nhiều lần
Ghi ch ú : K là tập các khoá của (R,F), K1 là tập các khoá của (R1,F1) ,
K2 l à tập các khoá của (R2,F2)