1. Trang chủ
  2. » Công Nghệ Thông Tin

XỬ lý câu TRUY vấn BẰNG PHÉP TOÁN đại số kết hợp với THỜI GIAN

10 210 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 207,77 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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á

Trang 1

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 Associate, 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 :

Trang 2

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ư ‘=‘, ‘>‘, ‘<‘, ‘>=‘, ‘<=‘,’!=‘

c Thông số thứ 3 : giá trị cần so sánh

d Thông số thứ 4 : tên đối tượng hoặc hàm về thời gian

e Thông số thứ 5 : tên đối tượng cần thao tác

Để thực hiện hàm này, ta có các bưóc sau :

1 Sao chép danh sách dựa vào thông số thứ 5

(2) Dựa vào thông số thứ 2 (khác rỗng hay không ?) để xác định phép duyệt trên danh sách mới được sao chép

(3) Nếu thông số thứ 2 khác rỗng thì phép duyệt sẽ dựa vào thông số thứ 1

và 3 để kiểm tra 1 thuộc tính của 1 thành phần trong danh sách mới thỏa điều kiện Nếu thỏa điều kiện thì thành phần đó được giữ lại Ngược lại chúng sẽ bị xoá đi

(4) Nếu thông số thứ 2 bằng rỗng thì phép duyệt sẽ được căn cứ trên thông

số thứ 4 làm điều kiện về thời gian để giữ lại những phần tử trong danh sách thỏa điều kiện thời gian

- Phép toán T-Union :

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ố, trong đó thông số thứ 1 và 2 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) Dựa vào thông số thứ 1, 2 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 bao gồm cả 2 lớp đối tượng này

(3) Thực hiện phép toán loại trừ những phần tử trùng nhau

- Phép toán T-Difference :

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ố, trong đó 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) Dựa vào thông số thứ 1, 2 xác định các lớp đối tượng A và B cần thao tác

(2) Sao chép danh sách dựa vào thông số thứ 1

Trang 3

(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<=T1 thì trả về kết quả là TRUE, ngược lại kết quả trả về là FALSE

PRECEDE : Đâ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 T2<=S1 thì trả về kết quả là TRUE, ngược lại kết quả trả về là FALSE

CROSS_FOLLOWING : Đây là hàm dùng để xác định thứ tự của 2 khoảng thời gian

trùng lắp lên nhau 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 S1<=T1<=S2<=T2 thì trả về kết quả là TRUE, ngược lại kết quả trả về là FALSE

CROSS_PRECEDE : Đây là hàm dùng để xác định thứ tự của 2 khoảng thời gian trùng

lắp lên nhau 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 T1<=S1<=T2<=S2 thì trả về kết quả là TRUE, ngược lại kết quả trả về là FALSE

EQUAL : Hàm này dùng để xác định 2 khoảng thời gian trùng nhau Hàm này cũng bao

gồm 2 thông số là khoảng thời gian T[T1,T2], S[S1,S2] Hàm này trả về kết quả kiểu Boolean là TRUE nếu T1 = S1 và T2 = S2, các trường hợp khác sẽ trả về kết quả là FALSE

CONTAIN : Hàm này dùng để xác định 1 khoảng thời gian được chứa trong 1 khoảng

thời gian khác Hàm này bao gồm 2 thông số khoảng thời gian T[T1,T2], S[S1,S2] Hàm này trả

về kết quả kiểu Boolean là TRUE nếu S1<= T1<=T2<= S2, nghĩa là T chứa trong S, ngược lại kết quả trả về là FALSE

WITHIN : Hàm này dùng để xác định 1 khoảng thời gian bao gồm 1 khoảng thời gian

khác Hàm này bao gồm 2 thông số khoảng thời gian T[T1,T2], S[S1,S2] Hàm này trả về kết

Trang 4

quả kiểu Boolean là TRUE nếu T1<= S1<=S2<= T2, nghĩa là T bao gồm cả S, ngược lại kết quả trả về là FALSE

- Hàm sắp thứ tự :

FIRST : Hàm này sẽ trích ra 1 phần tử trong 1 danh sách mà phần tử này có thời điểm

bắt đầu là sớm nhất Hàm này bao gồm 1 thông số là 1 danh sách trong đó mỗi phần tử có chứa 1 khoảng thời gian

Để thực hiện hàm này ta dựa vào thời điểm bắt đầu của các khoảng thời gian, so sánh để chọn thời điểm bắt đầu là sớm nhất

LAST : Hàm này sẽ trích ra 1 phần tử trong 1 danh sách mà phần tử này có thời điểm bắt

đầu là trễ nhất Hàm này bao gồm 1 thông số là 1 danh sách trong đó mỗi phần tử có chứa 1 khoảng thời gian

Để thực hiện hàm này ta dựa vào thời điểm bắt đầu của các khoảng thời gian, so sánh để chọn thời điểm bắt đầu là trễ nhất

B-FIRST : Hàm này sẽ trích ra 1 phần tử trong 1 danh sách mà phần tử này có thời điểm

kết thúc là sớm nhất Hàm này bao gồm 1 thông số là 1 danh sách trong đó mỗi phần tử có chứa

1 khoảng thời gian

Để thực hiện hàm này ta dựa vào thời điểm kết thúc của các khoảng thời gian, so sánh để chọn thời điểm kết thúc là sớm nhất

B-LAST : Hàm này sẽ trích ra 1 phần tử trong 1 danh sách mà phần tử này có thời điểm

bắt đầu là trễ nhất Hàm này bao gồm 1 thông số là 1 danh sách trong đó mỗi phần tử có chứa 1 khoảng thời gian

Để thực hiện hàm này ta dựa vào thời điểm kết thúc của các khoảng thời gian, so sánh để chọn thời điểm kết thúc là trễ nhất

Tất cả các hàm sắp thứ tự có 1 thông số là tên của lớp đối tượng

- Hàm tính tổng :

TMIN : Hàm này có 1 đối số là tên lớp đối tượng Dựa vào tên này để xác định lớp đối

tượng cần thao tác, kế tiếp ta đi tìm thể hiện thỏa điều kiện e(T) - s(T) là nhỏ nhất Kết quả trả về

là 1 thể hiện duy nhất của lớp đối tượng đó

TMAX : Hàm này giống như hàm TMIN, tuy nhiên điều kiện để chọn lựa là e(T)-s(T) là

lớn nhất

5- Thiết kế văn phạm để nhập câu lệnh truy vấn và xử lý câu truy vấn :

Để thuận tiện cho việc nhập câu truy vấn đúng cú pháp ta xây dựng văn phạm G như sau :

G = (T,N,S,P)

T = {+,-,*,/,context,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 :

Trang 5

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|

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)

Z -> interval|first|last|bfirst|blast|tmax|tmin (10)

X -> before|after|following|precede (12)

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)

Để 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 :

B -> C B|Z(B)|Q|employee|department|project (2)

Trang 6

Q -> C Q|Z(Q)|Y Q Q|L employee department|

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)

Z -> interval|first|last|bfirst|blast|tmax|tmin (10)

X -> before|after|following|precede (12)

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)

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 7

{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 8

Để 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 9

(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

Trang 10

đề 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

Ngày đăng: 03/12/2015, 04:22

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm