5. Các kết quả dự kiến đạt đƣợc
3.1.2 Phân tích
Câu truy vấn ở dạng chuẩn được phân tích (về mặt ngữ nghĩa) để phát hiện ra những câu truy vấn không chỉnh (sai kiểu và sai ngữ nghĩa) và loại bỏ chúng sớm nhất có thể.
Một câu truy vấn sai kiểu nếu một thuộc tính nào đó của nó hoặc tên quan hệ không được định nghĩa trong lược đồ tổng thể, hoặc phép toán áp dụng cho các thuộc tính sai kiểu.
Một câu truy vấn sai ngữ nghĩa 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ả. Để xác định một câu truy vấn có sai ngữ nghĩa hay không, ta dựa trên việc biểu diễn câu truy vấn như một đồ thị, gọi là đồ thị câu truy vấn hoặc đồ thị nối. Đồ thị này xác định với các câu truy vấn có liên quan đến
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
phép chọn, chiếu và kết nối. Trong một đồ thị câu truy vấn, một nút chỉ ra quan hệ kết quả còn các nút khác chỉ ra toán hạng quan hệ. Cạnh nối giữa hai nút không phải nút kết quả biểu diễn một phép kết nối, còn cạnh có nút đích là kết quả biểu diễn một phép chiếu. Một nút không phải kết quả có thể được gán nhãn bởi phép chọn hoặc phép nữa kết nối. Một đồ thị con quan trọng của đồ thị câu truy vấn là đồ thị kết nối, trong đó chỉ các phép kết nối được xem xét. Đồ thị này đặc biệt có lợi trong lớp tối ưu hoá câu truy vấn.
Ví dụ 3.2: Với các quan hệ tổng thể KYSU, HOSODA, DUAN đề cập trong phần trước:
Xét câu truy vấn “Tìm tên và trách nhiệm của người kỹ sư đang làm việc cho dự án CAD/CAM hơn ba năm”.
SELECT TENKS, TRNH
FROM KYSU, HOSODA, DUAN WHERE KYSU.SHKS = HOSODA.SHKS AND HOSODA.SHDA = DUAN.SHDA AND TENDA=”CAD/CAM”
AND THOIGIAN 36 and NGHE= “lập trình viên”
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn (b) Đồ thị kết nối tương ứng
Hình 3.1: Các đồ thị quan hệ
Đồ thị câu truy vấn có lợi để xác định sự sai ngữ nghĩa của một câu truy vấn hội không có phép phủ định. Như vậy, một câu truy vấn là sai ngữ nghĩa nếu đồ thị câu truy vấn của nó không liên thông, nghĩa là có một hoặc nhiều đồ thị con tách khỏi đồ thị chứa quan hệ kết quả. Câu truy vấn có thể được xem là chỉnh nếu loại bỏ những phần vô ích. Nhưng nói chung, vấn đề là ở chỗ thiếu các tân từ kết nối và câu truy vấn trên bị huỷ bỏ.
Ví dụ 3.3:
SELECT TENKS, TRNH
FROM KYSU, HOSODA, DUAN
WHERE KYSU.SHKS = HOSODA.SHKS AND HOSODA.SHDA=DUAN.SHDA AND TENDA=”CAD/CAM”
AND THOIGIAN 36 and NGHE=”lập trình viên”
Câu truy vấn này có ngữ nghĩa không chỉnh vì đồ thị của nó (hình 3.2) không liên thông. Có ba giải pháp cơ bản cho vấn đề này:
- Huỷ bỏ câu truy vấn
- Cho rằng việc truy nhập tới quan hệ DUAN là vô ích và loại bỏ tân từ TENDA = “CAD/CAM” ra khỏi câu truy vấn.
- Suy ra (sử dụng lược đồ) thiếu tân từ kết nối HOSODA.SHDA = DUAN.SHDA để đưa về câu truy vấn như ở ví dụ 3.2
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Hình 3.2: Đồ thị câu truy vấn không liên thông 3.1.3 Loại bỏ dư thừa
Điều kiện trong câu truy vấn có thể chứa các tân từ dư thừa và dẫn đến công việc dư thừa. Nó có thể được loại bỏ bằng cách đơn giản hoá điều kiện với các luật luỹ đẳng đã biết.
Ví dụ 3.4: Xét câu truy vấn SQL sau: SELECT NGHE
FROM KYSU
WHERE (NOT(NGHE=”Lập trình viên”)
AND ((NGHE=”Lập trình viên”) OR (NGHE = “KS điện tử”)) AND NOT(NGHE=”KS điện tử”))
OR TENKS = “J.Doe”
Sử dụng các luật luỹ đẳng đó để đơn giản câu truy vấn này: SELECT NGHE
FROM KYSU
WHERE TENKS=”J.Doe”
Gọi p1 là <NGHE = “Lập trình viên”>, p2 là <NGHE= “KS điện tử”>, p3 là <TENKS = “J.Doe”>. Điều kiện câu truy vấn là:
(p1 (p1 p2)p2) p3
(p1 p1 p2) (p1 p2p2) p3 (Áp dụng pp false)
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
false false p3 (Áp dụng p false p)
p3
3.1.4 Viết lại
Bước cuối cùng của phân rã câu truy vấn là viết lại câu truy vấn dưới dạng đại số quan hệ. Có thể được chia làm hai bước sau:
- Biến đổi trực tiếp câu truy vấn phép tính quan hệ sang đại số quan hệ. - Cấu trúc lại câu truy vấn đại số quan hệ để cải tiến hiệu năng.
Để cho rõ ràng, thông thường người ta biểu diễn câu truy vấn đại số quan hệ bởi một cây đại số quan hệ. Một cây đại số quan hệ là một cây trong đó một nút lá biểu diễn một quan hệ trong cơ sở dữ liệu, còn một nút khác nút lá biểu diễn một quan hệ trung gian sinh bởi một phép toán đại số quan hệ. Dãy các phép toán trực tiếp từ lá đến gốc biểu diễn lời giải của câu truy vấn.
Sự biến đổi từ câu truy vấn trong phép tính quan hệ bộ thành cây đại số quan hệ được thực hiện như sau:
- Mỗi nút lá khác nhau được tạo cho một biến bộ khác nhau (tương ứng một quan hệ). Trong SQL, các nút lá chính là các quan hệ trong mệnh đề FROM.
- Nút gốc được tạo ra xem như một phép chiếu lên các thuộc tính kết quả. Trong SQL, nút gốc được tìm thấy trong mệnh đề SELECT.
- Điều kiện (mệnh đề WHERE trong SQL) được biến đổi thành dãy các phép toán đại số thích hợp (phép chọn, kết nối, phép hợp,…) đi từ lá tới gốc, có thể theo thứ tự xuất hiện của các tân từ và các phép toán.
Ví dụ 3.5: Với các quan hệ tổng thể KYSU, HOSODA, DUAN đề cập trong phần trước: Xét câu truy vấn: “Tìm tên các nhân viên khác J.Doe làm việc cho dự án CAD/CAM một hoặc hai năm”.
SELECT TENKS
FROM DUAN, HOSODA, KYSU
WHERE HOSODA.SHKS = KYSU.SHKS AND HOSODA.SHDA = DUAN.SHDA
AND TENKS “J.Doe” and TENDA = “CAD/CAM” AND (THOIGIAN = 12 or THOIGIAN = 24)
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Hình 3.3: Cây đại số quan hệ
Có thể biến đổi cây thành các cây tương ứng nhờ các qui tắc đã trình bày trong chương II (mục biến đổi đại số). Ví dụ cây hình 3.4 tương đương cây hình 3.3. Tuy nhiên cây hình 3.4 chứa tích Decartes, nên chi phí thực hiện có thể lớn hơn cây ban đầu.
Hình 3.4: Cây đại số quan hệ tương đương
Trong giai đoạn tối ưu, có thể so sánh tất cả các cây có thể có dựa trên chi phí dự đoán của chúng. Tuy nhiên, nếu số lượng các cây có thể quá lớn sẽ dẫn đến cách tiếp cận này không khả thi. Các quy tắc trên có thể đựơc dùng để cấu trúc lại cây để loại bỏ những cây đại số quan hệ “tồi”. Các quy tắc đó có thể sử dụng theo bốn cách khác nhau:
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
- Nhóm các phép toán một ngôi trên cùng một quan hệ để giảm số lần thực hiện.
Giao hoán các phép toán một ngôi với các phép toán hai ngôi để ưu tiên cho một số phép toán (chẳng hạn phép chọn).
- Sắp thứ tự các phép toán hai ngôi trong thực thi câu truy vấn.
Ví dụ 3.6: Cấu trúc lại cây trong hình 3.4, cho cây kết quả tốt hơn cây ban đầu, tuy nhiên vẫn còn xa tối ưu.
Hình 3.5: Cây đại số quan hệ đã viết lại
3.2 Định vị dữ liệu phân tán
Như đã biết, tầng định vị biến đổi một câu truy vấn đại số trên các quan hệ tổng thể, thành một câu truy vấn đại số được hiển thị trên các phân đoạn vật lý. Việc định vị sử dụng thông tin được lưu trữ trên lược đồ phân đoạn. Chương trình đại số quan hệ xây dựng lại quan hệ tổng thể từ các phân đoạn của nó gọi là chương trình định vị. Để đơn giản, trong phần này không xét đến sự nhân bản của các đoạn dữ liệu, mặc dù điều này có thể cải tiến hiệu năng. Sự nhân bản sẽ được xét trong phần sau.
Một giải pháp tự nhiên để định vị một câu truy vấn phân tán là sinh ra một câu truy vấn trong đó mỗi quan hệ tổng thể được thay thế bởi chương trình định vị của nó. Cách này có thể được xem như việc thay thế các nút lá của cây đại số
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
quan hệ của câu truy vấn phân tán bởi các cây con tương ứng với các chương trình định vị. Nói chung, cách tiếp cận này không hiệu quả vì câu truy vấn ban đầu vẫn có thể cấu trúc lại và đơn giản hoá. Trong phần này, với mỗi kiểu phân đoạn sẽ có các kỹ thuật rút gọn để sinh ra các câu truy vấn được tối ưu và đơn giản hơn [7].
3.2.1 Rút gọn phân đoạn ngang nguyên thuỷ
Phân đoạn ngang tách một quan hệ dựa trên các tân từ chọn
Ví dụ 3.7: Quan hệ KYSU(SHKS, TENKS, NGHE) được tách thành 3 phân đoạn ngang KYSU1, KYSU2, KYSU3 như sau:
KYSU1= SHKS ≤ “E3”(KYSU) KYSU2= ”E3”<SHKS ≤ “E6”(KYSU) KYSU3= SHKS > “E6”(KYSU)
Chương trình định vị cho một quan hệ đã được phân đoạn ngang là hợp của các đoạn: KYSU = KYSU1 KYSU2 KYSU3
Như vậy, dạng ban đầu của bất kỳ câu truy vấn nào xác định trên KYSU là có được bằng cách thay thế nó bởi (KYSU1 KYSU2 KYSU3 ).
Việc rút gọn các câu truy vấn trên các quan hệ đã được phân đoạn ngang bao gồm việc xác định, sau khi đã cấu trúc lại các cây con, các cây con đó sẽ sinh ra các quan hệ rỗng và loại bỏ chúng. Phân đoạn ngang có thể được khai thác để làm đơn giản cả hai phép chọn và kết nối.
Rút gọn với phép chọn: R được phân đoạn ngang thành R1, R2, …,Rw‟: Rj=pj(R)
Luật 1:
pj(Rj) =nếu x € R:(pi(x) pj(x))
Trong đó pi, pj: tân từ chọn, x: bộ dữ liệu, p(x): tân từ p đúng với x Ví dụ 3.8:
SELECT * FROM KYSU WHERE SHKS=”E5”
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Câu truy vấn ban đầu tương ứng với hình 3.6a, bằng cách giao hoán phép chọn với phép hợp để tìm ra các quan hệ rỗng, ta được câu truy vấn rút gọn hình 3.6b
(a)Câu truy vấn ban đầu (b) Câu truy vấn rút gọn
Hình 3.6: Rút gọn cho phân đoạn ngang với phép chọn
Rút gọn với phép kết nối:
Các phép kết nối trên các quan hệ đã được phân đoạn ngang có thể đơn giản khi chúng được phân đoạn theo thuộc tính kết nối. Sự đơn giản bao gồm việc phân phối các phép kết nối trên các phép hợp và loại bỏ các phép kết nối vô ích. Sự phân phối của phép kết nối trên phép hợp có thể bắt đầu như sau:
(R1 R2) ⊲⊳ R3 = (R1 ⊲⊳ R3) (R2 ⊲⊳ R3) trong đó Ri là các phân đoạn
Với biến đổi này, có thể xác định được các phép kết nối vô ích của các đoạn khi các điều kiện kết nối mâu thuẫn nhau. áp dụng luật 2 để loại bỏ các phép kết nối vô ích.
Luật 2:
(Ri ⊲⊳ Rj) =nếuxRi ,yRj :(pi(x) pj(y))
Trong đó Ri, Rj được xác định theo các tân từ pi, pj trên cùng thuộc tính Như vậy, việc xác định các phép kết nối vô ích có thể được thực hiện bằng cách chỉ xét các tân từ kết nối. áp dụng luật này cho phép thực hiện phép kết nối hai quan hệ như thực hiện song song các phép kết nối bộ phận của các phân đoạn. Không phải câu truy vấn rút gọn luôn tốt hơn (đơn giản hơn) câu truy vấn ban đầu. Câu truy vấn ban đầu là tốt hơn khi số các phép kết nối bộ phận trong câu
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
truy vấn rút gọn lớn. Trường hợp này xuất hiện khi có ít các tân từ phân đoạn mâu thuẫn nhau. Trường hợp xấu nhất xuất hiện khi mỗi đoạn của một quan hệ phải được kết nối với mỗi đoạn của quan hệ khác. Đây chính là tích Decartes của hai tập các đoạn, mỗi tập tương ứng với một quan hệ. Câu truy vấn rút gọn là tốt hơn khi số các phép kết nối bộ phận là nhỏ. Lợi ích của câu truy vấn rút gọn là các phép kết nối có thể được thực hiện song song, vì vậy tăng thời gian đáp ứng.
Ví dụ 3.9: Quan hệ KYSU được phân đoạn như trên, quan hệ HOSODA được phân đoạn như sau:
HOSODA1 = SHKS ≤ "E3"(HOSODA) HOSODA2 = SHKS > "E3"(HOSODA) Xét câu truy vấn:
SELECT *
FROM KYSU, HOSODA
WHERE KYSU.SHKS=HOSODA.SHKS
Câu truy vấn ban đầu tương ứng với hình 3.7a. Phân phối phép kết nối trên các phép hợp và áp dụng qui tắc 2, ta được câu truy vấn rút gọn hình 3.7b, và ba phép kết nối bộ phận có thể được thực hiện song song.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn (b) Câu truy vấn rút gọn
Hình 3.7: Rút gọn phân đoạn ngang với phép kết nối 3.2.2 Rút gọn phân đoạn dọc
Phân đoạn dọc tách một quan hệ dựa trên các thuộc tính chiếu. Vì phép toán xây dựng lại đối với phân đoạn dọc là kết nối, nên chương trình định vị một quan hệ đã được phân đoạn dọc là kết nối của các đoạn trên thuộc tính chung. Ví dụ 3.10: KYSU được phân đoạn dọc thành KYSU1, KYSU2 như sau:
KYSU1 = SHKS,TENKS(KYSU) KYSU2 = SHKS,NGHE(KYSU)
Chương trình định vị là: KYSU = KYSU1 ⊲⊳SHKS KYSU2
Tương tự phân đoạn ngang, các câu truy vấn trên các phân đoạn dọc có thể được rút gọn bằng cách xác định các quan hệ trung gian vô ích và loại bỏ các cây con chứa chúng. Các phép chiếu trên một phân đoạn dọc không có các thuộc tính chung với các thuộc tính chiếu (ngoại trừ khoá K của quan hệ) là vô ích, mặc dù các quan hệ là khác rỗng.
Luật 3:
D.K(Ri) lµ v« Ých nếu D A’ =
Trong đó: Quan hệ R xác định trên A = {A1, …, An}; Ri =A’(R); A’ A K là khoá của quan hệ; K A; D là tập các thuộc tính chiếu; DA Ví dụ 3.11:
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
FROM KYSU
Câu truy vấn ban đầu tương ứng với hình 3.8a. Bằng cách giao hoán phép chiếu với phép kết nối, suy ra câu truy vấn rút gọn hình 3.8b.
(a) Câu truy vấn ban đầu (b) Câu truy vấn rút gọn
Hình 3.8: Rút gọn đối với việc phân đoạn dọc 3.2.3 Rút gọn phân đoạn gián tiếp
Câu truy vấn trên các phân đoán gián tiếp cũng có thể rút gọn, nếu các tân từ phân đoạn mâu thuẫn nhau thì phép kết nối sẽ đưa ra quan hệ rỗng. Chương trình định vị một quan hệ đã phân đoạn ngang gián tiếp là hợp của các đoạn.
Ví dụ 3.12: Xét quan hệ HOSODA(SHKS, SHDA, TRNH, THOIGIAN) có thể được phân đoạn gián tiếp như sau:
HOSODA1 = HOSODA ⋉SHKS KYSU1 HOSODA2 = HOSODA ⋉SHKS KYSU2
Trong đó quan hệ KYSU được phân đoạn ngang như sau: KYSU1 = NGHE =“Lập trình viên”(KYSU)
KYSU2 = NGHE ạ“Lậptrình viên”(KYSU)
Chương trình định vị cho một quan hệ đã được phân đoạn ngang gián tiếp là hợp của các đoạn: HOSODA = HOSODA1 HOSODA2
Câu truy vấn trên các phân đoạn gián tiếp cũng có thể rút gọn. Phép kết nối sẽ đưa ra quan hệ rỗng nếu các tân từ phân đoạn mâu thuẫn nhau. Ví dụ tân từ của HOSODA1 và KYSU2 mâu thuẫn nhau nên HOSODA1 ⊲⊳ KYSU2 =
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Ví dụ 3.13: Xét câu truy vấn SQL sau: SELECT *
FROM KYSU, HOSODA
WHERE HOSODA.SHKS = KYSU.SHKS AND NGHE = “KS cơ khí”
Câu truy vấn ban đầu trên các đoạn KYSU1, KYSU2, HOSODA1, và HOSODA2 tương ứng hình 3.9a bằng cách đẩy phép chọn xuống các đoạn KYSU1
và KYSU2, được câu truy vấn rút gọn hình 3.9b. Phân phối phép kết nối với phép hợp, được cây hình 3.9c. Cây con bên trái đưa ra một quan hệ rỗng, nên cây rút gọn có được trong hình 3.9d.
(a) Câu truy vấn ban đầu
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn (c) Câu truy vấn sau khi đẩy phép hợp lên
(d) Câu truy vấn rút gọn sau khi loại bỏ cây con bên trái