intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: Chu Văn Thắng Doremon | Ngày: | Loại File: PDF | Số trang:0

110
lượt xem
13
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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ệ...

Chủ đề:
Lưu

Nội dung Text: Cơ sở dữ liệu - bài 4

  1. Cơ sở dữ liệu ThS. Lê Văn Lợi Bài 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. Product Restrict project a x a x b y a y c b x b y c x c y Union Intersection Difference Divide Join x x a y y z a1 b1 b1 c1 a1 b1 c1 x a2 b2 b2 c2 a2 b2 c2 y a3 b3 b3 c3 a3 b3 c3 Hình 1: Tổng quan về các toán tử quan hệ Bai-4.doc *** Trang 1
  2. Cơ sở dữ liệu ThS. Lê Văn Lợi ■ 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) Cho kết quả là một quan hệ gồm tất cả các tuple của quan hệ gốc Restrict thỏa mãn một điều kiện cho trước. Cho kết quả là một quan hệ gồm tất cả các bản ghi của quan hệ Project gốc, nhưng loại trừ một số trường. Cho kết quả là một quan hệ gồm tất cả các trường và tất cả các Product 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. Cho kết quả là một quan hệ gồm tất cả các bản ghi nằm ở trong Union 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. Cho kết quả là một quan hệ mà các bản ghi nằm trong quan hệ Difference thứ nhất nhưng lại không nằm trong quan hệ thứ hai. Cho kết quả là một quan hệ. Chú ý rằng hai quan hệ gốc phải có Join 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. Trong phép chia ta có quan hệ bị chia và quan hệ chia . Quan hệ Divide 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). Trong đại số quan hệ, người ta không thể thực hiện một phép Chú ý: 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. Bai-4.doc *** Trang 2
  3. Cơ sở dữ liệu ThS. Lê Văn Lợi ■ 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 B s_id sname status city s_id sname status city S1 Smith 20 London S1 Smith 20 London S2 Jones 10 Paris S4 Clark 20 London Union s_id sname status city S1 Smith 20 London (A UNION B) S4 Clark 20 London S2 Jones 10 Paris Intersection s_id sname status city S1 Smith 20 London (A INTERSECT B) Difference (A MINUS B) (B MINUS A) s_id sname status city s_id sname status city S2 Jones 10 Paris S4 Clark 20 London Bai-4.doc *** Trang 3
  4. Cơ sở dữ liệu ThS. Lê Văn Lợi ■ Tích Đề-các Giả thiết ta có cấu trúc của bảng A là { a1, a2, ..., am } và cấu trúc của bảng B là { b1, b2, ..., bn }, thì cấu trúc của tích sẽ là: { a1, a2, ..., am , b1, b2, ..., bn } trong đó ai, bj 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ư =, ≠, >, ≥,
  5. Cơ sở dữ liệu ThS. Lê Văn Lợi s_id sname status city S1 Smith 2 0 London S4 Clark 2 0 London VD2: part WHERE weight < 14 p_id pname color weight city P1 Nut Red 1 2 London P5 Cam Blue 1 2 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 Bai-4.doc *** Trang 5
  6. Cơ sở dữ liệu ThS. Lê Văn Lợi ■ Toán tử Join Giả thiết ta có cấu trúc của bảng A là { a1, a2, ..., am ,c1, c2, ..., cp} và cấu trúc của bảng B là { c1, c2, ..., cp ,b1, b2, ..., bn }, thì cấu trúc của kết quả liên kết JOIN sẽ là: { a1, a2, ..., am , c1, c2, ..., cp, b1, b2, ..., bn } trong đó ai, bj là các trường của bảng A và B và ck là các trường chung cho cả A và B sao cho các giá trị ck của bảng A bằng các giá trị ck 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 2 0 London P1 Nut Red 12 S4 Clark 2 0 London P1 Nut Red 12 S2 Jones 1 0 Paris P2 Bolt Green 17 S3 Blake 3 0 Paris P2 Bolt Green 17 S1 Smith 2 0 London P4 Screw Red 14 S4 Clark 2 0 London P4 Screw Red 14 S2 Jones 1 0 Paris P5 Cam Blue 12 S3 Blake 3 0 Paris P5 Cam Blue 12 S1 Smith 2 0 London P6 Cog Red 19 S4 Clark 2 0 London P6 Cog Red 19 ■ Toán tử θ-Join Khi sử dụng toán tử JOIN như trên, các cột c1, c2, ..., cp, đượ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. Bai-4.doc *** Trang 6
  7. Cơ sở dữ liệu ThS. Lê Văn Lợi 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 1 2 London S3 Blake 30 Paris P1 Nut Red 1 2 London S5 Adams 30 Athens P1 Nut Red 1 2 London S1 Smith 20 London P2 Bolt Green 1 7 Paris S4 Clark 20 London P2 Bolt Green 1 7 Paris S5 Adams 30 Athens P2 Bolt Green 1 7 Paris S1 Smith 20 London P3 Screw Blue 1 7 Rome S2 Jones 10 Paris P3 Screw Blue 1 7 Rome S3 Blake 30 Paris P3 Screw Blue 1 7 Rome S4 Clark 20 London P3 Screw Blue 1 7 Rome S5 Adams 30 Athens P3 Screw Blue 1 7 Rome S2 Jones 10 Paris P4 Screw Red 1 4 London S3 Blake 30 Paris P4 Screw Red 1 4 London S5 Adams 30 Athens P4 Screw Red 1 4 London S1 Smith 20 London P5 Cam Blue 1 2 Paris S4 Clark 20 London P5 Cam Blue 1 2 Paris S5 Adams 30 Athens P5 Cam Blue 1 2 Paris S2 Jones 10 Paris P6 Cog Red 1 9 London S3 Blake 30 Paris P6 Cog Red 1 9 London S5 Adams 30 Athens P6 Cog Red 1 9 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). Bai-4.doc *** Trang 7
  8. Cơ sở dữ liệu ThS. Lê Văn Lợi Giả thiết ta có cấu trúc của bảng A là { a1, a2, ..., am ,c1, c2, ..., cp} và cấu trúc của bảng C là { c1, c2, ..., cp }, thì cấu trúc của kết quả A DIVIDEBY B sẽ là { a1, a2, ..., am } trong đó ai là các trường của bảng A và ck là các trường chung cho cả A và C sao cho tất cả các giá trị cvk của bảng C xuất hiện trong bảng A (avi,cvk) một cách tương ứng (cvk là ký hiệu giá trị của ck ). ■ 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] Bai-4.doc *** Trang 8
  9. Cơ sở dữ liệu ThS. Lê Văn Lợi 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ị b iể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 Bai-4.doc *** Trang 9
  10. Cơ sở dữ liệu ThS. Lê Văn Lợi 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 3 600 P2 Bolt Green 17 Paris 3 400 P3 Screw Blue 17 Rome 6 800 P4 Screw Red 14 London 2 800 P5 Cam Blue 12 Paris 1 200 P6 Cog Red 19 London 1 900 P1 Nut Red 12 London 3 600 P2 Bolt Green 17 Paris 6 800 P2 Bolt Green 17 Paris 3 400 P2 Bolt Green 17 Paris 3 400 P4 Screw Red 14 London 4 200 P5 Cam Blue 12 Paris 4 800 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 2 0 London 6 S2 Jones 1 0 Paris 2 S3 Blake 3 0 Paris 1 S4 Clark 2 0 London 3 S5 Adams 3 0 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; B ai-4.doc *** Trang 10
  11. 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 sp BY (p_id) ADD SUM(qty) AS total_qty cho kết quả là bảng với các thuộc tính {p_id, total_qty} trong đó SUM là hàm tổng. Phép tính trên tính tổ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ảng sp. Kết quả là: grandtotal 3 100 Ghi nhớ: Câu lệnh SQL tương đương SELECT SUM(qty) AS 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 np S1 6 S2 2 S3 1 S4 3 Ghi nhớ: Câu lệnh SQL tương đương B ai-4.doc *** Trang 11
  12. 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 giá trị vào các quan hệ. Các phép toán này có tên gọi là các toán tử gán (assignment). target := source trong đó, target và source là các quan hệ cùng loại, nghĩa là chúng có cấu trúc giống nhau. ■ Toán tử INSERT Cú pháp hình thức: INSERT source INTO target; VD: INSERT (supplier WHERE city = 'London') into temp; ■ 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; B ai-4.doc *** Trang 12
  13. 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 (A và B là các bảng, dấu ≡ là dấu tương đương): ≡ A MINUS (A MINUS B) 1. A INTERSECT B ≡ B MINUS (B MINUS A) 2. A INTERSECT B ≡ A JOIN B 3. A INTERSECT 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): Restriction trên b ảng A a. Một phép chiếu (Projection) trên bảng A b. c. A TIMES B d. A UNION B e. A INTERSECT B f. A MINUS B g. A JOIN B h. A DIVIDEBY B Toán tử Extend trên A i. Toán tử Summarize trên A j. 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”. B ai-4.doc *** Trang 13
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2