Tải bản đầy đủ (.pdf) (10 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (207.77 KB, 10 trang )

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, TProject 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


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


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<=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 59



LUAÄN VAÊN TOÁT NGHIEÄP
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=A
P:

(T,N,S,P)
{+,-,*,/,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}
{A,B,C,D,E,K,L,F,W,R,X,Y, O,U,V,Z,H,M,Q}

Trang 60


LUẬN VĂN TỐT NGHIỆP
A ->
B ->

Q ->

context B display K|context B C display K
(1)
B C|Z(B)|Q|employee|department|project
(2)
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 -> >|<|>=|<=|!=|=
(11)
X -> 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 sốt q 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ụ
q 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, ...
Ngồ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


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 -> >|<|>=|<=|!=|=
(11)
X -> 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


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


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


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


LUẬN VĂN TỐT NGHIỆ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 tố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 qt
và tồ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



×