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

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

Đang tải... (xem toàn văn)

Thông tin tài liệu

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 http://www.foxitsoftware.com 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 http://www.foxitsoftware.com 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 http://www.foxitsoftware.com 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 http://www.foxitsoftware.com 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 http://www.foxitsoftware.com For evaluation only. . 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ữ. 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:

Ngày đăng: 29/09/2013, 04:20

Từ khóa liên quan

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

Tài liệu liên quan