1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

13 221 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 203,78 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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.. ■ Giải thích Hình 1: trong ph

Trang 1

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),

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ệ

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

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

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

Trang 4

■ 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ư =, ≠, >, ≥, <, ≤,

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'

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

Trang 6

■ 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 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 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

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)

Trang 8

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]

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- m0 r2ng

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

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;

Trang 11

■ 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

3100

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

Trang 12

SELECT s_id, COUNT(*) AS np FROM sp GROUP BY s_id;

3./ Các toán t3 c4p nh4t

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;

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

HÌNH ẢNH LIÊN QUAN

Hình  1: Tổng quan về các toán tử quan hệ - Cơ sở dữ liệu - bài 4 doc
nh 1: Tổng quan về các toán tử quan hệ (Trang 1)
Hỡnh  2: Cỳ phỏp hỡnh thức của ủại số quan hệ - Cơ sở dữ liệu - bài 4 doc
nh 2: Cỳ phỏp hỡnh thức của ủại số quan hệ (Trang 3)

TỪ KHÓA LIÊN QUAN

w