CHƯƠNG 2 : PHÂN RÃ VẤN TIN VÀ CỤC BỘ HÓA DỮ LIỆU
2.1. Phân rã vấn tin câu vấn tin SQL
2.1.1. Phân tích câu truy vấn trên cơ sở “kiểu dữ liệu” và “ngữ nghĩa”
Phân tích câu truy vấn để bỏ đi các câu truy vấn sai hoặc thừa. Những lý do chính là do chúng sai kiểu hoặc sai nghĩa. Khi phát hiện ra một trong những trường hợp này, hệ thống chỉ đơn giản trở về và đưa ra một thông báo giải thích về lý do sai. Ngược lại, quá trình xừ lý truy vấn sẽ được tiếp tục.
Một câu truy vấn gọi là sai kiểu (type incorrect) nếu nó có một thuộc tính hoặc tên quan hệ chưa được khai báo trong lược đồ toàn cục, hoặc kiểu không thích hợp cho các phép toán đang được xử lý. Kỹ thuật được sử dụng để phát hiện các câu truy vấn sẽ nêu ở đây giống như kỹ thuật kiểm tra kiểu trong ngôn ngữ lập trình. Tuy nhiên các khai báo kiểu là một bộ phận của lược đồ toàn cục chứ không phải nằm trong câu truy vấn bởi vì một câu truy vấn quan hệ không tạo ra một kiểu nào mới.
Một câu truy vấn gọi là sai nghĩa (semantically incorrect) nếu các thành phần của nó không tham gia vào việc tạo ra kết quả. Trong ngữ cảnh của phép tính quan hệ, chúng ta không thể xác định được tính đúng đắn ngữ nghĩa cho câu truy vấn tổng quát. Tuy nhiên vẫn có thể xác định được tính đúng đắn ngữ nghĩa của câu truy vấn cho một lớp truy vấn quan hệ, đó là các vấn tin không chứa các tuyển và phủ định bằng cách biểu diễn câu truy vấn như một đồ thị, được gọi là đồ thị kết nối (connection graph) hay đồ thị truy
Chúng ta định nghĩa đồ thị kết nối cho các loại truy vấn hữu ích nhất có chứa phép chọn, chiếu và nối. Trong một đồ thị truy vấn có một nút biểu thị cho một quan hệ kết quả và các nút khác biểu thị cho các quan hệ toán hạng. Một cạnh giữa hai nút không phải là quan hệ kết quả biểu diễn cho một nối, còn cạnh nối với nút kết quả sẽ biểu thị cho phép chiếu. Còn các nút không phải là kết quả có thể được gắn nhãn là một vị từ chọn hoặc vị từ nối. Một đồ thị con quan trọng của đồ thị truy vấn là đồ thị nối chỉ có các nối mà thôi. Đồ thị nối rất có ích cho giai đoạn tối ưu hóa truy vấn.
Ví dụ 2.1.1-1
Từ các quan hệ trong ví dụ 1.2.2-1 tìm tên (ENAME) và nhiệm vụ (RESP) của các lập trình viên (programmer) đã làm việc cho dự án CAD/CAM trong hơn ba năm (36 tháng).
Câu truy vấn bằng SQL như sau :
SELECT EMANE, RESP
FROM ẸMP, ASG, PROJ
WHERE EMP.ENO = ASG.ENO
AND ASG.PNO = PROJ.PNO
AND PNAME = “CAD/CAM”
AND DUR >= 36
AND TITLE = “Programmer”
Đồ thị truy vấn cho câu vấn tin trên là hình 2.1-1a
Đồ thị truy vấn giúp cho việc xác định tính đúng đắn về ngữ nghĩa của câu truy vấn hội đa biến không có phủ định. Câu truy vấn sẽ sai ngữ nghĩa nếu đồ thị truy vấn của nó không liên thông.
Câu truy vấn được xem là đúng bằng cách xét các nối kết bị thiếu như một tích Descartes. Nhưng nói chung, vấn đề chính là các vị từ nối từ bị thiếu và câu truy vấn cần được cần loại bỏ.
Từ đồ thị truy vấn ta có đồ thị nối (hình 2.1b).
Ví dụ 2.1.1-2
Xét câu truy vấn SQL như sau
SELECT ENAME, RESP
FROM EMP, ASG, PROJ
WHERE EMP.ENO =ASG.ENO
AND PNAME=”CAD/CAM”
AND DUR > =36
AND TITLE = “Programer”
ASG
EMP PROJ
EMP.ENO = ASG.ENO ASG.PNO = PROJ.PNO
Hình 2.1b. Đồ thị nối của 2.1a
ASG
EMP
PROJ
RESULT RESP
EMP.ENO = ASG.ENO ASG.PNO = PROJ.PNO
PNAME = “CAD/CAM” ENAME
TITLE = “Programmer”
DUR >= 36
Đồ thị truy vấn ở hình 2.2
Dựa vào đồ thị truy vấn ta thấy nó không liên thông. Ba trường hợp có thể xảy ra :
i. Loại bỏ ngay câu truy vấn trên.
ii. Giả định có một tích Descartes giữa quan hệ ASG và PROJ . iii. Suy ra vị trí nối bị thiếu ASG.PNO =PROJ.PNO