Bài tập liên quan đến hàm kết hợp và gom nhóm

Một phần của tài liệu Đề cương bài giảng học phần: Cơ sở dữ liệu (2014 - 2015) (Trang 102 - 144)

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 XY, trong đó X,YU.

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 XY, 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> (adsbygoogle = window.adsbygoogle || []).push({});

Nếu f= XY 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=XY 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((XY)   u, vR, 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 XY đƣợ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 (XU) 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, YU, YX, thì XY

2) Tính chất bắc cầu:  X, Y, ZU, nếu có XY và YZ thì XZ3) 3) Tính chất gia tăng:  X, YU, nếu X Y và  ZU thì XZYZ

4) Tính chất tựa bắc cầu:  X, Y, Z, W U, nếu XY, YZ W thì XZW 5) Tính chất phản xạ chặt:  XU thì XX

6) Luật tách:  X, Y, Z U, nếu có XYZ thì có:

7) Luật hợp  X, Y, Z U, nếu có X Y và XZ thì có XYZ

8) Tính chất cộng tính:  X, Y, Z, W U, nếu XY, Z W thì XZYW

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. (adsbygoogle = window.adsbygoogle || []).push({});

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, vR, 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)

XY XZ

Chứng minh (4)

Từ XY theo tính chất gia tăng thì XZYZ (1) mặt khác theo giả thiết thì YZW (2) từ (1) và (2) theo tính chất bắc cầu thì XZW

Chứng minh (6)

Ta luôn có

Mặt khác theo giả thiết có XYZ

Từ (1), (2) và (3) theo tính chất bắc cầu thì

Chứng minh (7)

Từ XY theo tính chất gia tăng thì XXY (1) Từ XZ theo tính chất gia tăng thì XYYZ (2) Từ (1) và (2) theo tính chất bắc cầu thì XYZ

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 XY (1) và R thoả mãn phụ thuộc hàm ZW (2), cần chứng minh R thoả mãn phụ thuộc hàm XZYW (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ừ XY theo tính chất gia tăng thì XZYZ (1) Từ ZW theo tính chất gia tăng thì YZYW (2) Từ (1) và (2) theo tính chất bắc cầu thì XZYW

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 XY thì phụ thuộc hàm YX 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 XZ (adsbygoogle = window.adsbygoogle || []).push({});

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ì fF* (đ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 fG* 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 fG* (đ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ì FF* (2) Từ (1) và (2) suy ra R(F) (3)

Từ (1) và (3) suy ra F ╞f hay fF* 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,YU, nếu YX thì XY 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ó XY thì XZYZ

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.

XY

- 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+ . (adsbygoogle = window.adsbygoogle || []).push({});

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 XY thay cho XY F+

và F├ (XY).

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, XU, 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 | AU và XAF+ }

Nhận xét với một tập F cho trƣớc ta luôn có: -X+U

- X, Y U, YX, thì XY F+

- fF thì fF+, suy ra FF+ , tơng tự  fF thì fF*, suy ra FF* - X, Y, Z U, nếu XYF+

và YZF+

thì XZF+ -XU, AX+

khi và chỉ khi XAF+

Một số tính chất của bao đóng của tập thuộc tính 1. Phản xạ XU thì XX+

2. Tính đơn điệu X, YU, nếu XY thì X+Y+ 3. X+XF+ và XX+F+

4. Tính luỹ đẳng ((X)+

)+= X+ 5. (X+Y)+= (XY+)+=(XY)+

6. XYF+ khi và chỉ khi YX+ hay XY 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 XYZ  F+ (1), ta cần chứng minh

YZZ  F+

(4) do luật phản xạ

Từ (1) và (4) theo tính chất bắc cầu có XZ  F+ Hoàn toàn tƣơng tự YZY F+

(5) ( theo tính chất phản xạ) từ (1) và (5) theo tính chất bắc cầu thì XY F+

b) Ta chứng minh chiều ngƣợc “”, giả thiết nếu có

Ta sẽ chứng minh XYZ  F+ (adsbygoogle = window.adsbygoogle || []).push({});

Từ (2) suy ra XZYZ (4) ( theo tính chất gia tăng ) Từ (3) suy ra XXZ (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 XYZ

Chứng minh 1)

Với  A  X suy ra {A}X, suy ra XA  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 XA  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 YA  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 XX+  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 )

XY  F+ XZ  F+ XY  F+ (2) XZ  F+ (3) XY  F+ (2) XZ  F+ (3)

Suy ra X A1A2… An  F+ ( theo luật hợp ) Nhƣng do X+= A1A2… An nên suy ra XX+  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ó XX+  F+ (**), từ (*) và (**) suy ra XA  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 XY  F+ X+ Y  F+ ( luật pản xạ) X X+ (tính chất 3) X Y  F+ b) Nếu có XY  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 XY 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 XY  F+ và YXF+ 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à YY+ nên theo tính chất bắc cầu thì YX

Hoàn toàn tƣơng tự cũng có XY - Chứng minh chiều ngƣợc “”

Từ XY và YX ta cần chứng minh X+ (adsbygoogle = window.adsbygoogle || []).push({});

= Y+ thật vậy XY suy ra Y X+ suy ra Y+ X++ =X+ hay Y+ X+ (1) Hoàn toàn tƣơng tự từ YX 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 | XA  F+ }

Vấn đề đặt ra X+

F =X+=?

Thuật toán

Input  = (U,F), XU 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) ( i0) 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.

Một phần của tài liệu Đề cương bài giảng học phần: Cơ sở dữ liệu (2014 - 2015) (Trang 102 - 144)