Tải bản đầy đủ (.pdf) (5 trang)

Biểu diễn yêu cầu bằng biểu thức đại số quan hệ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (61.89 KB, 5 trang )

H-íng dÉn «n tËp CSDL quan hÖ
Tµi liÖu tham kh¶o Trang 9
DẠNG 2: BIỂU DIỄN YÊU CẦU BẰNG ĐẠI SỐ QUAN HỆ
Bài toán: Cho một hoặc nhiều lược đồ quan hệ và một số yêu cầu dữ liệu. Hãy
biểu diễn các yêu cầu dữ liệu đó bằng biểu thức đại số quan hệ sao cho kết quả của biểu
thức đó thoả mãn yêu cầu đặt ra.
Phương pháp:
Phương pháp sau đây giúp giải một lớp rộng các bài tập thuộc dạng này. Trong các
bài tập còn lại (xem phần sau), phương pháp này chỉ mang tính chất hỗ trợ.
B1: Xác định xem có bao nhiêu thông tin (trường) liên quan tới câu hỏi. Xác định
xem các thông tin đó thuộc ít nhất mấy bảng.
Nếu các thông tin liên quan chỉ thuộc ít nhất 1 bảng thì biểu thức không cần phép
kết nối. Ngược lại thì cần.
B2: Xác định xem các bản ghi lấy ra có cần thoả mãn điều kiện gì không? nếu
không, biểu thức sẽ không có phép chọn. Ngược lại thì có phép chọn. Khi đó cần xác
định điều kiện chọn.
B3: Xác định xem có lấy mọi thông tin trong các bảng liên quan không. Nếu có thì
biểu thức không có phép chiếu. Ngược lại thì biểu thức có phép chiếu. Khi đó cần xác
định các thuộc tính cần chiếu.
Chú ý: Biểu thức điều kiện chọn là một biểu thức Logic bao gồm:
- Các toán tử: và (∧), hoặc (∨), phủ định (¬) so sánh ( >, <, ≥, ≤, =, ≠).
- Các toán hạng: Các tên trường hoặc các hằng giá trị. Hằng giá trị có 3 loại gồm:
hằng số, hằng xâu, hằng ngày tháng. Hằng xâu và hằng ngày tháng đặt giữa hai dấu
nháy đơn ' '. Hằng số thì không.
Ví dụ:
Các bảng dữ liệu sau sẽ dùng làm ví dụ trong suốt phần này và cả dạng bài tập thứ
3 (biểu diễn yêu cầu bằng SQL).
Bảng S chứa thông tin về tất cả các nhà cung cấp gồm: Mã nhà cung cấp, tên nhà
cung cấp, tình trạng cung ứng và địa chỉ nhà cung cấp:
S(S#, SName, Status, City)
Bảng P chứa thông tin về tất cả các sản phẩm gồm: Mã sản phẩm, tên sản phẩm,


màu sắc, trọng lượng:
P(P#, PName, Color, Weight).
Bảng SP chứa thông tin về nhà cung cấp nào đã cung cấp sản phẩm nào với số
lượng bao nhiêu:
SP(S#, P#, QTY).


Generated by Foxit PDF Creator © Foxit Software
For evaluation only.
H-íng dÉn «n tËp CSDL quan hÖ
Tµi liÖu tham kh¶o Trang 10
Ví dụ 1:
Cho biết tên hàng và màu sắc của các mặt hàng có trọng lượng

[20, 30]?
B1: Các thông tin liên quan: tên hàng, màu sắc, trọng lượng. Tương ứng với
PName, Color, Weight. Các thông tin này thuộc ít nhất 1 bảng, đó là bảng P. Vậy biểu
thức được xây dựng:
(P)
B2: Các bản ghi lấy ra cần thoả mãn điều kiện: Weight

20 ∧ Weight

30. Vậy
biểu thức được xây dựng:
δ
Weight ≥ 20 ∧ Weight ≤ 30
(P)
B3: Ta chỉ lấy 2 thông tin trong số 4 thông tin của bảng P (PName, Color) do đó có
phép chiếu. Biểu thức được xây dựng:


PName, Color

Weight ≥ 20 ∧ Weight ≤ 30
(P))
---------
Ví dụ 2: Cho biết Tên hàng, số lượng đã cung ứng, mã nhà cung cấp đã cung ứng
mặt hàng đó.
Theo cách trên ta xác định được 3 thông tin liên quan: PName, QTY, S#. Tuy
nhiên S# sẽ được lấy trong bảng SP (Vì chỉ lấy mã nhà cung ứng đã cung ứng).
Vậy 3 thông tin trên thuộc ít nhất 2 bảng P và SP. Không có điều kiện chọn:

PName, QTY
(P*SP)
Dễ thấy phương pháp trên chỉ thích hợp trong việc xây dựng các biểu thức có 3
phép toán chiếu, chọn, kết nối. Các phép toán khác chúng ta cần chú ý cách giải trong
các ví dụ sau đây.
Với các ví dụ sau đây, phương pháp 3 bước trên không hoàn toàn đúng mà chỉ
mang tính chất trợ giúp:
Cho biết mã nhà cung ứng đã cung ứng cả mặt hàng P1 và P2.
Các thông tin liên quan là S# và P#. Hai thông tin này nằm trong ít nhất 1 bảng SP.
Tuy nhiên biểu thức ĐSQH sau là một hiểu lầm mà sinh viên thường gặp:

S#

P#='P1' ∧ P#='P2'
(SP))
Biểu thức trên sai vì không có bất kỳ bản ghi nào thoả mãn P# vừa bằng P1 và P#
lại vừa bằng P2.
Hãy xem hình sau:






S#

P#='P2'
(SP))


S#

P#='P1'
(SP))

Generated by Foxit PDF Creator © Foxit Software
For evaluation only.
H-íng dÉn «n tËp CSDL quan hÖ
Tµi liÖu tham kh¶o Trang 11


Vòng tròn thứ nhất tượng trưng cho mã của các nhà cung cấp đã cung cấp P1.
Vòng tròn thứ 2 là mã các nhà cung cấp đã cung cấp P2. Vậy giao của 2 vòng tròn này
là mã các nhà cung đã cung cấp cấp cả P1 và P2.

S#

P#='P1'
(SP)) ∩ ∏

S#

P#='P2'
(SP))
-------
Tương tự, ta có thể giải quyết được các bài có dạng như:
- Cho biết mã các nhà cung cấp chỉ cung cấp P1 mà không cung cấp P2 (phép trừ).

S#

P#='P1'
(SP)) - ∏
S#

P#='P2'
(SP))
- Cho biết mã các nhà cung cấp đã cung cấp P1 hoặc P2 (phép hợp - có thể thay
bằng toán tử hoặc (v)).

S#

P#='P1'
(SP)) ∪ ∏
S#

P#='P2'
(SP)) hoặc ∏
S#

P#='P1' V P#=’P2’

(SP))
Cho biết mã hàng được tất cả các nhà cung ứng cung cấp?
Ta hiểu rằng đó là những P# mà sao cho nếu ta ghép nó với mọi S# của bảng S thì
ta luôn thu được cặp S#, P# có trong bảng SP. Do đó, đây là một ví dụ về phép chia
trong ĐSQH:

S#, P#
(SP) ÷ ∏
S#
(S)

Phương pháp 3 bước trên là rất quan trọng giúp hình thành biểu thức đại số quan
hệ và cũng giúp khởi động quá trình tư duy khi làm bài tập dạng này. Khi sử dụng nó,
điểm quan trọng nhất là việc xác định đúng biểu thức điều kiện chọn.
Sau đây là một số chú ý khi viết biểu thức điều kiện chọn:
[1]. Khi nói “A và B” ta có thể hiểu theo 3 cách:
- A và B.
Ví dụ ta nói: Cho biết các tên hàng màu đỏ Và có trọng lượng nhỏ hơn 20!
- A hoặc B.
Ví dụ ta nói: Cho biết thông tin của các mặt hàng có trọng lượng là 20 Và 30! Ta
cần hiểu rằng phải đưa ra thông tin của các mặt hàng có trọng lượng 20 hoặc
30.
- A giao B
Ví dụ ta nói: Đưa ra tên hàng được cả nhà cung cấp S01 Và S02 cung ứng! Khi
đó ta cần lấy giao của 2 tập hợp. Tập thứ nhất là tất cả các tên hàng do nhà cung cấp
S01 cung ứng. Tập thứ 2 gồm toàn bộ các tên hàng do nhà cung cấp S02 cung ứng.
[2]. Sai lầm khi sử dụng hàm trong biểu thức điều kiện chọn
Generated by Foxit PDF Creator © Foxit Software
For evaluation only.
H-íng dÉn «n tËp CSDL quan hÖ

Tµi liÖu tham kh¶o Trang 12
Hãy nghiên cứu kỹ các toán tử và toán hạng được phép sử dụng trong biểu thức
điều kiện chọn. Trong đó, ta không thấy các toán tử số học như +, -, *, / hoặc các toán
hạng là hàm.
Tuy nhiên, đại số quan hệ mở rộng lại cho phép sử dụng chúng!
Ví dụ với bảng quan hệ: Thí Sinh(SBD, HoTen, NS, Que) – (Số báo danh, Họ tên,
ngày sinh, quê). Hãy cho biết họ tên thí sinh sinh năm 1990?
Biểu thức điều kiện chọn sau đây là không hợp lệ:

HoTen

Year(NS) = 1990
(ThiSinh))
Nhưng một cách suy nghĩ đơn giản có thể giải quyết được vấn đề này:

HoTen

NS ≥ ‘1/1/1990’ ∧ NS ≤ ‘31/12/1990’
(ThiSinh))
[3]. Khi sử dụng cả toán tử ∧ và toán tử ∨, hãy lưu ý tới các dấu mở, đóng
ngoặc: Thông thường phép ∧ được ưu tiên hơn phép ∨; tuy nhiên, trong một số trường
hợp, nếu bạn muốn điều ngược lại (ưu tiên phép ∨ trước) thì vẫn có thể được bằng cách
sử dụng các dấu ngoặc đơn. Khi đó, máy tính sẽ ưu tiên thực hiện phần biểu thức trong
dấu ngoặc đơn trước (xin xem ví dụ trong phần sau)
[4]. Các tên bảng, tên trường trong biểu thức đại số quan hệ phải viết giống với
tên bảng, tên trường trong các bảng quan hệ đầu bài cho. Nếu không chú ý điểm này,
một số bạn có thể không hiểu vì sao đáp án của mình lại không được chấp nhận.
Để rõ hơn các vấn đề trên, chúng tôi đưa ra một loạt ví dụ như sau:
Cho các quan hệ sau:
Thí Sinh(SBD, HoTen, NS, Que) – (Số báo danh, Họ tên, ngày sinh, quê)

Phách(SBD, SPH) – (Số báo danh, số phách)
Kết quả(SPH, M1, M2, M3) – (Số phách, điểm môn 1, điểm môn 2, điểm môn 3)
Hãy so sánh đáp án của 3 ví dụ sau:
- Cho biết Họ tên thí sinh sinh tháng 3 năm 1990 và có quê là “Hà Nam”.

Hoten

NS ≥ ‘1/3/1990’ ∧ NS ≤ ‘31/3/1990’ ∧ Que = ‘Ha Nam’
(ThiSinh))
Trong ví dụ trên, ta sử dụng các toán tử ≥ và ≤ để biểu diễn điều kiện thí sinh có
ngày sinh trong tháng 3 năm 1990 mà không sử dụng hàm month, year;
- Cho biết Họ tên các thí sinh quê ở Hà Nam và Hải Dương.

Hoten

Que = ‘Ha Nam’ ∨ Que = “Hai Duong’
(ThiSinh))
Trong ví dụ trên, 2 vế của điều kiện cùng áp dụng trên một trường
, vì vậy cách
nói “và” có thể hiểu là phép ∨ hoặc ∩, và trong trường hợp này chúng ta cần sử dụng
phép ∨.
- Cho biết Họ tên của các thí sinh mà điểm 3 môn có cả điểm 0 và điểm 10.
Ta tìm các thí sinh có điểm 0 trước:

HoTen

M1=0 ∨ M2=0 ∨ M3=0
(ThiSinh*Phach*Ketqua))
Generated by Foxit PDF Creator © Foxit Software
For evaluation only.

H-íng dÉn «n tËp CSDL quan hÖ
Tµi liÖu tham kh¶o Trang 13
Rồi đến các thí sinh có điểm 10:

HoTen

M1=10 ∨ M2=10 ∨ M3=10
(ThiSinh*Phach*Ketqua))

Và dễ dàng tìm được các thí sinh có cả điểm 0 và điểm 10:

HoTen

M1=0 ∨ M2=0 ∨ M3=0
(ThiSinh*Phach*Ketqua))



HoTen

M1=10 ∨ M2=10 ∨ M3=10
(ThiSinh*Phach*Ketqua))
Từ 3 ví dụ trên, sinh viên tự rút ra dấu hiệu để sử dụng và, hoặc, giao sao cho linh
hoạt. Hãy chú ý các từ chúng tôi in đậm và gạch chân ở trên.
- Cho biết họ tên các thí sinh có ít nhất một điểm 10 và có ít nhất 1 điểm 0?

HoTen

(M1=10 ∨ M2=10 ∨ M3=10)


(M1=0 ∨ M2=0 ∨ M3=0)
(ThiSinh*Phach*Ketqua))
Biểu thức sẽ sai khi bạn không sử dụng dấu ngoặc đơn khi viết biểu thức có cả toán
tử ∧ và ∨ trong trường hợp này.
Với các ví dụ trên, bạn dễ dàng hoàn thành được ví dụ tổng hợp sau đây (hãy trao
đổi với mọi người về đáp án của mình):
Cho biết họ tên các thí sinh của các tỉnh Hải phòng và Quảng Ninh mà các thí
sinh đó sinh nửa đầu năm 1989 và không có điểm nào liệt (điểm 0).




Generated by Foxit PDF Creator © Foxit Software
For evaluation only.

×