3.1.1. Định nghĩa
Định nghĩa: Một đại số quan hệ là một cặp α = < M, F> trong đó: + M là một cơ sở dữ liệu quan hệ.
+ F là tập các phép toán: Chọn, chiếu, hợp, giao, trừ, chia, kết nối, tích Đề các.
3.1.2. Các phép toán Đại số quan hệ a) Phép chọn (Selection) a) Phép chọn (Selection)
Định nghĩa: Cho quan hệ r xác định trên tập thuộc tính U={A1,A2,.., An}. E là biểu thức logic phát biểu trên tập U. Ta nói rằng bộ t∈ r thoả biểu thức E nếu khi thay mọi thuộc tính Ai trong E bằng giá trị t[Ai] ta được một biểu thức logic nhận giá trị đúng. E được gọi là điều kiện chọn hay biểu thức chọn.
Các phép toán trong E có thể bao gồm:
STT Phép toán Ý nghĩa Mức ưu tiên
1 ¬ Phủđịnh (NOT) 1
STT Phép toán Ý nghĩa Mức ưu tiên 3 ≥ Lớn hơn hoặc bằng 2 4 < Nhỏ hơn 2 5 ≤ Nhỏ hơn hoặc bằng 2 6 ≠ Khác 2 7 = Bằng 2 8 ∧ Phép hội (AND) 3 9 ∨ Phép tuyển (OR) 4
Ví dụ:Cho quan hệ Khachhang như sau:
MaKH TenKH DiachiKH DienthoaiKH
KH01 Lê Thanh Tâm Hà Nội 04.6829716 KH02 Nguyễn Quốc Trọng Hà Nội 04.6648719 KH03 Lê Thị Mơ Thanh Hoá 037.666888 KH04 Nguyễn Thanh Nam Nghệ An 038.856350 KH05 Phan Quốc Anh Hà Nội 04.5963964 KH06 Đỗ Văn Phúc Thanh Hoá 037.666889 KH07 Lê Minh Hương Nghệ An 038.855200 KH08 Phạm Thanh Tâm Hà Tĩnh 039.845906
Khi đó bộ t = (MaKH='KH03', TenKH ='Lê Thị Mơ', DiaChiKH = 'Thanh Hoá', DThoaiKH = '037.666888' ) ∈ KHACHHANG
thoả biểu thức:
E: (TenKH ='Lê Thị Mơ') ∧ (DiaChiKH='Thanh Hoá') Thật vậy, ta có:
t[TenKH]='Lê Thị Mơ' t[DiaChiKH]='Thanh Hoá'
Khi thay TênKH bởi t[TenKH] và DiachiKH bởi t[DiaChiKH] trong biểu thức E ta thu được
('Lê Thị Mơ' ='Lê Thị Mơ')∧('Thanh Hoá'='Thanh Hoá')
là biểu thức đúng.
Định nghĩa: Cho quan hệ r trên tập thuộc tính U và biểu thức chọn E phát biểu trên U. Phép chọn trên quan hệ r theo điều kiện E, ký hiệu σE(r) cho ta một quan hệ với tập thuộc tính U và các bộ là các bộ của r thoả điều kiện E.
Cách viết: σE(r) = {t | t∈r ∧ E(t)=đúng}
Trong đó E(t) là giá trị của biểu thức E khi thay mọi thuộc tính Ai trong E của t bởi t[Ai].
Ví dụ: Cho quan hệ r như sau:
r ( A B C D ) a1 b1 1 d1 a2 b2 5 d2 a3 b3 3 d3 a4 b4 1 d4 a1 b2 2 d5 và biểu thức E: C >1, khi đó ta có: σC >1(r) = r1( A B C D ) a2 b2 5 d2 a3 b3 3 d3 a1 b2 2 d5
Ví dụ: Cho quan hệ Khachhang như sau:
MaKH TenKH DiachiKH DienthoaiKH
KH01 Lê Thanh Tâm Hà Nội 04.6829716 KH02 Nguyễn Quốc Trọng Hà Nội 04.6648719 KH03 Lê Thị Mơ Thanh Hoá 037.666888
KH04 Nguyễn Thanh Nam Nghệ An 038.856350 KH05 Phan Quốc Anh Hà Nội 04.5963964 KH06 Đỗ Văn Phúc Thanh Hoá 037.666889 KH07 Lê Minh Hương Nghệ An 038.855200 KH08 Phạm Thanh Tâm Hà Tĩnh 039.845906
Hãy thực hiện các công việc sau:
a) Đưa ra danh sách những khách hàng có địa chỉ 'Hà Nội'.
Câu lệnh: σDiaChiKH='Hà Nội'(Khachhang)
Kết quả:
MaKH TenKH DiachiKH DienthoaiKH KH01 Lê Thanh Tâm Hà Nội 04.6829716 KH02 Nguyễn Quốc Trọng Hà Nội 04.6648719 KH05 Phan Quốc Anh Hà Nội 04.5963964
b) Đưa ra danh sách khách hàng có địa chỉ ở 'Hà Nội' hoặc địa chỉ ở ‘Nghệ An’?
Câu lệnh:
σ(DiaChiKH='Hà Nội') ∨ (DiaChiKH='Nghệ An') (Khachhang) Kết quả:
MaKH TenKH DiachiKH DienthoaiKH
KH01 Lê Thanh Tâm Hà Nội 04.6829716 KH02 Nguyễn Quốc Trọng Hà Nội 04.6648719 KH04 Nguyễn Thanh Nam Nghệ An 038.856350 KH05 Phan Quốc Anh Hà Nội 04.5963964 KH07 Lê Minh Hương Nghệ An 038.855200
* Thực chất phép chọn trên quan hệ r theo điều kiện E là việc lấy ra từ r những bộ thoả mãn điều kiện E.
b) Phép chiếu (Projection)
Định nghĩa: Cho quan hệ r xác định trên tập thuộc tính U={A1, ..., An} và tập thuộc tính X⊆ U. Phép chiếu quan hệ r lên tập thuộc tính X, ký hiệu ΠX(r), cho ta một quan hệ với tập thuộc tính X và các bộ là hạn chế của các bộ t∈ r trên tập X. Cách viết: ΠX(r) = {t[ X] | t ∈ r }. Ví dụ: Cho quan hệ r: r( A B C D ) a1 b1 1 d1 a2 b2 5 d2 a3 b3 3 d3 a1 b4 1 d4 và tập X={B,C}. Khi đó, ta có ΠX(r) =r1( B C ) b1 1 b2 5 b3 3 b4 1
Chú ý: Vì quan hệ được định nghĩa như tập các bộ nên trong quan hệ không thể có hai bộ giống nhau hoàn toàn. Do đó sau khi chiếu có thể xảy ra hiện tượng có các bộ trùng nhau. Vì vậy ta có thể xác định ΠX(r), theo hai bước
- Bước 1: Lấy từ r các bộ t[X].
- Bước 2: Loại bỏ các bộ giống nhau chỉ giữ lại một bộ trong số đó.
Ví dụ: Cho quan hệ r: r ( A B C D ) a1 b1 1 d1 a2 b2 5 d2 a3 b3 3 d3 a1 b4 1 d4 và tập Y={A,C}. Khi đó, ta có ΠY(r) = r1( A C ) a1 1 a2 5 a3 3
Ví dụ: Cho quan hệ Khachhang
MaKH TenKH DiachiKH DienthoaiKH
KH01 Lê Thanh Tâm Hà Nội 04.6829716 KH02 Nguyễn Quốc Trọng Hà Nội 04.6648719 KH03 Lê Thị Mơ Thanh Hoá 037.666888 KH04 Nguyễn Thanh Nam Nghệ An 038.856350 KH05 Phan Quốc Anh Hà Nội 04.5963964 KH06 Đỗ Văn Phúc Thanh Hoá 037.666889 KH07 Lê Minh Hương Nghệ An 038.855200 KH08 Phạm Thanh Tâm Hà Tĩnh 039.845906
Hãy cho biết mã, tên của tất cả các khách hàng Câu lệnh:Π{MaKH, DiaChiKH} (Khachhang)
MaKH TenKH
KH01 Lê Thanh Tâm KH02 Nguyễn Quốc Trọng KH03 Lê Thị Mơ
MaKH TenKH
KH04 Nguyễn Thanh Nam KH05 Phan Quốc Anh KH06 Đỗ Văn Phúc KH07 Lê Minh Hương KH08 Phạm Thanh Tâm c) Phép tích Đề các (Cartesian product)
Định nghĩa: Cho quan hệ r xác định tập thuộc tính U={A1,A2, ..., An} và quan hệ s xác định tập thuộc tính V={B1,B2, ..., Bm} (giả thiết U∩V=∅). Phép tích đề các của r và s, ký hiệu r×s, cho ta một quan hệ với tập thuộc tính U∪V và các bộ có dạng t= (a1,a2,..., an, b1,b2, ..., bm) trong đó (a1 , ..., am ) ∈ r và (b1,b2, ..., bm ) ∈ s.
Cách viết:
r×s={t=(a1,a2...,an ,b1,b2, ...,bm ) | (a1,a2, ..., an) ∈ r ∧ (b1,b2, ..., bm)∈s}.
Nhận xét: Nếu quan hệ r có p bộ và quan hệ s có q bộ thì quan hệ r×s có p*q bộ.
Ví dụ: Cho hai quan hệ r và s như sau:
r( A B C D) s(E K H) a1 b1 1 d1 1 k1 h1 a2 b2 5 d2 2 k2 h2 a3 b3 3 d3 Khi đó ta có: r × s = p ( A B C D E K H) a1 b1 1 d1 1 k1 h1 a1 b1 1 d1 2 k2 h2 a2 b2 5 d2 1 k1 h1 a2 b2 5 d2 2 k2 h2 a3 b3 3 d3 1 k1 h1 a3 b3 3 d3 2 k2 h2
d) Phép kết nối (Join)
a-1. Phép kết nối tổng quát
Định nghĩa: Cho quan hệ r xác định trên tập thuộc tính U={A1, ..., An} và quan hệ s xác định trên tập thuộc tính V ={B1, ..., Bm}. Ai và Bj là các thuộc tính tương ứng thuộc U và V sao cho dom(Ai)=dom(Bj).
Gọi θ là một trong các phép toán {=, >, >=, <, <=, ≠ }.
Phép kết nối r với s theo biểu thức Ai θ Bj , ký hiệu là r s, cho ta một quan hệ với tập thuộc tính U∪V và các bộ được xác định bởi
{(u,v)|u=(a1,...,an)∈ r ∧ v=(b1, ..., bm)∈s ∧ u[Ai] θ v[Bj]}=đúng}. Cách viết:
r s =
{(u,v)|u=(a1,...,an)∈ r ∧ v=(b1, ..., bm)∈s ∧ u[Ai] θ v[Bj]}=đúng}. Ví dụ: Cho hai quan hệ r và s như sau:
r ( A B C D ) s (E K H )
a1 b1 1 d1 1 k1 h1
a2 b2 5 d2 2 k2 h2
a3 b3 3 d3 4 k3 h3
a4 b4 1 d4 3 k4 h4
Kết nối quan hệ r với s theo điều kiện C > E ta được:
r s (A B C D E K H) a2 b2 5 d2 1 k1 h1 a2 b2 5 d2 2 k2 h2 a2 b2 5 d2 4 k3 h3 a2 b2 5 d2 3 k4 h4 a3 b3 3 d3 1 k1 h1 a3 b3 3 d3 2 k2 h2 C>E Aiθ Bj Aiθ Bj
Nhận xét: Để lấy kết quả của kết nối ta có thể được thực hiện theo các bước sau:
- Lấy tích đề các của r và s,
- Thực hiện phép chọn theo điều kiện Ai θ Bj.
Chú ý: Điều kiện kết nối có thể là biểu thức dạng
ΛAi θ Bj
a-2. Phép kết nối tự nhiên (Natural join)
Trong phép kết nối tổng quát, nếu θ là phép toán “=” thì ta gọi phép kết nối đó là kết nối bằng. Nếu phép kết nối bằng trên các thuộc tính cùng tên của hai quan hệ r và s thì ta gọi nó là phép kết nối tự nhiên, ký hiệu bởi dấu “*”.
Định nghĩa: Cho quan hệ r xác định nghĩa trên tập thuộc tính U và quan hệ s xác định trên tập thuộc tính V với X=U∩V≠∅. Phép kết nối tự nhiên quan hệ r với quan hệ s, ký hiệu r*s, cho ta một quan hệ với tập thuộc tính U ∪ V và các bộ được xác định bởi tập {(u,v[V-X])| u∈r ∧ v∈s ∧ u[X]=v[X]}.
Cách viết: r*s={(u,v[V-X])| u∈r ∧ v∈s ∧ u[X]=v[X]}. Ví dụ: Cho hai quan hệ r và s như sau:
r( A B C D) s(C E F)
a1 b1 1 d1 1 e1 f1
a2 b2 5 d2 2 e2 f2
a3 b3 3 d3 4 e3 f3
a4 b4 1 d4 3 e4 f4
Kết nối tự nhiên hai quan hệ r và s ta được:
r * s = p( A B C D E F )
a1 b1 1 d1 e1 f1
a4 b4 1 d4 e1 f1
Ví dụ: Cho 2 quan hệ r và s: r(A B C) s(B C D) a1 b1 c1 b1 c1 d1 a1 b2 c1 b1 c2 d2 a2 b1 c2 b2 c1 d1 a2 b3 c1 b2 c2 d2 Ta có: r*s (A B C D) a1 b1 c1 d1 a1 b2 c1 d1 a2 b1 c2 d2 e) Phép chia (Division)
Định nghĩa: Cho quan hệ r xác định trên tập thuộc tính U và quan hệ s xác định trên tập thuộc tính V, với V⊂U và s ≠ φ. Đặt X=U-V. Phép chia quan hệ r cho quan hệ s, ký hiệu r ÷ s, cho ta quan hệ với tập thuộc tính là X và các bộ được xác định bởi:
{u [X] | (u ∈ r ∧ ∀ v∈ s) ⇒ (u[X] ,v) ∈ r } Cách viết:
r ÷ s = { u [X] | (u ∈r ∧∀v ∈ s) ⇒ (u[X] , v ) ∈ r }. Ví dụ: Cho hai quan hệ r và s như sau:
r( A B C D) s ( B C) a1 b1 1 d1 b1 1 a1 b2 2 d1 b2 2 a2 b3 3 d3 b3 3 a4 b1 1 d2 a1 b3 3 d1 a2 b3 1 d3 a4 b3 3 d2 a4 b2 2 d2 a2 b1 3 d3
Phép chia quan hệ r cho s cho ta quan hệ
r ÷ s ( A D) a1 d1 a4 d2
f) Phép hợp (Union)
Trước khi tìm hiểu các phép toán tập hợp: Hợp, giao, trừ ta tìm hiểu khái niệm hai quan hệ khả hợp.
Định nghĩa: Hai quan hệ r và s được gọi là khả hợp (tương thích) nếu chúng có cùng tập thuộc tính (trùng tên và miền trị).
Ví dụ: Hai quan hệ sau đây là khả hợp
r ( A B C) s (A B C)
a1 b1 1 a2 b3 2
a2 b2 5 a3 b5 3
a3 b3 3 a4 b4 4
a4 b4 1 a5 b2 5
Định nghĩa: Hợp của hai quan hệ khả hợp r(U) và s(U), ký hiệu r∪s, cho ta một quan hệ với tập thuộc tính U và các bộ là các bộ thuộc ít nhất một trong hai quan hệ r hoặc s.
Cách viết: r ∪ s = { t | t ∈ r ∨ t ∈ s}. Ví dụ: Cho hai quan hệ r và s như sau:
r( A B C) s(A B C)
a1 b1 1 a1 b1 1
a2 b2 5 a5 b2 2
a3 b3 3 a7 b3 3
Hợp của r và s cho ta quan hệ: r ∪ s ( A B C) a1 b1 1 a2 b2 5 a3 b3 3 a4 b4 1 a5 b2 2 a7 b3 3 a4 b4 4 g) Phép giao (Intersection)
Định nghĩa: Giao của hai quan hệ khả hợp r(U) và s(U), ký hiệu r∩s, cho ta một quan hệ với tập thuộc tính U và các bộ là các bộ thuộc đồng thời cả hai quan hệ r và s.
Cách viết: r ∩ s = { t | t ∈ r ∧ t ∈ s}. Ví dụ: Cho hai quan hệ r và s như sau:
r( A B C) s(A B C)
a1 b1 1 a1 b1 1
a2 b2 5 a5 b2 2
a3 b3 3 a7 b3 3
a4 b4 1 a4 b4 4
Giao của r và s cho ta quan hệ
r ∩ s ( A B C)
a1 b1 1
h) Phép trừ (Subtraction)
Định nghĩa: Cho hai quan hệ khả hợp r(U) và s(U). Phép trừ quan hệ r đi quan hệ s, ký hiệu r–s cho ta một quan hệ với tập thuộc tính U và các bộ là các bộ thuộc r nhưng không thuộc s.
Cách viết: r – s = { t | t ∈ r ∧ t ∉ s}. Ví dụ: Cho hai quan hệ r và s như sau:
r( A B C) s(A B C)
a1 b1 1 a1 b1 1
a2 b2 5 a5 b2 2
a3 b3 3 a7 b3 3
a4 b4 1 a4 b4 4
Phép trừ r đi s cho ta quan hệ:
r - s ( A B C)
a2 b2 5
a3 b3 3
a4 b4 1
Để tiện trong việc biến đổi các biểu thức đại số quan hệ, sau đây ta tìm hiểu một số tính chất của các phép toán đại số quan hệ. Trước hết ta giả sử r, s, p là các quan hệ và các phép toán sau đây có nghĩa.
(1) Tính giao hoán
r * s = s * r : Nếu không quan tâm đến thứ tự các thuộc tính r ∪ s = s ∪ r
r ∩ s = s ∩ r (2) Tính kết hợp
(r * s) * p = r * (s * p): Nếu không quan tâm đến thứ tự các thuộc tính và các phép kết nối đều có nghĩa.
(r ∪ s) ∪ p = r ∪ (s ∪ p) (r ∩ s) ∩ p = r ∩ (s ∩ p)
(3) Tính luỹ đẳng σE(σE(r)) = σE(r) ; ΠX(ΠX(r)) = ΠX (r) r * r = r r ∪ r = r r ∩ r = r (4) Khai triển phép chọn
Giả sử E1, E2 là hai biểu thức chọn phát biểu trên U. Ta có: σE1(σE2(r)) ⊆ σE1(r) với mọi E1, E2.
σE1(σE2(r)) = σE1(r) nếu E1 => E2 (5) Chọn theo hội, tuyển
σE1∧E2 (r) = σE1(r) ∩ σE2(r) với mọi E1, E2 σE1∨E2 (r) = σE1(r) ∪ σE2(r) với mọi E1, E2 (6) Khai triển phép chiếu
Giả sử X, Y là các tập thuộc tính thoả mãn X ⊆ Y ⊆ U. Khi đó ΠX(ΠY(r)) = ΠX (r)
(7) Khai triển phép kết nối và phép chọn
Cho hai quan hệ r(U) và s(V) và hai biểu thức chọn Er trên U và Es trên V. Khi đó:
σEr ∧ Es (r * s)= σEr (r) * σEs(s)
(8) Khai triển phép chiếu và phép chọn
Cho quan hệ r(U), tập thuộc tính X⊆U và các biểu thức chọn E trên U và Ex trên X. Khi đó:
ΠX (σE ∧ Ex(r) ) = σEx(ΠX (σE (r))) (9) Biểu diễn phép giao qua phép trừ
Cho hai quan hệ khả hợp r(U) và s(V). Khi đó: r – (r – s) = r ∩ s
(10) Biểu diễn phép chia qua các phép toán khác Cho r(U) và s(V) với V⊆U và s ≠∅. Đặt X= U–V, khi đó r ÷ s = ΠX (r) – ΠX (ΠX (r) × s – r)
Để hiểu rõ hơn về cách thực hiện các phép toán, có thể tìm hiểu về cách cài đặt chúng. Trước hết ta quy ước một số câu lệnh được sử dụng trong thuật toán:
• For each t in r [with B ] do A endfor
Nghĩa là: Thực hiện công việc A trên mọi bộ của r [thoả điều kiện B].
• If B then A [else C ] endif
Nghĩa là: Nếu điều kiện B thoả mãn thì thực hiện công việc A [ngược lại thì thực hiện công việc C].
• RCREATE(r, X)
Nghĩa là: Tạo quan hệ rỗng r trên tập thuộc tính X. • ATTRIB(r)
Nghĩa là: Lấy tập thuộc tính của quan hệ r. • Add t to r
Nghĩa là: Nạp bộ t vào quan hệ r nếu bộ t chưa có trong quan hệ r.
• t[X]
Nghĩa là: Lấy hạn chế của bộ t trên tập thuộc tính X. • t | X
Nghĩa là: Tạo bộ mới bằng cách bỏ đi những giá trị của mỗi thuộc tính A∈ X trong t.
• (u, v)
Nghĩa là: Tạo bộ mới từ hai bộ u và v thuộc hai quan hệ khác nhau. • t in r
Nghĩa là: Kiểm tra bộ t có thuộc r không? Cho giá trị đúng (true) nếu t ∈ r và sai (False) nếu t ∉ r.
Sau đây là thuật toán cài đặt các phép toán đại số quan hệ
(1) Thuật toán chọn
Algorithm: Selection Format: p = σE(r) Input: - Quan hệ r
- Biểu thức chọn E trên tập thuộc tính của r Ouput: p = {t∈r | E(t) = True}
Action
Rcreate (p, attrib(r))
For each t in r with E(t) = true do Add t to p
Endfor Return p End Selection
(2) Thuật toán chiếu
Algorithm: Projection Format: p = Πx(r) Input: - Quan hệ r - Tập thuộc tính X ⊆ Arttrib(r) Ouput: p = {t[X] | t ∈r} Action Rcreate (p, X) For each t in r do Add t[X] to p Endfor Return p
End Projection
(3) Thuật toán kết nối tự nhiên
Algorithm: Natural_Join Format: p=r * s
Input: - Quan hệ r
- Quan hệ s sao cho attrib(r) ∩ attrib(s) ≠∅
Ouput: p = {(u, v/X)|u∈r, v∈s, u[X]=v[X], X=attrib(r) ∩ attrib(s)} Action
Rcreate (p, Attrib(r) ∪ Attrib(s)) X= Attrib(r) ∩ Attrib(s)
For each u in r do
For each v in s with v[X]=u[X] do Add (u , v/X) to p
Endfor Endfor Return p
End Natural_Join
(4) Thuật toán hợp hai quan hệ tương thích
Algorithm: Union Format: p = r ∪ s Input: - Quan hệ r
- Quan hệ s tương thích với r Ouput: p = {t | t∈ r ∨ t∈s}
Action
Rcreate(p, Attrib(r) For each u in r do
Add u to p Endfor For each v in s do Add v to p Endfor Return p End Union
(5) Thuật toán giao
Algorithm: Interect Format: p = r ∩ s Input : - Quan hệ r
- Quan hệ s tương thích với r Ouput: p = {t | t∈ r ∧ t∈s} Action Rcreate (p, Attrib(r)) For each t in r do If t in s then Add t to p Endif