intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

XỬ LÝ CÂU TRUY VẤN BẰNG PHÉP TOÁN ĐẠI SỐ KẾT HỢP VỚI THỜI GIAN

Chia sẻ: Vu Dinh Hiep | Ngày: | Loại File: PDF | Số trang:10

113
lượt xem
8
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tìm hiểu các phép toán đại số kết hợp thời gian Thiết kế CSDL đối tượng cho một ứng dụng Xây dựng các luật sinh để xử lý câu truy vấn trên ứng dụng minh họa

Chủ đề:
Lưu

Nội dung Text: XỬ LÝ CÂU TRUY VẤN BẰNG PHÉP TOÁN ĐẠI SỐ KẾT HỢP VỚI THỜI GIAN

  1. LUAÄN VAÊN TOÁT NGHIEÄP 4- Xây dựng các công cụ phục vụ quá trình xử lý dữ liệu : Các công cụ chính là các toán tử và các phép toán đại số được liệt kê cụ thể như sau : a- Toán tử : - Các toán tử thực hiện quá trình hình thành nguyên mẫu : - Phép toán T-Associate : Ta xây dựng phép toán này là 1 hàm với 2 thông số mà mỗi thông số là tên lớp đối tượng được xác định trong sơ đồ EER. Để thực hiện phép toán này, ta thực hiện các bước sau : (1) Xây dựng 1 danh sách gồm 3 thành phần, mỗi thành phần là ID duy nhất của mỗi loại đối tượng cùng với khoảng thời gian chung. (2) Xem xét trên mô hình đối tượng đã được xây dựng sẵn các đối tượng có quan hệ trực tiếp với nhau trong cùng 1 khoảng thời gian sẽ được trích ra và lưu vào danh sách đã được tạo ở bước 1. - Phép toán T-Complete : Ta xây dựng phép toán này là 1 hàm với 2 thông số mà mỗi thông số là tên lớp đối tượng được xác định trong sơ đồ EER, phép toán này được thực hiện với các bước sau : (1) Xây dựng 1 danh sách gồm 3 thành phần, mỗi thành phần là ID duy nhất của mỗi loại đối tượng cùng với khoảng thời gian chung. (2) Thực hiện việc kết giữa 2 lớp đối t ượng (khai báo trong thông số) dựa trên mô hình đối tượng đã được xây dựng sẵn theo quan hệ thời gian. (3) Xây dựng lại phép toán T-Associate giữ 2 lớp đối tượng trên. (4) Loại bỏ những quan hệ đã có trong phép toán T-Associate. - Phép toán T-Nonassociate : Ta xây dựng phép toán này là 1 hàm với 2 thông số A và B mà A và B là tên lớp đối tượng được xác định trong đồ thị đối t ượng mà chúng có quan hệ trực tiếp với nhau. Để thực hiện phép toán này, ta sử dụng các phép toán T-Associate, T-Complete, T- Project và T-Difference, theo các bước sau : (1) Thực hiện phép toán T-Associate giữa 2 lớp đối tượng A và B và kết quả được lưu trong 1 lớp đối tượng mới C. (2) Thực hiện phép toán T-Project trên các thuộc tính của A của lớp đối tượng C để tạo ra lớp đối tượng D. (3) Áp dụng phép toán T-Difference giữa lớp đối tượng A và D để tạo ra lớp đối tượng E. (4) Ta thực hiện lại bước 2 và 3 đối với lớp đối tượng B để tạo ra 1 lớp đối tượng mới E’. (5) Cuối cùng thực hiện phép toán T-Complete giữa E và E’ để cho ra 1 lớp đối t ượng mới là kết quả của phép toán T-Nonassociate. - Các toán tử thao tác mẫu : - Phép toán T-Join : Phép toán này thực hiện trên những lớp đối tượng quan hệ phức tạp mà được tạo ra từ các lớp đối tượng cơ bản. Ta xây dựng phép toán này thành 1 hàm bao gồm 2 thông số là tên của lớp đối tượng A và B. Để thực hiện phép toán này ta theo các bước sau : 1. Xác định các thành phần quan hệ trong cả 2 lớp đối t ượng A và B. (2) Ta thực hiện phép kết giữa A và B theo các thành phần quan hệ đã được xác định ở bước 1 và theo khoảng thời gian chung. - Phép toán T-Project : Ta xây dựng phép toán này là 1 hàm với 2 thông số sau : Trang 57
  2. LUAÄN VAÊN TOÁT NGHIEÄP Thông số thứ 1 : là tên 1 thành phần của lớp đối tượng. Thông số thứ 2 : là lớp đối tượng cần thao tác. Để thực hiện phép toán này, ta làm theo các bước sau : (1) Xây dựng 1 danh sách gồm 3 thành phần, mỗi thành phần là ID duy nhất của mỗi loại đối tượng cùng với khoảng thời gian chung. Dựa vào thông số thứ 1 để xác định thành phần nào của lớp đối tượng được lưu giữ.lớp đối tượng được thao tác cùng thuộc tính của nó (nếu có). Kết quả tạo ra 1 lớp đối t ượng mới. (2) Dựa vào thông số thứ 1 để xác định thành phần nào của lớp đối tượng được lưu giữ và dựa vào thông số thứ 2, ta duyệt trên lớp đối tượng để chọn ra thành phần của lớp đối tượng đó và lưu trữ trong danh sách đã xây dựng sẵn cùng với khoảng thời gian. - Phép toán T-Select : Ta xây dựng phép toán này là 1 hàm bao gồm 5 thông số như sau : a. Thông số thứ 1 : tên thuộc tính đối tượng. b. Thông số thứ 2 : toán tử so sánh như ‘=‘, ‘>‘, ‘=‘, ‘
  3. LUAÄN VAÊN TOÁT NGHIEÄP (3) Loại trừ những phần tử trùng lắp trên đối tượng mới dựa vào đối tượng mới tạo và đối tượng được khai báo trong thông số thứ 2. - Phép toán T-Intersect : Phép toán này thực hiện trên những lớp đối tượng mà được tạo ra từ các lớp đối tượng cơ bản. Ta xây dựng phép toán này thành 1 hàm bao gồm 2 thông số, trong đó thông số là tên của lớp đối tượng quan hệ phức tạp A và B. Để thực hiện phép toán này ta theo các bước sau : (1) Dựa vào thông số thứ 1 và 2 ta xác định các lớp đối tượng A và B cần thao tác. (2) Xây dựng 1 danh sách chỉ bao gồm những phần tử mà có tất cả các thành phần trùng nhau từ đối tượng A và B và phải có khoảng thời gian chung. b- Các phép toán đại số : - Hàm đặc tả thời gian : INTERVAL : Hàm này để xác định khoảng thời gian chung của các thể hiện trong lớp đối tượng. Hàm này có 1 đối số là tên của lớp đối tượng, dựa vào đó ta sẽ lấy được khoảng thời gian chung của của các thể hiện trong lớp đối t ượng đó. Nếu chúng không có khoảng thời gian chung sẽ trả về trị [0,0]. - Các phép toán so sánh thời gian : AFTER : Hàm này bao gồm 2 thông số [T1,T2], [S1,S2] là khoảng thời gian, được dùng để xác định thời điểm T1 > S1 hay không ?. Hàm trả về kiểu luận lý là True nếu đúng và ngược lại trả về là False. BEFORE : Tương tự như hàm AFTER, cũng bao gồm 2 thông số [T1,T2], [S1,S2]. Nếu T1 < S1 thì có nghĩa là đúng và kết quả trả về là TRUE, ngược lại kết quả trả về là FALSE. FOLLOWING : Đây là hàm dùng để xác định thứ tự của 2 khoảng thời gian riêng biệt. Hàm này bao gồm 2 thông số là khoảng thời gian T[T1,T2] và S[S1,S2]. Hàm này trả về kết quả kiểu Boolean, cụ thể là nếu S2
  4. LUAÄN VAÊN TOÁT NGHIEÄP quả kiểu Boolean là TRUE nếu T1
  5. LUAÄN VAÊN TOÁT NGHIEÄP A -> context B display K|context B C display K (1) B -> B C|Z(B)|Q|employee|department|project (2) Q -> Q C|Z(Q)|Q Y Q|employee L department| employee L project|department L project (3) C -> when M|where E|when M where E (4) E -> E and E|employee.salary W F|U W O|X M (5) K -> employee.salary|employee.salary,K|U|U,K|D|D,K (6) Y -> tjoin|tintersect|tunion|tdifference (7) L -> tassociate|tcomplete|tnonassociate (8) F -> F + H|F – H|H|V (9) Z -> interval|first|last|bfirst|blast|tmax|tmin (10) W -> >|=| before|after|following|precede (12) H -> H * V|H / V|(F)|V (13) M -> R|Z(B) (14) R -> start time stop (15) O -> string (16) D -> employee|department|project (17) U -> employee.id|employee.name|employee.dept_employee| employee.dept_manager|employee.proj_employee| employee.proj_manager|department.id| department.name|department.dept_employee| department.dept_manager|department.manage_proj| project.id|project.name|project.proj_employee| project.proj_manager|project.manage_proj (18) V -> number (19) Để kiểm soát quá trình nhập, ta xây dựng các sẵn các mẫu theo văn phạm G trên phục vụ quá trình nhập câu truy vấn. Người nhập chỉ có thể nhập thông qua các mẫu này. Mỗi mẫu sẽ chứa đựng 1 chuổi cố định và khác nhau để biểu diễn cho các ký tự chưa kết thúc, ký tự kết thúc, tên các lớp, thuộc tính, ... Ngoài ra để xử lý câu truy vấn, ta xây dựng thêm văn phạm G’ như sau : G’ = (T,N,S,P) T= {+,-,*,/,when,where,display,before,after,following,precede, cross_following,cross_precede,tjoin,tintersect,tunion,tdifference, tassociate,tproject,tcomplete,tnonassociate,interval,first,last,bfirst,blast, time,and,tmax,tmin,employee,department,project,employee.id, employee.name,employee.dept_employee,employee.dept_manager, employee.proj_employee,employee.proj_manager,department.id, department.name,department.dept_employee,department.dept_manager,departme nt.manage_proj,project.id,project.name,project.proj_employee, project.proj_manager,project.manage_proj,number,string} N = {A,B,C,D,E,K,L,F,W,R,X,Y, O,U,V,Z,H,M,Q} S=A P: A -> display K B|display K B C (1) B -> C B|Z(B)|Q|employee|department|project (2) Trang 61
  6. LUAÄN VAÊN TOÁT NGHIEÄP Q -> C Q|Z(Q)|Y Q Q|L employee department| L employee project|L department project (3) C -> when M|where E|when M where E (4) E -> E and E|W employee.salary F|W U O|X M (5) K -> employee.salary|employee.salary,K|U|U,K|D|D,K (6) Y -> tjoin|tintersect|tunion|tdifference (7) L -> tassociate|tcomplete|tnonassociate (8) F -> + F H|- F H|H|V (9) Z -> interval|first|last|bfirst|blast|tmax|tmin (10) W -> >|=| before|after|following|precede (12) H -> * H V|/ H V|(F)|V (13) M -> R|Z(B) (14) R -> time start stop (15) O -> string (16) D -> employee|department|project (17) U -> employee.id|employee.name|employee.dept_employee| employee.dept_manager|employee.proj_employee| employee.proj_manager|department.id| department.name|department.dept_employee| department.dept_manager|department.manage_proj| project.id|project.name|project.proj_employee| project.proj_manager|project.manage_proj (18) V -> number (19) Dưới đây ta phân tích 1 số ví dụ sử dụng văn phạm G và G’ trên : Ví dụ 1 : Để nhập câu truy vấn sau : "Tìm kiếm lương của những người trong công ty mà làm việc vào thời điểm mà nhân viên EMP002 lần đầu tiên làm việc thuộc phòng DEP001". Câu yêu cầu này có thể chuyển đổi sang câu truy vấn dưới đây : context Employee when first (employee tassociate department where employee.id = "emp002" and department.id = "dep001") display employee.salary Quá trình triển khai câu nhập như sau : (1) -> context B C display K {display K C B} (2) -> context employee C display K {display K C employee} (4) -> context employee when M display K{display K when M employee} (14) -> context employee when Z(B) display K{display K when Z(B) employee} (10) -> context employee when first (B) display K {display K when first (B) employee} (2) -> context employee when first (BC) display K {display K when first(CB) employee} (3) -> context employee when first (QC) display K {display K when first (CQ) employee} (3) -> context employee when first (employee L department C) display K Trang 62
  7. LUAÄN VAÊN TOÁT NGHIEÄP {display K when first (C L employee department) employee} (8) -> context employee when first (employee tassociate department C) display K {display K when first (C tassociate employee department) employee} (4) -> context employee when first(employee tassociate department where E) display K {display K when first (where E tassociate employee department) employee} (5) -> context employee when first (employee tassociate department where E and E) display K {display K when first (where E and E tassociate employee department) employee} (5) -> context employee when first (employee tassociate department where U W O and E) display K {display K when first (where W U O and E tassociate employee department) employee} (18) -> context employee when first(employee tassociate department where employee.id U O and E) display K {display K when first(where W employee.id O and E tassociate employee department) employee} (11) -> context employee when first(employee tassociate department where employee.id = O and E) display K {display K when first(where = employee.id O and E tassociate employee department) employee} (16) -> context employee when first(employee tassociate department where employee.id = "emp002" and E) display K {display K when first (where = employee.id "emp002" and E tassociate employee department) employee} (5) -> context employee when first(employee tassociate department where employee.id = "emp002" and U W O) display K {display K when first (where = employee.id "emp002" and W U O tassociate employee department) employee} (18) -> context employee when first (employee tassociate department where employee.id = "emp002" and department.id W O) display K {display K when first (where = employee.id "emp002" and W department.id O tassociate employee department) employee} (11) -> context employee when first (employee tassociate department where employee.id = "emp002" and department.id = O) display K {display K when first (where = employee.id "emp002" and = department.id O tassociate employee department) employee} (16) -> context employee when first (employee tassociate department where employee.id = "emp002" and department.id = "dep001") display K {display K when first (where = employee.id "emp002" and = department.id "dep001" tassociate employee department) employee} (6) -> context employee when first (employee tassociate department where employee.id = "emp002" and department.id = "dep001") display employee.salary {display employee.salary when first (where = employee.id "emp002" and = department.id "dep001" tassociate employee department) employee} Từ đây ta xây dựng cây cú pháp sau : Trang 63
  8. LUAÄN VAÊN TOÁT NGHIEÄP Để xử lý câu truy vấn trên, chương trình sẽ thực hiện các bước sau : 2. Thực hiện phép toán Tassociate("employee","department") để tạo ra danh sách A. 3. Thực hiện phép toán Tselect("department.id","=","dep001",nil,A) để tạo ra danh sách B. 4. Thực hiện phép toán Tselect("employee.id","=","emp002",nil,B) để tạo ra danh sách C. 5. Thực hiện phép toán thời gian first(C) để tạo ra danh sách D chứa 1 phần tử 6. Thực hiện phép toán Tselect("","","",D,employee) để lọc ra những nhân viên trong danh sách employee thỏa điều kiện thời gian trong danh sách D và hình thành danh sách E. 7. Xuất ra màn hình các phần tử trong danh sách E. Ví dụ 2 : Thực hiện câu yêu cầu sau : "Cho biết phòng nào đã quản lý dự án ngắn nhất trong năm 1999". Câu này được chuyển thành câu truy vấn sau : context tmin(department tassociate project when 1/1/99 time 31/12/99) display department Quá trình triển khai như sau : (1) -> context B display K {display K B} (2) -> context Z(B) display K {display K Z(B)} (2) -> context Z(BC) display K {display K Z(CB)} (10) -> context tmin(BC) display K {display K tmin(CB)} (2) -> context tmin(QC) display K {display K C tmin(CQ)} (3) -> context tmin(department L project C) display K {display K tmin(C L department project)} Trang 64
  9. LUAÄN VAÊN TOÁT NGHIEÄP (8) -> context tmin(department tassociate project C)display K {display K tmin(C tassociate department project)} (4) -> context tmin(department tassociate project when M) display K {display K tmin(when M tassociate department project)} (14) ->context tmin(department tassociate project when R) display K {display K tmin(when R tassociate department project)} (15)-> context tmin(department tassociate project when "1/1/99" time "31/12/99") displayK {display K tmin(when time "1/1/99" "31/12/99" tassociate department project)} (6)-> context tmin(department tassociate project when "1/1/99" time "31/12/99") display D {display D tmin(when time "1/1/99" "31/12/99" tassociate department project)} (17)-> context tmin(department tassociate project when "1/1/99" time "31/12/99") display department {display department tmin(when time "1/1/99" "31/12/99" tassociate department project)} Từ đây ta xây dựng cây cú pháp sau : Để xử lý câu truy vấn trên, chương trình sẽ thực hiện các bước sau : 1. Thực hiện phép toán Tassociate("department","project") để tạo ra danh sách A. 2. Thực hiện lệnh Intime("1/1/99","31/12/99") để tạo ra danh sách B. 3. Thực hiện phép toán Tselect("","","",B,A) để tạo ra danh sách C. 4. Thực hiện phép toán thời gian tmin(C) để tạo ra danh sách D chứa 1 phần tử 5. Xuất ra màn hình phần tử trong danh sách D. 6- Những khó khăn khi thực hiện đề tài : - Vì dạng đề tài mới nên gặp khó khăn trong việc định hướng xây dựng chương trình nên chương trình có những giới hạn về tính tổng quát, uyển chuyển. Mặt khác, vì thời gian thực hiện Trang 65
  10. LUAÄN VAÊN TOÁT NGHIEÄP đề tài có giới hạn nên việc t ìm kiếm tài liệu liên quan để t ìm hiểu, định hướng mở rộng đề tài bị hạn chế. - Trong việc xây dựng văn phạm để tạo câu truy vấn đa dạng với sự kết hợp của nhiều phép toán lồng nhau trong cùng 1 câu truy vấn, nên việc thử và kiểm tra không được tổng quát và toàn diện trong 1 thời gian ngắn. Do đó không thể lường được những sai sót có thể xảy ra. Trang 66
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2