Cơ sở dữ liệu - bài 4 doc

13 220 0
Cơ sở dữ liệu - bài 4 doc

Đ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ơ sở dữ liệu ThS. Lê Văn Lợi Bai-4.doc *** Trang 1 B B à à i i 4 4 1./ S lc v ñi s quan h TS. Codd, khi ñề xuất mô hình quan hệ ñã ñặt vấn ñề về các phép toán giữa các quan hệ với nhau và ñó ñược xem là bản gốc của ñại số quan hệ ( Relational Algebra ). ■ Các phép toán cổ ñiển gồm: union (hợp), intersection (giao), difference (hiệu), và Cartesian product (tích Đề các). ■ Các phép toán ñặc biệt gồm: restrict (trích), project (chiếu), join (ghép), và divide (chia) Như vậy có tổng tất cả là 8 toán tử. Chú ý rằng các toán hạng của ñại số quan hệ ñều là các bảng. Hình 1: Tổng quan về các toán tử quan hệ Restrict project Union Intersection Difference a b c x y a a b b c c x y x y x y Product a1 a2 a3 b1 b2 b3 Join c1 c2 c3 b1 b2 b3 a1 a2 a3 b1 b2 b3 c1 c2 c3 x y x y z x y Divide a Cơ sở dữ liệu ThS. Lê Văn Lợi Bai-4.doc *** Trang 2 ■ Giải thích Hình 1: (trong phần này các quan hệ toán hạng ñược gọi là quan hệ gốc) Restrict Cho kết quả là một quan hệ gồm tất cả các tuple của quan hệ gốc thỏa mãn một ñiều kiện cho trước. Project Cho kết quả là một quan hệ gồm tất cả các bản ghi của quan hệ gốc, nhưng loại trừ một số trường. Product Cho kết quả là một quan hệ gồm tất cả các trường và tất cả các bản ghi của các quan hệ gốc. Kết quả gồm tất cả các tổ hợp của hai quan hệ gốc. Union Cho kết quả là một quan hệ gồm tất cả các bản ghi nằm ở trong hai quan hệ ñó (các quan hệ gốc có cấu trúc giống nhau). Intersection Cho kết quả là một quan hệ mà các bản ghi phải thuộc vào cả hai quan hệ gốc. Difference Cho kết quả là một quan hệ mà các bản ghi nằm trong quan hệ thứ nhất nhưng lại không nằm trong quan hệ thứ hai. Join Cho kết quả là một quan hệ. Chú ý rằng hai quan hệ gốc phải có một hoặc nhiều trường chung. Quan hệ kết quả gồm tất cả các trường riêng của các quan hệ gốc, cộng với các trường chung của chúng. Các bản ghi của quan hệ kết quả là các bản ghi có giá trị trong các trường chung giống nhau. Divide Trong phép chia ta có quan hệ bị chia và quan hệ chia . Quan hệ bị chia phải có một hoặc nhiều trường phủ lên quan hệ chia. Quan hệ kết quả gồm các trường của quan hệ bị chia nhưng không chung với các trường của quan hệ chia. Các bản ghi của quan hệ kết quả là các bản ghi sao cho các giá trị các trường chung trong quan hệ bị chia xuất hiện một cách tương ứng ở tất cả các bản ghi của quan hệ chia (xem ví dụ trong Hình 1). Chú ý: Trong ñại số quan hệ, người ta không thể thực hiện một phép toán lên các quan hệ bất kỳ. Ví dụ, trong phép union, các quan hệ toán hạng phải có cấu trúc giống nhau cả về số lượng các trường, cả về miền giá trị của các trường ñó và cả về tên của trường. Cơ sở dữ liệu ThS. Lê Văn Lợi Bai-4.doc *** Trang 3 ■ Cú pháp hình thức của ñại số quan hệ expression ::= monadic-expression | dyadic expression monadic-expression ::= renaming | restriction | projection renaming ::= term RENAME atrtribute AS attribute term ::= relation | (expression) restriction ::= term WHERE condition projection ::= term | term [ attribute-commalist ] dyadic-expression ::= projection dyadic-operation expression dyadic-operation ::= UNION | INTERSECT | MINUS | TIMES | JOIN | DIVIDEBY Hình 2: Cú pháp hình thức của ñại số quan hệ ■ Ví dụ về các toán tử Union, Intersection, Difference A s_id sname status city S1 Smith 20 London S4 Clark 20 London B s_id sname status city S1 Smith 20 London S2 Jones 10 Paris Union (A UNION B) s_id sname status city S1 Smith 20 London S4 Clark 20 London S2 Jones 10 Paris Intersection (A INTERSECT B) s_id sname status city S1 Smith 20 London Difference (A MINUS B) s_id sname status city S4 Clark 20 London (B MINUS A) s_id sname status city S2 Jones 10 Paris Cơ sở dữ liệu ThS. Lê Văn Lợi Bai-4.doc *** Trang 4 ■ Tích Đề-các Giả thiết ta có cấu trúc của bảng A là { a 1 , a 2 , , a m } và cấu trúc của bảng B là { b 1 , b 2 , , b n }, thì cấu trúc của tích sẽ là: { a 1 , a 2 , , a m , b 1 , b 2 , , b n } trong ñó a i , b j là các trường của bảng A và B. Một trong các vấn ñề phát sinh ñối với bảng tích, ñó là tên của các trường. Trong CSDL quan hệ, trong một bảng, tên các trường không ñược trùng nhau. Khi gộp lại các trường trong bảng tích sẽ có trường hợp tên trường trùng nhau. Để giải quyết vấn ñề này người ta sinh ra một toán tử mới có tên là RENAME (ñặt tên – xem phần cú pháp hình thức). Mục tiêu của toán tử này này là ñể ñặt lại tên trường trong trường hợp tên các trường của bảng tích trùng nhau. Cũng cần lưu ý thêm là trong thực tế, tich Đề-các rất ít ñược sử dụng. ■ Toán tử Restriction Toán tử restriction còn gọi là toán tử θ -restriction , trong ñó θ là các toán tử so sánh như =, ≠ , >, ≥ , <, ≤ , Cho bảng A, các thuộc tính (trường) X, Y, phép toán: A WHERE X θ Y cho một bảng có các thuộc tính giống với các thuộc tính của bảng A sao cho biểu thức ñiều kiện X θ Y cho giá trị true (ñúng). Ngoài lề: Các biểu thức so sánh cho lại kết quả là một trong hai giá trị: true (ñúng) hoặc false (sai). Trong phần ñiều kiện X θ Y ta có thể thay X hoặc Y bằng các giá trị: A WHERE X θ literal A WHERE literal θ Y VD1: supplier WHERE city = 'London' Cơ sở dữ liệu ThS. Lê Văn Lợi Bai-4.doc *** Trang 5 s_id sname status city S1 Smith 20 London S4 Clark 20 London VD2: part WHERE weight < 14 p_id pname color weight city P1 Nut Red 12 London P5 Cam Blue 12 Paris VD3: sp WHERE s_id = 'S1' AND p_id = 'P1' s_id p_id qty S1 P1 300 ■ Toán tử Projection Phép chiếu của quan hệ A lên các thuộc tính x, y, z, viết là: A [x, y, , z] cho một quan hệ với các thuộc tính x, y, z và ứng với tất cả các bản ghi của A. VD1: supplier [city] city London Paris Athens VD2: part [color, city] color city Red London Green Paris Blue Rome Blue Paris VD3: (supplier WHERE city='London') [s_id] s_id S1 S4 Cơ sở dữ liệu ThS. Lê Văn Lợi Bai-4.doc *** Trang 6 ■ Toán tử Join Giả thiết ta có cấu trúc của bảng A là { a 1 , a 2 , , a m , c 1 , c 2 , , c p } và cấu trúc của bảng B là { c 1 , c 2 , , c p ,b 1 , b 2 , , b n }, thì cấu trúc của kết quả liên kết JOIN sẽ là: { a 1 , a 2 , , a m , c 1 , c 2 , , c p , b 1 , b 2 , , b n } trong ñó a i , b j là các trường của bảng A và B và c k là các trường chung cho cả A và B sao cho các giá trị c k của bảng A bằng các giá trị c k trong bảng B một cách tương ứng. Toán tử JOIN theo kiểu này gọi là JOIN tự nhiên (NATURAL JOIN). VD: supplier JOIN part s_id sname status city p_id pname color weight S1 Smith 20 London P1 Nut Red 12 S4 Clark 20 London P1 Nut Red 12 S2 Jones 10 Paris P2 Bolt Green 17 S3 Blake 30 Paris P2 Bolt Green 17 S1 Smith 20 London P4 Screw Red 14 S4 Clark 20 London P4 Screw Red 14 S2 Jones 10 Paris P5 Cam Blue 12 S3 Blake 30 Paris P5 Cam Blue 12 S1 Smith 20 London P6 Cog Red 19 S4 Clark 20 London P6 Cog Red 19 ■ Toán tử θ-Join Khi sử dụng toán tử JOIN như trên, các cột c 1 , c 2 , , c p , ñược so sánh với toán tử = . Câu hỏi ñặt ra là liệu có thể sử dụng các toán tử so sánh khác không. Câu trả lời ñương nhiên là ñược. Toán tử JOIN trong trường hợp này gọi là θ-Join. Người ta thay thế toán tử θ-Join bằng biểu thức sau: (A TIMES B) WHERE x θ y trong ñó x là một trường của A và y là một trường của B và liên kết là liên kết x θ y. Cơ sở dữ liệu ThS. Lê Văn Lợi Bai-4.doc *** Trang 7 Giả thiết ta muôn kết nối hai bảng supplier và part sao cho city trong supplier khác với city trong part (ngược lại với ví dụ trên). Ta có thể lập biểu thức sau: ( (supplier RENAME city AS scity) TIMES (part RENAME city AS pcity) ) WHERE scity ≠ pcity s_id sname status scity p_id pname color weight pcity S2 Jones 10 Paris P1 Nut Red 12 London S3 Blake 30 Paris P1 Nut Red 12 London S5 Adams 30 Athens P1 Nut Red 12 London S1 Smith 20 London P2 Bolt Green 17 Paris S4 Clark 20 London P2 Bolt Green 17 Paris S5 Adams 30 Athens P2 Bolt Green 17 Paris S1 Smith 20 London P3 Screw Blue 17 Rome S2 Jones 10 Paris P3 Screw Blue 17 Rome S3 Blake 30 Paris P3 Screw Blue 17 Rome S4 Clark 20 London P3 Screw Blue 17 Rome S5 Adams 30 Athens P3 Screw Blue 17 Rome S2 Jones 10 Paris P4 Screw Red 14 London S3 Blake 30 Paris P4 Screw Red 14 London S5 Adams 30 Athens P4 Screw Red 14 London S1 Smith 20 London P5 Cam Blue 12 Paris S4 Clark 20 London P5 Cam Blue 12 Paris S5 Adams 30 Athens P5 Cam Blue 12 Paris S2 Jones 10 Paris P6 Cog Red 19 London S3 Blake 30 Paris P6 Cog Red 19 London S5 Adams 30 Athens P6 Cog Red 19 London ■ Toán tử chia Trong phép chia ta có quan hệ bị chia và quan hệ chia . Quan hệ bị chia phải có một hoặc nhiều trường phủ lên quan hệ chia. Quan hệ kết quả gồm các trường của quan hệ bị chia nhưng không chung với các trường của quan hệ chia. Các bản ghi của quan hệ kết quả là các bản ghi sao cho các giá trị các trường chung trong quan hệ bị chia xuất hiện một cách tương ứng ở tất cả các bản ghi của quan hệ chia (xem ví dụ trong Hình 1). Cơ sở dữ liệu ThS. Lê Văn Lợi Bai-4.doc *** Trang 8 Giả thiết ta có cấu trúc của bảng A là { a 1 , a 2 , , a m , c 1 , c 2 , , c p } và cấu trúc của bảng C là { c 1 , c 2 , , c p }, thì cấu trúc của kết quả A DIVIDEBY B sẽ là { a 1 , a 2 , , a m } trong ñó a i là các trường của bảng A và c k là các trường chung cho cả A và C sao cho tất cả các giá trị cv k của bảng C xuất hiện trong bảng A (av i ,cv k ) một cách tương ứng ( cv k là ký hiệu giá trị của c k ). ■ Các ví dụ ứng dụng ñại số quan hệ VD1. Tìm tên các nhà cung cấp bán loại phụ tùng mã số P2: ( (sp JOIN supplier) WHERE p_id='P2') [ sname ] Giải thích: Toán tử NATURAL JOIN nối sp với supplier thông qua trường s_id (xem lại cấu trúc của các bảng supplier, sp). Từ kết quả này, phần tiếp theo chỉ lấy ra các tuple sao cho giá trị của p_id là P2. Sau ñó ta dùng phép chiếu và chỉ lấy ra thuộc tính sname. (Tham khảo kết quả dưới ñây.) sname Smith Jones Blake Clark Ghi nhớ: Câu lệnh SQL tương ñương: SELECT DISTINCT supplier.sname FROM supplier NATURAL JOIN sp WHERE sp.p_id = 'P2'; VD2. Tìm tên các nhà cung cấp bán các loại phụ tùng mầu ñỏ (Red) ( ( ( part WHERE color = 'Red' ) JOIN sp ) [s_id] JOIN supplier) [sname] hoặc tương ñương: ( ( ( part WHERE color = 'Red' ) [p_id] JOIN sp ) JOIN supplier) [sname] Cơ sở dữ liệu ThS. Lê Văn Lợi Bai-4.doc *** Trang 9 Giải thích: (SV ghi chép tại lớp) Ghi nhớ: Câu lệnh SQL tương ñương SELECT DISTINCT supplier.sname FROM sp, part, supplier WHERE sp.p_id = part.p_id AND supplier.s_id = sp.s_id AND part.color='Red'; VD3. Tìm tên các nhà cung cấp bán tất cả các loại phụ tùng ( ( sp [s_id, p_id] DIVIDEBY part [p_id] ) JOIN supplier [sname] Giải thích: Phép chiếu sp [s_id, p_id] lập bảng mới chỉ lấy hai trường từ bảng sp , tạm gọi bảng này là A. Phép chiếu part [p_id] lập bảng mới chỉ lấy trường p_id , tạm gọi bảng này là C. Kết quả là lấy A chia cho C, ghép với supplier và chỉ lấy trường sname của bảng kết quả. Thực chất ý nghĩa của phép toán trên là tìm các nhà cung cấp sao cho mã số của nhà cung cấp ñó xuất hiện ở tất cả các bản ghi của bảng phụ tùng. 2./ Đi s quan h m rng Người ta nhận thấy 8 toán tử do TS. Codd ñề ra lúc ñầu là chưa ñủ và cần mở rộng. Sau ñây là một số các toán tử mở rộng. ■ Toán tử Extend Các toán tử ñề cập trong các phần trước ñều chỉ có thể lấy giá trị các trường gốc. Nếu ta muốn hiển thị biểu thức của một hoặc nhiều trường thì các phép toán ñó chưa cho phép. Ví dụ ta có bảng A(ma_so, ten, so_luong, don_gia) và ta muon hiển thị biểu thức so_luong * don_gia . Phép toán Extend lấp chỗ trống cho vấn ñề còn thiếu này. Ta có thể bổ sung vào cú pháp hình thức cho toán tử Extend: Extend term ADD scalar-expression AS attribute Giải thích cú pháp: (SV ghi chép tại lớp) VD1. Xem thêm một thuộc tính: trọng lượng các mặt hàng trong kho: EXTEND (part JOIN sp) ADD (weight * qty) AS store_weight Cơ sở dữ liệu ThS. Lê Văn Lợi Bai-4.doc *** Trang 10 Câu lệnh trên cho kết quả là bảng sau: p_id pname color weight city store_weight P1 Nut Red 12 London 3600 P2 Bolt Green 17 Paris 3400 P3 Screw Blue 17 Rome 6800 P4 Screw Red 14 London 2800 P5 Cam Blue 12 Paris 1200 P6 Cog Red 19 London 1900 P1 Nut Red 12 London 3600 P2 Bolt Green 17 Paris 6800 P2 Bolt Green 17 Paris 3400 P2 Bolt Green 17 Paris 3400 P4 Screw Red 14 London 4200 P5 Cam Blue 12 Paris 4800 Ghi nhớ: Câu lệnh SQL tương ñương SELECT part.*, weight*qty AS store_weight FROM part NATURAL JOIN sp; VD2. Xem số lượng các loại phụ tùng trong kho của từng nhà cung cấp EXTEND supplier ADD COUNT ((sp RENAME s_id AS x) WHERE x = s_id) AS np; Chú ý hàm tính theo nhóm có tên là COUNT. Hàm này ñếm các loại phụ tùng trong bảng sp ứng với từng bản ghi của supplier . Câu lệnh trên cho kết quả là bảng sau: s_id sname status city np S1 Smith 20 London 6 S2 Jones 10 Paris 2 S3 Blake 30 Paris 1 S4 Clark 20 London 3 S5 Adams 30 Athens 0 Ghi nhớ: Câu lệnh SQL tương ñương SELECT supplier.*, count(supplier.s_id = sp.s_id) AS np FROM supplier LEFT JOIN sp ON supplier.s_id = sp.s_id GROUP BY s_id; [...]... Toán t UPDATE Cú pháp hình th c: UPDATE target assignment-commalist; trong ñó, m i m t assignment có d ng: attribute := scalar-expression VD: UPDATE part WHERE color = 'Red' city := 'Paris'; ■ Toán t DELETE Cú pháp hình th c: DELETE target; VD: DELETE supplier WHERE status < 20; Bai -4 . doc *** Trang 12 Cơ s d li u ThS Lê Văn L i 4. / Bài t p Bài t p 4. 1 – Xem các m nh ñ sau ñúng trong nh ng ñi u ki n nào... trên A Toán t Summarize trên A Bài t p 4. 4 – Gi i nghĩa phép tính ñ i s quan h sau: ( ( supplier [s_id] MINUS (sp WHERE p_id = 'P2') [s_id] JOIN supplier ) [sname] Bài t p 4. 5 – Tìm phép tính ñ i s quan h cho “Tìm tên các nhà cung c p có Status l n hơn ho c b ng 20” Bài t p 4. 6 – Tìm phép tính ñ i s quan h cho “Tìm tên các nhà cung c p bán các lo i ph tùng ñ t Paris” Bai -4 . doc *** Trang 13 ... grandtotal FROM sp; VD2 Tính t ng theo nhóm SUMMARIZE sp BY (s_id) ADD COUNT AS np; Câu l nh trên ñ m s lo i ph tùng theo t ng nhà cung c p K t qu là: s_id S1 np 6 S2 2 S3 1 S4 3 Ghi nh : Câu l nh SQL tương ñương Bai -4 . doc *** Trang 11 Cơ s d li u ThS Lê Văn L i SELECT s_id, COUNT(*) AS np FROM sp GROUP BY s_id; 3./ Các toán t c p nh t Có th nói, m t ph n c a ñ i s quan h là các phép toán cho phép nh p... là d u tương ñương): 1 A INTERSECT B ≡ A MINUS (A MINUS B) 2 A INTERSECT B ≡ B MINUS (B MINUS A) 3 A INTERSECT B ≡ A JOIN B Bài t p 4. 2 – Trong tính toán thông thư ng, nhân và chia là các phép tính ñ o ngư c c a nhau Trong ñ i s quan h , ñi u này có ñúng không? Gi i thích Bài t p 4. 3 – Xem xét s bi n ñ i khóa trong các trư ng h p sau (A và B là các b ng): a b c d e f g h i j Restriction trên b ng A M... ng các lo i ph tùng trong kho và k t qu là b ng g m 2 trư ng: mã ph tùng (p_id) và t ng s lư ng c a lo i ph tùng ñó (total_qty) Cú pháp hình th c c a SUMMARIZE: SUMMARIZE term BY (attribute-commalist) ADD aggregate-expression AS attribute; Gi i thích cú pháp: (SV ghi chép t i l p) VD1 Tính t ng toàn b SUMMARIZE sp BY () ADD SUM (qty) AS grandtotal; Câu l nh trên tính t ng c a trư ng qty trên toàn b.. .Cơ s d li u ThS Lê Văn L i ■ Toán t Summarize Khác v i toán t Extend là cho phép tính toán các giá tr trên cùng m t b n ghi, toán t Summarize cho phép tính toán trên m t nhóm các b n ghi Ví d : SUMMARIZE . target; VD: DELETE supplier WHERE status < 20; Cơ sở dữ liệu ThS. Lê Văn Lợi Bai -4 . doc *** Trang 13 4. / Bài tp Bài tập 4. 1 – Xem các mệnh ñề sau ñúng trong những ñiều kiện. status city S4 Clark 20 London (B MINUS A) s_id sname status city S2 Jones 10 Paris Cơ sở dữ liệu ThS. Lê Văn Lợi Bai -4 . doc *** Trang 4 ■ Tích Đề-các Giả thiết. Cơ sở dữ liệu ThS. Lê Văn Lợi Bai -4 . doc *** Trang 1 B B à à i i 4 4 1./ S lc v ñi s quan h TS. Codd, khi

Ngày đăng: 31/07/2014, 14:20

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan