17. HÀM KẾT HỢP VÀ GOM NHÓM, MỘT SỐ TRUY VẤN KHÁC
17.4. Bài tập liên quan đến hàm kết hợp và gom nhóm
17.5. Một số dạng truy vấn khác
17.5.1. Truy vấn con ở mệnh đề From
Ví dụ: trong cơ sở dữ liệu quản lý vật tƣ, chúng ta muốn hiển thị tên những nhân viên đã xuất vật tƣ trong ngày „12/08/2008‟, câu lệnh truy vấn sau sẽ thực hiện yêu cầu trên.
SELECT nv.ten_nv FROM nhan_vien As nv, (SELECT manv_xuat FROM phieu_xuat WHERE ngay_xuat = „08/12/2008‟) As Temp
WHERE nv.ma_nv = Temp.manv_xuat
17.5.2. Điều kiện kết nối ở mệnh đề From
Kết quả trả về của một câu truy vấn phụ là một bảng
- Bảng trung gian trong quá trình truy vấn
- Không có lƣu trữ thật sự
Cú pháp SELECT <danh sách các cột>
FROM R1, R2, (<truy vấn con>) AS tên_bảng
a. Kết nối bằng
INNER JOIN : trả về tất cả các hàng từ hai bảng khi điều kiện đƣợc so trùng. Nếu các hàng trong bảng R1 không so trùng trong bảng R2, hàng đó sẽ không đƣợc chọn ra.
b. Kết nối ngoài
1.
LEFT JOIN: Trả về tất cả các hàng từ bảng thứ nhất R1, cho dù nó không đƣợc so trùng trong bảng thứ hai R2. Nếu các hàng trong bảng R1 không so trùng trong bảng
R2, những hàng này cũng đƣợc liệt kê (thay thế bởi giá trị NULL).
RIGHT JOIN: Trả về tất cả các hàng từ bảng thứ nhất R2, cho dù nó không đƣợc so trùng trong bảng thứ hai R1. Nếu các hàng trong bảng R2 không so trùng trong bảngR1, những hàng này cũng đƣợc liệt kê (thay thế bởi giá trị NULL).
17.6. Các bài tập liên quan đến một số dạng truy vấn khác
18. THỰC HÀNH HÀM KẾT HỢP VÀ GOM NHÓM
19. THỰC HÀNH MỘT SỐ DẠNG TRUY VẤN KHÁC
20. KIỂM TRA THỰC HÀNH
21. PHỤ THUỘC HÀM 21.1. Khái niệm
Phụ thuộc hàm (functional dependency) là khái niệm nhằm mô tả các ràng buộc dữ liệu. Phƣơng pháp biểu diễn này có rất nhiều ƣu điểm và nó đƣợc xem là một lớp phụ thuộc dữ liệu đơn giản nhất do E.F.Codd đề xuất năm 870.
Định nghĩa 1: Cho U là một tập thuộc tính, một phụ thuộc hàm trên U là một phát biểu có dạng XY, trong đó X,YU.
Cho R là quan hệ trên tập thuộc tính U, nói rằng quan hệ R thỏa mãn phụ thuộc hàm XY, nếu với 2 bộ bất kì trong R mà chúng giống nhau trên tập thuộc tính X thì chúng cũng giống nhau trên tập thuộc tính Y, nghĩa là u,v R, nếu u.X=v.X thì u.Y=v.Y
SELECT <danh sách các cột>
FROM R1 [INNER] JOIN R2 ON <biểu thức>
WHERE <điều kiện>
SELECT <danh sách các cột>
FROM R1 LEFT|RIGHT [OUTER] JOIN R2 ON <biểu thức>
Nếu f= XY là một phụ thuộc hàm trên U thì ta nói tập thuộc tính Y phụ thuộc hàm vào tập thuộc tính X (Y functional dependent on X ) hoặc tập thuộc tính X xác định hàm tập thuộc tính Y (X functional determines Y). Nếu Y không phụ thuộc hàm vào X thì ta viết X!Y.
Cho f=XY là một phụ thuộc hàm trên U, nếu quan hệ R thỏa mãn phụ thuộc hàm f thì ta ký hiệu R(f) hoặc R nếu R không thỏa mãn phụ thuộc hàm thì ta ký hiệu R(f). Nhƣ vậy nếu R((XY) u, vR, nếu u.X=v.X thì u.Y=v.Y.
Cho F là một tập các phụ thuộc hàm trên U, nói rằng quan hệ R thỏa mãn tập phụ thuộc hàm F, ký hiệu là R(F) nếu và chỉ nếu với f F thì R(f) hay nói một cách tƣơng đƣơng quan hệ R thỏa mãn tập phụ thuộc hàm F nếu nhƣ nó thỏa mãn từng phụ thuộc hàm trong tập đó, hay R(F) f F thì R(f).
Ví dụ 1:
Cho lƣợc dồ quan hệ Q(ABCDE), r là quan hệ xác định trên Q đƣợc cho nhƣ sau: A B C D E a1 b1 c1 d1 e1 a1 b2 c2 d2 e1 a2 b1 c3 d3 e1 a2 b1 c4 d3 e1 a3 b2 c3 d1 e1
Những phụ thuộc hàm nào sau đây thoả r?
A D; AB D; E A; A E; Giải:
AB D; A E;
Cách xác định phụ thuộc hàm cho lược đồ quan hệ
Cách duy nhất để xác định đúng các phụ thuộc thích hợp cho một lƣợc đồ quan hệ là xem xét nội dung tân từ của lƣợc đồ quan hệ đó.
Chẳng hạn với lƣợc đồ cơ sở dữ liệu về sinh viên, thì phụ thuộc hàm ứng với từng lƣợc đồ quan hệ đƣợc xác định nhƣ sau:
MASV HOTENSV, NU, NGAYSINH, MALOP, TINH
MALOP TENLOP, MAKHOA; MAKHOA TENKHOA
MAMH TENMH, DONVIHT; MASV, MAMH, LANTHI DIEMTHI
Định nghĩa 2: Lƣợc đồ quan hệ là một cặp =(U, F) trong đó U là tập hữu hạn các thuộc tính còn F là tập các phụ thuộc hàm trên U.
Định nghĩa 3: Cho U là một tập thuộc tính X, Y U, nếu Y X thì phụ thuộc hàm XY đƣợc gọi là phụ thuộc hàm hiển nhiên.
1. Cho U là một tập thuộc tính, ký hiệu n=| U|, suy ra số các tập con của U là 2n (tính cả tập rỗng)
2. Nếu X U thì phụ thuộc hàm X đúng trên mọi quan hệ R của U.
3. Phụ thuộc hàm X (XU) chỉ đúng trên các quan hệ có cùng giá trị trên tập thuộc tính X.
4. Số các phụ thuộc hàm trên U có thể có là 2n * 2n =12n (tính cả phụ thuộc hàm X và X)
21.2. Một số tính chất của phụ thuộc hàm
Định lý: Lớp phụ thuộc hàm trên U thỏa mãn các tính chất sau: 1) Tính chất phản xạ: X, YU, YX, thì XY
2) Tính chất bắc cầu: X, Y, ZU, nếu có XY và YZ thì XZ3) 3) Tính chất gia tăng: X, YU, nếu X Y và ZU thì XZYZ
4) Tính chất tựa bắc cầu: X, Y, Z, W U, nếu XY, YZ W thì XZW 5) Tính chất phản xạ chặt: XU thì XX
6) Luật tách: X, Y, Z U, nếu có XYZ thì có:
7) Luật hợp X, Y, Z U, nếu có X Y và XZ thì có XYZ
8) Tính chất cộng tính: X, Y, Z, W U, nếu XY, Z W thì XZYW
Tính đúng đắn của các biểu thức trên đƣợc hiểu nhƣ sau: với 1 quan hệ bất kỳ trên U, nếu quan hệ đó thỏa mãn các phụ thuộc hàm ở phần giả thiết thì quan hệ đó cũng phải thỏa mãn các phụ thuộc hàm ở phần kết luận, việc chứng minh các tính chất trên đƣợc dựa vào định nghĩa của phụ thuộc hàm.
Chứng minh:
- Tính chất 1, 2 và 5 là hiển nhiên.
Chứng minh 3) Giả sử quan hệ R thỏa mãn phụ thuộc hàm X Y (1), ta cần chứng minh quan hệ R thỏa mãn phụ thuộc hàm XZ YZ (2)
(2) nghĩa là cần chỉ ra với 2 bộ bất kỳ u, vR, mà nếu u.XZ=v.XZ (3) thì u.YZ=v.YZ (4)
Nhận xét:
-Với 2 bộ bất kì giống nhau trên tập lớn thì hai bộ đó chúng cũng giống nhau trên tập con của tập thuộc tính đó.
-Nếu 2 bộ giống nhau trên 2 tập thuộc tính thì chúng cũng giống nhau trên tập thuộc tính là hợp của 2 thuộc tính ấy.
Từ nhận xét trên ta thấy:
Từ (3) suy ra u.X=v.X (5) và u.Y=v.Y (6) Từ (5) và (1) suy ra u.Y=v.Y (7)
Từ (6) và (7) suy ra u.YZ=v.YZ ( đpcm)
XY XZ
Chứng minh (4)
Từ XY theo tính chất gia tăng thì XZYZ (1) mặt khác theo giả thiết thì YZW (2) từ (1) và (2) theo tính chất bắc cầu thì XZW
Chứng minh (6)
Ta luôn có
Mặt khác theo giả thiết có XYZ
Từ (1), (2) và (3) theo tính chất bắc cầu thì
Chứng minh (7)
Từ XY theo tính chất gia tăng thì XXY (1) Từ XZ theo tính chất gia tăng thì XYYZ (2) Từ (1) và (2) theo tính chất bắc cầu thì XYZ
Chứng minh 8) tính chất 8 nghĩa là với quan hệ R bất kỳ mà R thoả mãn XY (1) và R thoả mãn phụ thuộc hàm ZW (2), cần chứng minh R thoả mãn phụ thuộc hàm XZYW (3), biểu thức (3) có nghĩa là với 2 bộ u, v bất kỳR, ta có u.ZX=v.ZX (4), ta cần chứng minh u.YW=v.YW (5)
Từ (4) ta suy ra
Do (6) và (1) suy ra u.Y=v.Y (8) Do (7) và (2) suy ra u.W=v.W (9)
Từ (8) và (9) suy ra u.YW=v.YW, suy ra điều phải chứng minh Tính chất 8 còn có thể chứng minh đơn giản nhƣ sau:
Từ XY theo tính chất gia tăng thì XZYZ (1) Từ ZW theo tính chất gia tăng thì YZYW (2) Từ (1) và (2) theo tính chất bắc cầu thì XZYW
Nhận xét: Cho X, Y là hai tập con của tập thuộc tính U khi đó: 1. Phụ thuộc hàm X đúng trên mọi quan hệ.
2. Phụ thuộc hàm Y chỉ đúng trên quan hệ R gồm tất cả các bộ có giá trị giống hệt nhau trên tập Y.
3. Nếu XY thì phụ thuộc hàm YX luôn đúng trên mọi quan hệ. Phụ thuộc hàm này còn đƣợc gọi là phụ thuộc hàm hiển nhiên. Trong thực tế khi xét các ràng buộc dữ liệu trên quan hệ ta thƣờng loại bỏ các phụ thuộc hàm hiển nhiên.
21.3. Định nghĩa suy dẫn theo quan hệ
Cho F là một tập các phụ thuộc hàm trên tập thuộc tính U, f là một phụ thuộc hàm trên U, (f có thể không thuộc F), nói rằng f đƣợc suy dẫn từ tập F theo quan hệ và kí hiệu F ╞f, nếu và chỉ nếu với mọi quan hệ R trên U, nếu R thỏa mãn F thì R cũng thỏa mãm f.
Ký hiệu F* là tập tất cả các phụ thuộc hàm đƣợc suy dẫn đƣợc từ tập F theo quan hệ. u.X=v.X (6)
u.Z=v.Z (7)
X Y XZ
F*={f: XY | X,YU, F╞f}
Nếu phụ thuộc hàm f không thỏa suy dẫn đƣợc từ tập phụ thuộc hàm F theo quan hệ thì ta ký hiệu F!╞f.
Tính chất của F*:
Cho F và G là hai tập phụ thuộc hàm trên tập thuộc tính U khi đó ta có:
1. Tính phản xạ: Với f F thì F ╞f từ đây ta suy ra F F*.
2. Tính đơn điệu: Nếu F G thì F* G*.
3. Tính lũy đẳng: Với mọi tập phụ thuộc hàm F thì ta luôn có (F*)*=F*.
Chứng minh:
1. Lấy f là một phụ thuộc hàm bất kì thuộc F ta cần chứng minh f F*. Thật vậy do f F nên nếu R(F) thì R(f) do vậy theo định ngĩa về suy dẫn theo quan hệ thì fF* (đpcm).
2. Lấy f là một phụ thuộc hàm bất kì thuộc F* ta cần chứng minh fG* nếu F G. Thật vậy:
- Nếu R(G) thì R(F) do F G (1). - R(f) do f F* (2).
Từ (1) và (2) suy ra R(G) và R(f) hay fG* (đpcm).
3. Để chứng minh (F*)* =F* ta cần chứng minh (F*)* F* (a) và F* (F*)* (b) Chứng minh (b) Theo tính chất 1thì F F* đồng thời theo tính chất đơn điệu thì F* (F*)* vậy (b) đƣợc chứng minh.
Chứng minh (a) để chứng minh (1) ta lấy một phụ thuộc f bất kì của (F*)* ta cần chứng minh f F*. Thật vậy do f(F*)* nên F*╞f tức là nểu R là một quan hệ bất kỳ mà R(F*) thì R(f) (1).
Mặt khác theo tính chất phản xạ thì FF* (2) Từ (1) và (2) suy ra R(F) (3)
Từ (1) và (3) suy ra F ╞f hay fF* vậy (a) đƣợc chứng minh. Từ (a) và (b) suy ra tính chất (3) đƣợc chứng minh.
21.4. Hệ tiên đề Amstrong (Armstrong’s Axioms)
F1 : Luật phản xạ: với X,YU, nếu YX thì XY F2 : Luật bắc cầu với X, Y, Z U nếu có
F3 : Luật gia tăng với X, Y, Z U, nếu có XY thì XZYZ
Ngƣời ta đã chứng minh đƣợc 3 luật nêu trên lập thành một tiên đề, tức là chúng độc lập, đầy đủ và phi mẫu thuẫn.
- Tính chất độc lập đƣợc hiểu theo nghĩa ta không thể suy ra một luật nào đó từ các luật còn lại.
XY
- Tính đầy đủ đƣợc hiểu theo nghĩa: nếu một quan hệ thỏa mãn phụ thuộc hàm f thì f có thể nhận đƣợc từ F sau một số hữu hạn lần áp dụng các luật của hệ tiên đề Amstrong.
- Tính phi mâu thuẫn đƣợc hiểu theo nghĩa ta không thể suy ra đƣợc hai phụ thuộc hàm mâu thuẫn nhau từ hệ tiên đề Amstrong.
21.5. Định nghĩa suy dẫn theo hệ tiên đề Amstrong
Cho F là tập phụ thuộc hàm trên U, f là một phụ thuộc hàm trên U( f có thể không thuộc tập F), nói rằng f suy dẫn đƣợc từ F theo hệ tiên đề Amstrong và ký hiệu là F├ f nếu và chỉ nếu f có thể nhận đƣợc từ tập F sau một số hữu hạn lần áp dụng các luật của hệ tiên đề Amstrong.
Ký hiệu F+ là tập tất cả các phụ thuộc hàm đƣợc suy từ tập F theo hệ tiên đề Amstrong.
Nhận xét:
1. Với f F thì F├ f.
2. Với mọi tập phụ thuộc hàm F trên U thì F F+ .
F+ đƣợc gọi là bao đóng của tập phụ thuộc hàm F. Nếu F+ =F thì ta nói F là một tập đầy đủ các phụ thuộc hàm hoặc F là tập đóng.
Sau này ta sẽ chứng minh F*=F+
Quy ƣớc giản lƣợc: ta viết XY thay cho XY F+
và F├ (XY).
21.6. Bao đóng của tập thuộc tính (closures of attribute sets)
Cho F là tập các phụ thuộc hàm trên tập thuộc tính U, XU, bao đóng của tập thuộc tính X đối với tập phụ thuộc hàm F, kí hiệu là X+ (hoặcXF) nó đƣợc đinh nghĩa nhƣ sau:
X+= { A | AU và XAF+ }
Nhận xét với một tập F cho trƣớc ta luôn có: -X+U
- X, Y U, YX, thì XY F+
- fF thì fF+, suy ra FF+ , tơng tự fF thì fF*, suy ra FF* - X, Y, Z U, nếu XYF+
và YZF+
thì XZF+ -XU, AX+
khi và chỉ khi XAF+
Một số tính chất của bao đóng của tập thuộc tính 1. Phản xạ XU thì XX+
2. Tính đơn điệu X, YU, nếu XY thì X+Y+ 3. X+XF+ và XX+F+
4. Tính luỹ đẳng ((X)+
)+= X+ 5. (X+Y)+= (XY+)+=(XY)+
6. XYF+ khi và chỉ khi YX+ hay XY suy dẫn đƣợc từ F khi và chỉ khi Y X+
Chứng minh
Để chứng minh các tính chất trên trƣớc tiên ta chứng minh một mênh đề sau:
Mệnh đề: Với X, Y, Z U thì X YZ F+
khi và chỉ khi
Việc chứng minh mệnh đề này đƣợc dựa vào hệ tiên đề Amstrong
a) Ta chứng minh chiều thuận “”, giả thiết XYZ F+ (1), ta cần chứng minh
YZZ F+
(4) do luật phản xạ
Từ (1) và (4) theo tính chất bắc cầu có XZ F+ Hoàn toàn tƣơng tự YZY F+
(5) ( theo tính chất phản xạ) từ (1) và (5) theo tính chất bắc cầu thì XY F+
b) Ta chứng minh chiều ngƣợc “”, giả thiết nếu có
Ta sẽ chứng minh XYZ F+
Từ (2) suy ra XZYZ (4) ( theo tính chất gia tăng ) Từ (3) suy ra XXZ (5) ( theo tính chất gia tăng ) Từ (4) và (5) và từ tính chất bắc cầu suy ra XYZ
Chứng minh 1)
Với A X suy ra {A}X, suy ra XA X+ suy ra X X+
Chứng minh 2)
Với A X+ cần chỉ ra A Y+ nếu X Y do A X+
suy ra XA F+ (1) do X Y nên Y X F+
(2)
từ (1) và (2) và tính chất bắc cầu suy ra YA F+ (3), từ (3) suy ra A Y+
Chứng minh 3)
Theo tính chất (1) ta có X X+ nên suy ra X+ X F+ Giả sử X+
= { A1, A2, … An}
Ta cần chứng minh XX+ F+ thật vậy Do Ai X+ , i=1..n Nên
X A1 F+ ( theo định nghĩa về bao đóng ) X A2 F+ ( theo định nghĩa về bao đóng ) ...
X An F+
( theo định nghĩa về bao đóng )
XY F+ XZ F+ XY F+ (2) XZ F+ (3) XY F+ (2) XZ F+ (3)
Suy ra X A1A2… An F+ ( theo luật hợp ) Nhƣng do X+= A1A2… An nên suy ra XX+ F+ Chứng minh 4) Để chứng minh (X+ )+ = X+ ta chứng minh (X+ )+ X+ và (X+ )+ X+ Theo tính chất 1 ta có (X+ )+ X+ Ta cần chứng minh (X+ )+ X+
A X++ khi và chỉ khi X+ A F+ (*), mặt khác theo tính chất 3 ta có XX+ F+ (**), từ (*) và (**) suy ra XA F+ ( theo tính chất bắc cầu) Suy ra A X+ , suy ra X++ X+ Từ X++ X+ và X+ X++ suy ra X++ =X+ Chứng minh 5)
Chứng minh chiều thuận: do X+ X, suy ra X+ Y XY, suy ra (X+ Y)+ (XY)+ ( do tính chất đơn điệu)
Chứng minh chiều ngƣợc
Do X XY nên X+ (XY)+ suy ra X+Y (XY)+ Y =(XY)+ Suy ra (X+Y)+ (XY)++= (XY)+
Từ chiều thuận và chiều ngƣợc suy ra (X+
Y)+ = (XY)+ Hoàn toàn tƣơng tự cho các đẳng thức khác
Chứng minh 6) a) Giả sử có Y X+ ta cần chứng minh XY F+ X+ Y F+ ( luật pản xạ) X X+ (tính chất 3) X Y F+ b) Nếu có XY F+ ta cần chứng minh Y X+ Ta viết Y= B1, B2 ,.., Bn , suy ra Y Bi ( i=1..n)
Mặt khác XY nên theo tính chất bắc cầu suy ra X Bi ( i=1..n), suy ra Bi X+, suy ra Y X+
Chứng minh 7) Để chứng minh tính chất này ta phải chứng minh cả hai chiều: - Chứng minh chiều thuận “”
Nếu X+=Y+ ta cần chứng minh XY F+ và YXF+ thật vậy: X+=Y+ khi và chỉ khi X+Y+ và X+Y+
Do X X+ mà X+Y+ nên X Y+ nên suy ra Y+X mà YY+ nên theo tính chất bắc cầu thì YX
Hoàn toàn tƣơng tự cũng có XY - Chứng minh chiều ngƣợc “”
Từ XY và YX ta cần chứng minh X+
= Y+ thật vậy XY suy ra Y X+ suy ra Y+ X++ =X+ hay Y+ X+ (1) Hoàn toàn tƣơng tự từ YX suy ra X+ Y+
(2) Từ (1) và (2) suy ra Y+= X+
21.6.1. Thuật toán tìm bao đóng của một tập thuộc tính
Cho lƣợc đồ quan hệ = (U, F), X U X+ :={ A U | XA F+ }
Vấn đề đặt ra X+
F =X+=?
Thuật toán
Input = (U,F), XU Output X+ =?
Thuật toán
Ta xác định dãy X(0)
, X(1), X(2),... theo quy nạp nhƣ sau 1. Đặt X(0)
=X
2. Giả sử rằng đã xây dựng đƣợc đến bƣớc thứ i tức là đã biết X(i) ( i0) 3. Xây dựng tiếp bƣớc i+1 nhƣ sau
X(i+1)= X(i) Z(i) trong đó Z(i) = Rj với điều kiện :
Vì vậy Z(i)
chính là hợp của các vế phải của các phụ thuộc hàm trong tập F mà có vế trái là tập con của tập trƣớc và có vế phải chƣa đƣợc thêm vào.
Điều kiện (3) chỉ có tác dụng tăng tốc độ tính toán.