6. Cỏc kết quả dự kiến
2.4.1. Thuật toỏn INGRES
Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn
phộp tớnh quan hệ thành cỏc truy vấn nhỏ hơn. Một truy vấn đa biến đầu tiờn được phõn tớch thành một dóy cỏc truy vấn con cú một biến duy nhất chung, mỗi truy vấn con được dựa vào kết quả của truy vấn con trước đú. Sau đú, mỗi truy vấn con được xử lý bởi "bộ xử lý truy vấn một biến" (OVQP: one-variable query processor). OVQP tối ưu truy nhập tới một quan hệ đơn, bằng cỏch lựa chọn phương phỏp truy nhập tốt nhất (chỉ số, quột tuần tự). Vớ dụ: với tõn từ dạng <A = value> thỡ nờn dựng một chỉ số trờn A; với tõn từ dạng <Avalue> thỡ nờn dựng quột tuần tự.
Cõu truy vấn q được phõn tớch thành hai cõu truy vấn con qi-1 và qi, ký hiệu qi- 1 qi, nghĩa là qi-1 được thực hiện trước và kết quả của nú được sử dụng bởi qi. Bộxử lý cõu truy vấn INGRES phõn tớch q thành n cõu truy vấn q1 q2 q3...
qn. Sự phõn tớch này sử dụng hai kỹ thuật cơ bản phõn tỏch và thay thế. Nếu q biểu diễn dạng:
SELECT V2.A2, V3.A3,...., Vn.An FROM R1 V1, R2 V2,..., Rn Vn
WHERE P1(V1.A1')
AND P2(V1.A1, V2.A2,...., Vn.An)
Trong đú: Cõu lệnh from xỏc định cỏc biến bộ (vớ dụ V1) trờn cỏc quan hệ (vớ dụ R1); Ai, Ai' là danh sỏch cỏc thuộc tớnh của quan hệ Ri; P1 là tõn từ một đối liờn quan đến cỏc thuộc tớnh của R1; P2 là tõn từ nhiều đối liờn quan đến cỏc thuộc tớnh của R1, ...,Rn. Một truy vấn như vậy cú thể phõn tỏch thành hai truy vấn con q' q'' bằng cỏch phõn tớch cỏc biến chung V1:
q': SELECT V1.A1 INTO R1' FROM R1 V1 WHERE P1(V1.A1') q": SELECT V2.A2, V3.A3,... ., Vn.An FROM R1' V1, R2 V2,..., Rn Vn WHERE P2(V1.A1, V2.A2,... ., Vn.An)
Trong đú:R‟1 là quan hệ tạm thời bao hàm cỏc thụng tin cần thiết cho tiếp tục truy vấn.
Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn
Vớ dụ 2.6: Xột lược đồ quan hệ sau: KYSU(SHKS, TENKS, NGHE)
HOSODĂSHKS, SHDA, TRNH,THOIGIAN) DUAN(SHDA, TENDA, NGANSACH)
Trong đú: SHKS: Số hiệu kỹ sư TENKS: Tờn kỹ sư NGHE: Nghề nghiệp SHDA: Số hiệu dự ỏn TRNH: Trỏch nhiệm với dự ỏn
THOIGIAN: Thời gian được giao theo thỏng
Cõu truy vấn: "Tỡm tờn kỹ sư làm việc cho dự ỏn CAD/CAM" q1: SELECT KYSỤTENKS
FROM KYSU,HOSODA,DUAN
WHERE KYSỤSHKS = HOSODẠSHKS AND HOSODẠSHDA = DUAN.SHDA AND TENDA = "CAD/CAM"
q1được thay bởi q11 q', trong đú JTG là quan hệ trung gian q11: SELECT DUAN.SHDA INTO JTG
FROM DUAN
WHERE TENDA = "CAD/CAM" q': SELECT KYSỤTENKS
FROM KYSU, HOSODA, JTG
WHERE KYSỤSHKS = HOSODẠSHKS AND HOSODẠSHDA = JTG.SHDA
q' được phõn tỏch tiếp như sau, trong đú GTG là quan hệ trung gian:
q12: SELECT HOSODẠSHKS INTO GTG;
FROM HOSODA, JTG
WHERE HOSODẠSHDA = JTG.SHDA q13: SELECT KYSỤTENKS
Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn
FROM KYSU,GTG
WHERE KYSỤSHKS = GTG.SHKS
Như vậy, q1 cú thể biến đổi thành q11q12q13. Cõu truy vấn q11 là đơn biến và cú thể thực hiện bởi OVQP, q12 và q13 khụng là đơn biến và khụng thể rỳt gọn bởi phõn tỏch.
Một truy vấn con đa biến, khụng thể tiếp tục phõn tỏch (vớ dụ q12, q13), được biến đổi thành tập cỏc truy vấn con cú ớt nhất một biến bởi sự thay thế bộ. Cho một cõu truy vấn q n – biến, cỏc bộ của một biến được thay thế bởi cỏc giỏ trị của chỳng, do đú đưa ra một bộ của cỏc truy vấn (n -1) – biến. Sự thay thế bộ tiến hành như sau:
- Một biến trong q được chọn để thay thế bộ, vớ dụ V1
- Với mỗi bộ t1i trong R1, cỏc thuộc tớnh thuộc V1 trong q được thay thế bởi cỏc giỏ trị thực của chỳng trong t1i, do đú sinh ra truy vấn q' với n -1 biến. Như vậy, tổng số cỏc truy vấn q' được đưa ra bởi thay thế bộ là card(R1). Sự thay thế bộ cú thể túm tắt như sau:
q(V1, V2, V3, ....,Vn) được thay thế bởi { q'(t1i, V2, V3, ....,Vn), t1iR1} Vớ dụ 2.7: Xột truy vấn q13
q13: SELECT KYSỤTENKS FROM KYSU,GTG
WHERE KYSỤSHKS = GTG.SHKS
Quan hệ được xỏc định bởi biến GTG trờn một thuộc tớnh đơn (SHKS). Giả sử nú chỉ chứa hai bộ <E1> và <E2>. Sự thay thế của GTG sinh ra hai cõu truy vấn con một biến:
q131: SELECT KYSỤTENKS FROM KYSU
WHERE KYSỤSHKS = "E1" q132: SELECT KYSỤTENKS
FROM KYSU
Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn
Sau đõy là thuật toỏn tối ưu húa cõu truy vấn của INGRES, gọi là INGRES- QOA[7].
Thuật toỏn: INGRES-QOA
Input: MVQ: Truy vấn đa biến với n biến Output: output: Kết quả thực hiện
Begin
output if n=1 then
outputrun(MVQ) {Thực hiện truy vấn một biến}
else begin {tỏch MVQ thành m truy vấn một biến và một truy vấn nhiều
biến}
OVQ1,...,OVQm, MVQ' MVQ for i 1 to m do
begin
output' run(OVQi) {Thực thi OVQi}
outputoutput output' {hợp tất cả cỏc kết quả} endfor
VCHOOSE-VARIABLE(MVQ') {V được chọn cho phộp thế bộ} formỗi bộ t V do
begin
MVQ"thay thế cỏc giỏ trị cho t trong MVQ' output INGRES-QOĂMVQ") {gọi đệ quy} output
output output {hợp tất cả cỏc kết quả} end
Endif
End.