2.2.1. Phõn ró vấn tin
Phõn ró vấn tin là giai đoạn đầu tiờn của quỏ trỡnh xử lý cõu vấn tin, nú biến đổi cõu vấn tin dạng phộp tớnh quan hệ (cấp cao) thành cõu vấn tin đại số quan hệ (cấp thấp). Cỏc vấn tin nhập, xuất đều tham chiếu đến cỏc quan hệ toàn cục và khụng dựng đến cỏc thụng tin về phõn bố dữ liệu ,vỡ thế phõn ró vấn tin giống nhau trong cả hệ tập trung lẫn phõn tỏn. Cỏc bước phõn ró vấn tin gồm: chuẩn hoỏ, phõn tớch, loại bỏ dư thừa và viết lại cõu vấn tin
2.2.1.1. Chuẩn hoỏ
Mục đớch chuẩn hoỏ là biến đổi cõu vấn tin thụng thường thành cõu vấn tin dạng chuẩn để tiếp tục xử lý với cỏc ngụn ngữ quan hệ như SQL, biểu đồ quan trọng nhất là lượng từ hoỏ vấn tin cho vị từ phi lượng từ với độ phức tạp nào đú khi dựng cỏc lượng từ cần thiết như : với mọi, : tồn tại, chỳng được đặt phớa trước.
Vớ dụ: (p11v p12 v … v p1n)^…^(pm1 v pm2 v …pnm) Trong đú : p## là mệnh đề đơn giản .
Dạng chuẩn tuyển (disjunction normal from) là tuyển (v) của cỏc hội (^). Vớ dụ: (p11p12…p1n) v …v(pm1pm2…pmn)
Dạng chuẩn hội thường được sử dụng trong thực tế bởi vỡ cỏc lượng từ hoỏ vấn tin thường chứa nhiều vị từ AND hơn vị từ OR. Tuy nhiờn nú cũng cú thể thực hiện cho cỏc vị từ chuẩn tuyển.
Vớ dụ 2.2-1: Từ hệ CSDL Cụng ty Điện toỏn (trang 184 [3])
Hóy tỡm tờn cỏc nhõn viờn đang làm ở dự ỏn P1 trong 12 hoặc 24 thỏng. Cõu vấn tin bằng SQL như sau:
SELECT ENAME FROM EMP, ASG
WHERE EMP.ENO = AGS.ENO AND ASG.PNO = “P1”
AND DUR =12 OR DUR = 24 Lượng từ hoỏ chuẩn hội là :
(EMP.ENO =ASG.ENO) ^ (ASG.PNO = “P1”) ^ ((DUR=12) v (DUR=24))
Cũn lượng tử húa chuẩn tuyển là :
((EMP.ENO =ASG.ENO) (ASG.PNO = “P1”) (DUR=12))
((EMP.ENO =ASG.ENO) (ASG.PNO = “P1”) (DUR=24))
2.2.1.2. Phõn tớch cõu vấn tin trờn cơ sở “kiểu dữ liệu” và “ngữ nghĩa”
Phõn tớch cõu vấn tin để bỏ đi cỏc cõu vấn tin 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ý vấn tin sẽ được tiếp tục.
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 vấn tin 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 vấn tin bởi vỡ một cõu vấn tin quan hệ khụng tạo ra một kiểu nào mới.
Vớ dụ 2.2-2:Từ hệ CSDL Cụng ty Điện toỏn (trang 184 [3]) Cõu vấn tin SQL sau đõy trờn cơ sở dữ liệu về cỏc dự ỏn
SELECT E# FRROM EMP
WHERE ENAME > 200
là sai kiểu vỡ hai lý do. Trước hết, thuộc tớnh E# chưa được khai bỏo trong lược đồ Thứ hai, phộp so sỏnh “ > 200 “ khụng phự hợp với kiểu chuỗi của ENAME.
Một cõu vấn tin 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 vấn tin 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 vấn tin cho một lớp vấn tin quan hệ khỏ rộng rói, đú là cỏc vấn tin khụng chứa cỏc tuyển và phủ định [Rosenkrantz and Hunt 1980] bằng cỏch biểu diễn cõu vấn tin như một đồ thị, được gọi là đồ thị kết nối
(connection graph) hay đồ thị vấn tin (quay graph) [Ullman, 1982].
Chỳng ta định nghĩa đồ thị này cho cỏc loại vấn tin hữu ớch nhất cú chứa phộp chọn, chiếu và nối. Trong một đồ thị vấn tin 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ị vấn tin 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 vấn tin.
Vớ dụ 2.2-3:Từ hệ CSDL Cụng ty Điện toỏn (trang 184 [3])
Tỡm tờn 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.
Cõu vấn tin bằng SQL như sau : SELECTS 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ị vấn tin cho cõu vấn tin trờn là hỡnh 2.2-1a
Đồ thị vấn tin giỳp cho việc xỏc định tớnh đỳng đắn về ngữ nghĩa của cõu vấn tin hội đa biến khụng cú phủ định. Cõu vấn tin sẽ sai ngữ nghĩa nếu đồ thị
ASG
EMP
PROJ
RESULT RESP
EMP.ENO = ASG.ENO ASG.PNO = PROJ.PNO
PNAME = “CAD/CAM” ENAME
TITLE = “Programmer”
DUR36
vấn tin của nú khụng liờn thụng.
Vớ dụ 2.2-4:Từ hệ CSDL Cụng ty Điện toỏn (trang 184 [3]) Xột cõu vấn tin SQL như sau
SELECT ENAME , RESP FROM EMP, ASG, PROJ WHERE EMP.ENO =ASG.ENO AND PNAME=”CAD/CAM” AND DUR > =36
AND TITLE = “PROGRAM” Đồ thị vấn tin ở hỡnh 2.2-2.
ASG
EMP PROJ
EMP.ENO = ASG.ENO ASG.PNO = PROJ.PNO
Hỡnh 2.2-1b. Đồ thị nối của 2.2-1a
ASG EMP PROJ RESULT RESP EMP.ENO = ASG.ENO PNAME = “CAD/CAM” ENAME TITLE = “Programmer” DUR36 Hỡnh 2.2-2. Đồ thị vấn tin khụng liờn thụng
Dựa vào đồ thị vấn tin 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 vấn tin.
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
2.2.1.3. Loại bỏ dư thừa
Cõu vấn tin của người sử dụng thường được diễn tả trờn một khung nhỡn cú thể được bổ sung thờm nhiều vị từ để cú được sự tương ứng khung nhỡn - quan hệ, bảo đảm được tớnh toàn vẹn ngữ nghĩa và bảo mật. Khi bổ sung như vậy cú thể sinh ra cỏc vị trớ dư thừa. Cỏc vị trớ dư thừa cần phải loại bỏ. Người ta cú thể loại bỏ vị trớ dư thừa khi ỏp dụng cỏc quy tắc luỹ đẳng sau:
1. p p p 2. p p p 3. p ^ T p 4. pF p 5. p F F 6. pT T 7. pp F 8. pp T 9. p1 (p1 p2) p1 10 .p1 (p1p2) p1 Vớ dụ 2.2-5:
Cho cõu vấn tin SQL như sau: SELECT TITLE FROM EMP
AND ( TITLE = ”Programmer” OR TITLE = ”Elect.Eng.”)
AND NOT ( TITLE = “Elect.Eng.”)) OR ENAME = “J.Doe”
Cú thể đơn giản hoỏ nhờ cỏc quy tắc trờn và trở thành SELECT TITLE
FROM EMP
WHERE ENAME = “J.Doe” Đặt p1 = TITLE = ”programmer” p2= TITLE = ”Elect.Eng.” p3=ENAME = ”J.Doe” Thỡ cõu vấn tin bậc thấp là:
(p1^(p1 p2)^ p2) p3 = p3 ; Theo quy tắc luỹ đẳng 5 Vỡ (p1^(p1 p2)^ p2) v P3 =
(p1^((p1 ^ p2) v (p2 ^ p2)) v p3 = (p1^p1^ p2) v p3
Áp dụng quy tắc 7 → (F ^ p2) v (p1 ^ F) v p3 ↔ F F p3 ↔ p3.
2.2.1.4. Viết lại cõu vấn tin
Viết lại cõu vấn tin bằng đại số quan hệ được chia làm hai bước như sau i/ Biến đổi cõu vấn tin từ phộp tớnh quan hệ thành đại số quan hệ
ii/ Cấu trỳc lại cõu vấn tin đại số nhằm cải thiện hiệu năng.
Định nghĩa cõy toỏn tử:
Một cõy toỏn tử là cõy với mỗi nỳt lỏ biểu thị cho một quan hệ được lưu trong cơ sở dữ liệu, nỳt khụng phải là lỏ biểu thị một quan hệ trung gian được sinh ra bởi phộp toỏn quan hệ. Chuỗi cỏc phộp toỏn để đi theo hướng lỏ đến gốc, gốc biểu thị kết quả vấn tin.
Cỏch biến đổi cõu vấn tin phộp tớnh quan hệ trở thành một cõy toỏn tử như sau:
i. Trước hết tạo ra cỏc nỳt lỏ là cỏc quan hệ trong SQL cỏc nỳt lỏ nằm sau FROM.
ii. Nỳt gốc được tạo ra như phộp chiếu chứa cỏc thuộc tớnh kết quả, cỏc thuộc tớnh này nằm sau SELECT.
iii. Lượng tử hoỏ (vị từ sau WHERE ) được chuyển thành cỏc phộp tớnh quan hệ thớch hợp (phộp chọn, phộp nối ,…) đi từ cỏc nỳt lỏ đến gốc. Chuỗi này cú thể được cho trực tiếp qua thứ tự xuất hiện của cỏc vị trớ và cỏc toỏn tử.
Vớ dụ 2.2-6:Từ hệ CSDL Cụng ty Điện toỏn (trang 184 [3])
Tỡm tờn cỏc nhõn viờn, trừ J.Doe đó làm cho dự ỏn CAD/CAM trong một hoặc hai năm
Cõu SQL là :
SELECT ENAME {Gốc } FROM ASG , EMP, PROJ
WHERE ASG.ENO = EMP.ENO AND ASG.PNO = PROJ.PNO AND ENAME ≠ “J.Doe”
AND PROJ.PNAME = “CAD/CAM” AND (DUR=12 OR DUR=24)
2.2.2. Cục bộ hoỏ dữ liệu phõn tỏn và cỏc phương phỏp rỳt gọn cõu vấn tin tin
Tầng cục bộ hoỏ dữ liệu chịu trỏch nhiệm chuyển cõu vấn tin đại số “trờn quan hệ toàn cục” sang cõu vấn tin đại số “trờn cỏc mảnh vật lý” (Cũng là cỏc quan hệ). Cục bộ hoỏ cú sử dụng cỏc thụng tin được lưu trong lược đồ phõn mảnh.
Một cỏch cục bộ hoỏ một vấn tin phõn tỏn khỏ thụ sơ là tạo ra một cõu vấn tin trong đú mối quan hệ toàn cục được thay bằng chương trỡnh cục bộ hoỏ của nú. Chương trỡnh cục bộ hoỏ là một chương trỡnh đại số quan hệ mà cỏc toỏn hạng là cỏc quan hệ nú được dựng để xõy dựng lại quan hệ toàn cục dựa trờn qui tắc tỏi thớch. Tuy nhiờn cỏch làm này khụng hiệu quả vỡ nhiều tỏi thiết cấu trỳc. Vỡ vậy chỳng ta sẽ dựng cỏc kỹ thuật rỳt gọn.
DUR=12 DUR=24 PNAME = ”CAD/CAM” ENAME ”J.Doe” PROJ ASG EMP Hỡnh 2.2-3. Vớ dụ về cõy toỏn tử ENAME Chọn Nối Chiếu PNO ENO
2.2.2.1. Rỳt gọn cho phõn mảnh ngang nguyờn thuỷ
Phõn mảnh ngang một quan hệ dựa trờn cỏc vị từ chọn.
Vớ dụ 2.2-7:Từ hệ CSDL Cụng ty Điện toỏn (trang 184 [3])
Quan hệ EMP cú thể được tỏch thành ba mảnh ngang như sau EMPH1 = ENO “E3” (EMP)
EMPH2 = “E3” < ENO “E6” (EMP) EMPH3 = ENO “E6” (EMP)
Chương trỡnh cục bộ hoỏ cho phõn mảnh ngang trờn là hợp cỏc mảnh lại: EMP = EMPH1 EMPH2 EMPH3
Vỡ vậy cõu vấn tin gốc thực hiện trờn EMP sẽ được thực hiện trờn EMPH1
EMPH2 EMPH3
Rỳt gọn vấn tin trờn cỏc quan hệ phõn mảnh ngang chủ yếu là xỏc định, sau khi đó tỏi cấu trỳc lại cõy con, xem cõy nào tạo ra quan hệ rỗng thỡ bỏ cõy con đú đi.
2.2.2.1.1. Rỳt gọn với phộp chọn
Nếu chọn trờn cỏc mảnh cú vị từ mõu thuẫn với vị từ phõn mảnh sẽ sinh ra cỏc quan hệ rỗng. Cho quan hệ R được phõn mảnh ngang thành RH1, RH2,…, RHn trong đú RHi = Pi(R).
Qui tắc 1:
Pi(RHj) = nếu x R: (pi(x) pj(x))
Trong đú pi(x) là vị từ chọn và pj(x) là vị từ phõn mảnh cũn x biểu thị một bộ (bản ghi), khi viết p(x) cú nghĩa là “vị từ p đỳng với x”.
Chẳng hạn vị từ chọn ENO = “E1” mõu thuẫn với cỏc vị từ phõn mảnh EMPH2 và EMPH3 (nghĩa là khụng cú bộ nào trong EMPH2 và EMPH3 thoả vị từ chọn ENO = “E1”). (xem vớ dụ 2.2-7)
Vớ dụ 2.2-8: Từ hệ CSDL Cụng ty Điện toỏn (trang 184 [3])Rỳt gọn cho phõn mảnh ngang khi dựng cõu vấn tin mẫu sau:
SELECT * FROM EMP
WHERE ENO = “E5”
Chương trỡnh cục bộ húa cho phõn mảnh ngang EMP = EMPH1 EMPH2
EMPH3 cho ra cõy vấn tin gốc (hỡnh 2.2-4a). Bằng cỏch hoỏn vị phộp chọn với phộp hợp (hỡnh 2.2-4b), chỳng ta dễ dàng phỏt hiện ra rằng vị từ chọn
ENO = “E5” mõu thuẫn với vị từ phõn mảnh EMPH1 (ENO “E3”)và vị từ phõn mảnh EMPH3 (ENO “E6”), do vậy tạo ra quan hệ rỗng. Cõu vấn tin bấy giờ chỉ cần ỏp dụng trờn EMPH2 (hỡnh 2.2-4c).
2.2.2.1.2. Rỳt gọn với phộp nối
Nối trờn cỏc quan hệ phõn mảnh ngang cú thể được đơn giản khi cỏc quan hệ nối được phõn mảnh theo thuộc tớnh nối. Đơn giỏn húa gồm cú phõn phối nối trờn cỏc hợp rồi bỏ đi cỏc nụi vụ dụng. Từ phộp phõn phối nối và hợp:
(R1 R2) S = (R1 S) (R2 S) , trong đú Ri là cỏc mảnh của Rcũn Slà một quan hệ. Cỏc hợp cú thể được di chuyển trờn cõy toỏn tử để tất cả cỏc nối cú thể cú của cỏc mảnh đều thấy được. Cỏc nối vụ dụng cú thể xỏc định được khi lượng từ hoỏ của cỏc mảnh nối cú mõu thuẫn. Gả sử rằng cỏc
Hỡnh 2.2-4. Rỳt gọn cho phõn mảnh ngang (với phộp chọn)
(c) Vấn tin rỳt gọn
ENO = “E5”
EMPH2 (a) Vấn tin gốc
ENO = “E5”
EMPH1 EMPH2 EMPH3
(b) Vấn tin đó đổi cho ENO = “E5”
EMPH1 EMPH2 EMPH3
mảnh Ri, Rj được định nghĩa tương ứng theo cỏc vị từ pi, pj trờn cựng một quan hệ, qui tắc đơn giản hoỏ cú thể được phỏt biểu như sau:
Qui tắc 2:
Ri Rj = nếu x Ri, y r Rj: (pi(x) pj(y))
Vỡ thế việc xỏc định cỏc nối vụ dụng cú thể được thực hiện bằng cỏch chỉ xột cỏc vị từ của cỏc mảnh. Áp dụng qui tắc này cho phộp nối hai quan hệ được cài đặt như cỏc nối từng phần song song cho cỏc mảnh. Cõu vấn tin rỳt gọn khụng phải lỳc nào cũng tốt hơn (nghĩa là đơn giản hơn) cõu vắn tin gốc. Cõu vấn tin gốc sẽ tết hơn khi cú quỏ nhiều nối từng phần trong cõu vấn tin rỳt gọn. Điều này nảy sinh khi cú rất ớt cỏc vị từ phõn mảnh mõu thuẫn. Trường hợp xấu nhất xảy ra khi mỗi mảnh của quan hệ này phải được nối với mỗi mảnh của quan hệ kia. Như thế nú giống như lấy tớch Descartes của hai tập mảnh, với mỗi tập tương ứng với một quan hệ. Cõu vấn tin rỳt gọn sẽ tốt hơn khi cú ớt cỏc nối từng phần. Vớ dụ: nếu cả hai quan hệ được phõn mảnh nhờ cựng một vị từ, số lượng cỏc nối từng phần bằng với số lượng cỏc mảnh của mỗi quan hệ. Ưu điểm của cõu vấn tin rỳt gọn là cỏc nối từng
Vớ dụ 2.2-9: Từ hệ CSDL Cụng ty Điện toỏn (trang 184 [3])
Giả sử EMP được phõn mảnh thành EMPH1, EMPH2 và EMPH3 như sau : EMPH1 = ENO “E3” (EMP) ; pEMPH1 = (ENO “E3”)
EMPH2 = “E3” < ENO “E6” (EMP) ; pEMPH2 = (“E3” < ENO “E6”) EMPH3 = ENO “E6” (EMP) ; pEMPH3 = (“E6” < ENO)
và quan hệ ASG được phõn mảnh ngang như sau:
ASGH1 = ENO “E3” (ASG) ; pASGH1 = (ENO “E3”) ASGH2 = ENO “E3” (ASG) ; pASGH2 = (ENO “E3”)
Như vậy EMPH1 và ASGH1 được định nghĩa bởi cựng một vị từ. Ngoài ra vị từ định nghĩa ASGH2 là hợp của cỏc vị từ định nghĩa mảnh EMPH2 và EMPH3. Bõy giờ xột cõu vấn tin nối
SELECT *
FROM EMP, ASG
WHERE EMP.ENO = ASG.ENO
Cõu vấn tin gốc tương đương được trỡnh bày trong hỡnh 2.5a. Cõu vấn tin rỳt gọn bằng cỏch phõn phối cỏc nối trờn hợp và việc ỏp dụng qui tắc 2: pEMPH1pASGH1 = (ENO “E3”) (ENO “E3”) = True
pEMPH1pASGH2 = (“E3” ENO) (“E3” > ENO) = False quan hệ rỗng pEMPH2pASGH1 =(“E3”< ENO “E6”)(ENO“E3”) = False quan hệ rỗng pEMPH2pASGH2 = (“E3” < ENO “E6”) (ENO “E3”) = True
pEMPH3pASGH1 = (“E6” < ENO) (ENO “E3”) = False quan hệ rỗng pEMPH3pASGH2 = (“E6” < ENO) (ENO “E3”) = True
Kết quả rỳt gọn ở hỡnh 2.2-5.
EMPH1 ASGH1 EMPH2 ASGH2 EMPH3 ASGH2
ENO
ENO ENO
EMPH1 EMPH2 EMPH3 ASGH1 ASGH2
Hỡnh 2.2-5a. Vấn tin gốc
ENO
2.2.2.2. Rỳt gọn cho phõn mảnh dọc
Phõn mảnh dọc một quan hệ dựa trờn cỏc thuộc tớnh chiếu. Mỗi mảnh dọc là kết quả chiếu lờn một tập con thuộc tớnh, một tập thuộc tớnh được dựng để tạo ra mảnh dọc luụn cú mặt của tập thuộc tớnh khúa chớnh. Toỏn tử xõy dựng lại quan hệ gốc từ cỏc mảnh dọc là nối qua tập thuộc tớnh khúa này. Chương trỡnh cục bộ hoỏ (tỏi thiết lại quan hệ ban đầu) cho một quan hệ phõn mảnh dọc là phộp nối.
Vớ dụ 2.2-10: Từ hệ CSDL Cụng ty Điện toỏn (trang 184 [3])
Quan hệ EMP cú thể được phõn thành hai mảnh dọc, trong đú thuộc tớnh khúa ENO phải cú mặt trong mọi mảnh dọc.
EMPV1 = ENO , ENAME (EMP) EMPV2 = ENO , TITLE (EMP) Chương trỡnh cục bộ húa là EMP = EMPV1 EMPV2
Tương tự như phõn mảnh ngang, cỏc vấn tin trờn cỏc mảnh dọc cú thể được rỳt gọn bằng cỏch xỏc định cỏc quan hệ trung gian vụ dụng và loại bỏ cỏc cõy con đó sinh ra chỳng. Phộp chiếu trờn một mảnh dọc khụng cú thuộc tớnh chung với cỏc thuộc tớnh chiếu (trừ khúa của quan hệ) sinh ra cỏc quan hệ vụ dụng, mặc dự khụng phải là quan hệ rỗng. Cho trước quan hệ R(A) | A =