Biên dịch câu truy vấn thời gian, thực thi trên hệ quản trị cơ sở dữ liệu

Trong bài báo trước [9], chúng tôi đã

đề xuất một tiểu ngôn ngữ truy vấn có yếu tố

thời gian SubTSQL để truy vấn và thao tác dữ

liệu trên cơ sở dữ liệu thời gian. Bài báo này

chúng tôi sử dụng mã nguồn mở Lex và Yacc

để xây dựng một trình biên dịch, trình biên

dịch này làm công việc biên dịch câu truy

vấn thời gian thành câu SQL trong Oracle.

Một trình biên dịch như thế dễ dàng tạo lập

và giảm tải cho người lập trình

pdf8 trang | Chia sẻ: luyenbuizn | Lượt xem: 1346 | Lượt tải: 0download
Nội dung tài liệu Biên dịch câu truy vấn thời gian, thực thi trên hệ quản trị cơ sở dữ liệu, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Khoa hoïc - kó thuaäät 37 *  TOÙM TAÉT: Trong baøi baùo tröôùc [9], chuùng toâi ñaõ ñeà xuaát moät tieåu ngoân ngöõ truy vaán coù yeáu toá thôøi gian SubTSQL ñeå truy vaán vaø thao taùc döõ lieäu treân cô sôû döõ lieäu thôøi gian. Baøi baùo naøy chuùng toâi söû duïng maõ nguoàn môû Lex vaø Yacc ñeå xaây döïng moät trình bieân dòch, trình bieân dòch naøy laøm coâng vieäc bieân dòch caâu truy vaán thôøi gian thaønh caâu SQL trong Oracle. Moät trình bieân dòch nhö theá deã daøng taïo laäp vaø giaûm taûi cho ngöôøi laäp trình.  ABSTRACT: In [9] we proposed the temporal query sublanguage SubTSQL that can work with temporal database. In this paper, we present to use Open source code Lex and Yacc that can support a complier so that the complier is easily built and reducing the working of programmer. This complier can convert temporal queries to Oracle SQL queries 1. GIÔÙI THIEÄU Thöïc teá, nhieàu öùng duïng treân cô sôû döõ lieäu (CSDL), maø caùc ñoái töôïng trong CSDL ñoù caàn gaén theâm yeáu toá thôøi gian [3]. Ví duï: nhöõng öùng duïng nhö: ngaân haøng, lòch chuyeán bay, quaûn lyù kho haøng, hoà sô beänh vieän, thò tröôøng chöùng khoaùn v.v..., thì yeáu toá thôøi gian gaén vôùi ñoái töôïng * Khoa Công nghệ Thông tin, Trường Đại học Công nghiệp TP. HCM laø moät thöïc teá (ñoái töôïng thay ñoåi döõ lieäu theo thôøi gian), caàn coù noù ñeå taêng möùc phong phuù vaø ngöõ nghóa cuûa döõ lieäu trong CSDL [4], [5], [9]. Hieän taïi, chöa coù moät heä quaûn trò cô sôû döõ lieäu (HQTCSDL) naøo hoã trôï moät caùch coù heä thoáng cho vieäc truy xuaát hay thao taùc döõ lieäu treân CSDL höôùng thôøi gian. Ngay caû Oracle 10g thì nhöõng caâu leänh coù hoã trôï thôøi gian cuõng khaù phöùc taïp, ngöôøi duøng caàn söû duïng nhieàu haøm thö vieän trong caâu truy vaán, hôn nöõa ñeå coù moät phieân baûn chính thöùc cuûa Oracle 10g toán chi phí raát cao. Caâu truy vaán coù yeáu toá thôøi gian, neáu ñöôïc vieát theo cuù phaùp cuûa moät HQTCSDL thì phöùc taïp (xem caâu truy vaán trong muïc 4.1), ngay caû ñoái vôùi laäp trình vieân chuyeân nghieäp. Ñeå ngöôøi duøng deã daøng vieát caâu truy vaán thôøi gian, caàn xaây döïng moät trình bieân dòch coù tính heä thoáng, cuõng nhö deã daøng môû roäng noù ñeå bieân dòch cho nhieàu daïng caâu truy vaán khaùc. Neáu vieát moät trình bieân dòch nhö theá theo truyeàn thoáng, toán keùm nhieàu chi phí. Do vaäy, söû duïng phaàn meàm maõ nguoàn môû (PMMNM) laø moät phöông phaùp khaû thi ñeå xaây döïng trình bieân dòch. Hôn nöõa, Thuû töôùng chính phuû ñaõ pheâ duyeät Döï aùn toång theå öùng duïng vaø phaùt trieån PMMNM taïi Vieät Nam giai ñoaïn 2004-2008 (Quyeát ñònh soá 235/QÑ-TTg ngaøy 02/02/2004), moät trong nhöõng noäi dung quan troïng cuûa döï aùn laø ñaåy maïnh BIEÂN DÒCH CAÂU TRUY VAÁN THÔØI GIAN, THÖÏC THI TREÂN HEÄ QUAÛN TRÒ CÔ SÔÛ DÖÕ LIEÄU Phaïm Vaên Chung* Khoa hoïc - kó thuaäät 38 vieäc öùng duïng caùc PMMNM trong trieån khai caùc öùng duïng coâng ngheä thoâng tin taïi caùc ñôn vò, caùc toå chöùc nhaø nöôùc cuõng nhö trong caùc doanh nghieäp [8]. Baøi baùo naøy söû duïng PMMNM Lex vaø Yacc ñeå xaây döïng boä vaên phaïm cho tieåu ngoân ngöõ SubTSQL, maø chuùng toâi ñaõ ñeå xuaát tröôùc ñaây, noù coù cuù phaùp ñôn giaûn gaàn nhö caâu truy vaán thoâng thöôøng (chi tieát SubTSQL xem trong [9]), vaø bieân dòch caâu truy vaán SubTSQL, thaønh caâu truy vaán theo cuù phaùp cuûa Oracle, sau ñoù duøng thö vieän OCI ñeå keát noái HQTCSDL Oracle qua laäp trình treân C++. Roäng hôn, coù theå truy vaán döõ lieäu theo thôøi gian treân baát kyø HQTCSDL naøo, mieãn laø ngoân ngöõ duøng ñeå laäp trình cho pheùp keát noái ñeán HQTCSDL ñoù. Phaàn coøn laïi cuûa baøi baùo goàm coù : Phaàn 2, xaây döïng trình bieân dòch baèng Lex vaø Yacc. Phaàn 3, keát noái CSDL qua thö vieän OCI. Phaàn 4, Hieän thöïc bieân dòch caâu truy vaán thôøi gian treân CSDL beänh vieän vaø cuoái cuøng laø keát luaän trong phaàn 5. 2. XAÂY DÖÏNG TRÌNH BIEÂN DÒCH DUØNG LEX VAØ YACC Xaây döïng trình bieân dòch Xaây döïng moät trình bieân dòch theo truyeàn thoáng (thoâng thöôøng) thöôøng toán raát nhieàu coâng söùc. Caùc böôùc cô baûn maø moät trình bieân dòch thoâng thöôøng phaûi thöïc hieän: - Ñoïc chuoãi nhaäp vaø taùch thaønh caùc token. - Döïa vaøo vaên phaïm vaø caùc token tieán haønh xaây döïng caây phaân tích cuù phaùp . - Döïa vaøo caây phaân tích cuù phaùp ñeå sinh ra maõ. Caùc böôùc xaây döïng trình bieân dòch ñöôïc minh hoïa nhö hình 1. Trong hình naøy, chuoãi nhaäp seõ ñöôïc chuyeån qua boä phaân tích töø vöïng ñeå phaân tích thaønh caùc token, sau ñoù caùc token seõ ñöôïc chuyeån sang boä phaân tích cuù phaùp, taïi ñaây döïa vaøo vaên phaïm vaø caùc token, noù tieán haønh xaây döïng caây phaân tích cuù phaùp. Cuoái cuøng, döïa vaøo caây phaân tích cuù phaùp, boä sinh maõ seõ sinh id3 Chuỗi nhập a = b + c * d Token id1 = id2 + id3 * id4 Bộ phân tích cú pháp Cây cú pháp = Bộ sinh mã id1 + * id4 id2 Sinh mã load id3 mul id4 add id2 store id1 Hình 1. Các bước mà một trình biên dịch thông thường thực hiện Bộ phân tích từ vựng Khoa hoïc - kó thuaäät 39 maõ töông öùng. Baøi baùo söû duïng Lex vaø Yacc laø hai PMMNM khaù thoâng duïng, qui trình xaây döïng trình bieân dòch ñöôïc trình baøy trong nhöõng phaàn sau . Xaây döïng trình bieân dòch duøng LEX vaø YACC Lex taïo ra boä phaân tích töø vöïng vôùi maõ C/C++ hoaëc Java. Lex duøng caùc maãu (pattern) ñeå so khôùp vôùi chuoãi nhaäp vaø bieán ñoåi chuoãi nhaäp thaønh caùc token töông öùng. Moät token coù moät maõ rieâng bieät nhaèm ñôn giaûn hoaù coâng vieäc xöû lyù. Khi Lex nhaän ra caùc danh hieäu (id) trong doøng döõ lieäu vaøo, noù nhaäp chuùng vaøo baûng danh bieåu. Baûng danh bieåu chöùa caùc thoâng tin khaùc nhö kieåu döõ lieäu (integer, real,…) vaø vò trí cuûa bieán trong boä nhôù. Moät khi danh hieäu ñöôïc söû duïng, caùc thoâng tin lieân quan ñeán noù ñöôïc truy xuaát thoâng qua chæ muïc trong baûng naøy. Yacc taïo ra boä phaân tích cuù phaùp vôùi maõ C/C++ hoaëc Java. Yacc duøng caùc luaät vaên phaïm maø moãi luaät cho pheùp phaân tích caùc token töø keát quaû cuûa Lex vaø taïo ra caây phaân tích cuù phaùp. Moät caây phaân tích cuù phaùp aùp ñaët caáu truùc coù thöù töï leân caùc token. Vieäc taïo ra caây phaân tích cuù phaùp laø moät böôùc quan troïng maø moät trình bieân dòch phaûi thöïc hieän nhö trong hình 1. Quy trình xaây döïng moät trình bieân dòch söû duïng Lex vaø Yacc [1],[4] ñöôïc trình baøy nhö hình 4. Giaû söû, caàn vieát moät trình bieân dòch coù teân laø bas. Duøng trình soïan thaûo (coù theå laø Parser Generator 2, cheùp töï do treân Internet), tröôùc tieân, xaùc ñònh taát caû caùc luaät, keát hôïp vôùi caùc maãu vaø ñaët chuùng trong taäp tin bas.l. cho Lex. Tieáp ñeán vieát caùc luaät vaên phaïm vaøo taäp tin bas.y cho YACC. Nhieäm vuï cuûa Yacc laø ñoïc caùc luaät vaên phaïm vaø ñònh nghóa caùc token, ghi chuùng vaøo taäp tin bas.y vaø sinh ra boä phaân tích cuù phaùp ñaët vaøo taäp tin y.tab.c, caùc token cuõng ñöôïc ñònh nghóa trong taäp tin y.tab.h. Nhieäm vuï cuûa Lex laø ñoïc caùc moâ taû maãu trong taäp tin bas.l vaø caùc ñònh nghóa token trong taäp tin y.tab.h ñeå taïo ra boä phaân tích töø vöïng ghi vaøo taäp tin Lex.yy.c. Cuoái cuøng, boä phaân tích töø vöïng vaø boä phaân tích cuù phaùp ñöôïc bieân dòch (duøng trình bieân dòch C/C++ hoaëc Java), taïo ra taäp tin thöïc thi bas.exe. Moãi luaät vaên phaïm khai baùo trong taäp tin bas.y ñeàu coù moät haønh ñoäng ngöõ nghóa töông öùng. Haønh ñoäng ngöõ nghóa ñoùng vai troø nhö moät nhö boä sinh maõ. Quaù trình sinh maõ coù nhieàu möùc, coù theå sinh maõ trung gian hoaëc sinh ra moät maõ khaùc, maõ maùy laø caáp sinh maõ thaáp nhaát, trong baøi baùo naøy seõ sinh ra maõ trung gian laø caâu truy vaán theo cuù phaùp cuûa Oracle. Xaây döïng boä phaân tích töø vöïng söû duïng Lex coù caáu truùc goàm 3 khoái nhö hình 2: %{ Caùc khai baùo C (C declaration) %% Caùc luaät Lex (Lex rules) %% Phaàn maõ C (Additional C code) Hình 2: Caáu truùc caùc khoái cho Lex Trong hình 2, khoái khai baùo C ñöôïc baét ñaàu bôûi %{ vaø keát thuùc bôûi }%; khoái luaät Lex baét ñaàu bôûi %% vaø keát thuùc bôûi %%; khoái maõ C vieát cuoái cuøng. Töông töï, xaây döïng boä phaân tích cuù phaùp söû duïng Yacc goàm 4 khoái, caùc khoái ñöôïc phaân caùch bôûi caùc kyù hieäu ñoùng môû khoái nhö hình 3, chi tieát veà moãi khoái cho moãi caáu truùc, xem trong [1],[4],[7]. %{ Caùc khai baùo C (C declarations) %} Caùc khai baùo Yacc (Yacc declarations) Khoa hoïc - kó thuaäät 40 Chương trình nguồn Trình biên dịch của Host language Tập tin đối tượng Liên kết với OCI Ứng dụng Thư viện OCI Oracle Sever %% Phaàn vaên phaïm (Grammar rules) %% Phaàn maõ C (Additional C code) Hình 3: Caáu truùc caùc khoái cho Yacc 3. KEÁT NOÁI CÔ SÔÛ DÖÕ LIEÄU DUØNG THÖ VIEÄN OCI Tieán trình phaùt trieån moät öùng duïng OCI Oracle laø moät heä quaûn trò cô sôû döõ lieäu lôùn coù beà daày thôøi gian vaø coù uy tín. Tuy nhieân ñeå söû duïng troïn goùi, ngöôøi duøng phaûi maát chi phí khaù lôùn. Thay vì phaûi mua troïn goùi, ngöôøi duøng chæ mua heä quaûn trò cô sôû döõ lieäu, khi ñoù chi phí seõ giaûm ñaùng keå. Vieäc xaây döïng caùc coâng cuï ñeå keát noái cô sôû döõ lieäu treân Oracle baèng ngoân ngöõ C (C ñöôïc coi nhö laø moät host language) döïa vaøo caùc haøm OCI [6] coù saün trong Oracle laø moät giaûi phaùp khaû thi, vì chính Oracle cuõng söû duïng OCI ñeå xaây döïng moät soá coâng cuï cho noù. OCI coù thö vieän khaù phong phuù, cho pheùp ngöôøi duøng phaùt trieån caùc öùng duïng truy caäp döõ lieäu khoâng thuû tuïc cuûa SQL baèng laäp trình thuû tuïc treân C/Java. OCI hoã trôï taát caû caùc caâu leänh ñònh nghóa döõ lieäu, thao taùc döõ lieäu, truy vaán, khaû naêng ñieàu khieån chuyeån taùc maø coù saün trong Oracle. Hình 5 minh hoïa tieán trình phaùt trieån moät öùng duïng OCI. Yacc Lex Trình biên dịch C/C++ y.tab.c bas.exe Lex.yy.c bas y.tab.h bas.y bas.l Hình 4. Quy trình xây dựng trình biên dịch sử dụng Lex và Yacc Hình 5: Tiến trình phát triển một ứng dụng OCI Khoa hoïc - kó thuaäät 41 Trong hình 5, töø chöông trình nguoàn, tieán haønh bieân dòch baèng moät host language, ñeå taïo ra caùc taäp tin ñoái töôïng, caùc taäp tin naøy tieáp tuïc ñöôïc lieân keát vôùi thö vieän OCI ñeå taïo öùng duïng, vaø öùng duïng coù khaû naêng truy xuaát ñeán CSDL Oracle server. Caùc böôùc laäp trình baèng OCI Ñeå keát noái CSDL duøng thö vieän OCI, caàn thöïc hieän caùc böôùc sau: khôûi taïo caùc tieán trình, khôûi taïo moâi tröôøng laøm vieäc, caáp phaùt caùc handle vaø caùc caáu truùc döõ lieäu caàn thieát vaø keát noái vôùi CSDL Oracle server. Baét ñaàu phieân laøm vieäc, caáp phaùt caâu leänh SQL vaø truy xuaát döõ lieäu. Keát thuùc phieân laøm vieäc, ngöôøi duøng ngaét keát noái vôùi Oracle server, khi ñoù caáu truùc döõ lieäu vaø caùc handle ñöôïc giaûi phoùng. Hoaït ñoäng cuûa OCI ñöôïc minh hoïa trong hình 6. Trong hình naøy, böôùc xöû lyù caâu leänh SQL vaø truy xuaát döõ lieäu laø khaù quan troïng. Moät trong haàu heát nhöõng nhieäm vuï phoå bieán cuûa moät chöông trình OCI laø chaáp nhaän vaø xöû lyù caâu leänh SQL, moät khi caùc handle caàn thieát ñaõ ñöôïc caáp phaùt vaø ñaõ keát noái ñöôïc vôùi Oracle server. Ñoàng thôøi vôùi moãi böôùc treân, OCI cung caáp caùc haøm caàn thieát töông öùng cho xöû lyù caâu leänh SQL, chi tieát coi trong [6]. 4. ÖÙNG DUÏNG Chuùng toâi ñaõ caøi ñaët thöû nghieäm nhöõng caâu truy vaán coù yeáu toá thôøi gian treân moâi tröôøng Visual C++ vôùi döõ lieäu thöïc cuûa beänh vieän Nhaân daân Gia Ñònh-TP.HCM, vaø coù nhöõng keát quûa toát. 4.1 Cuù phaùp cuûa caâu truy vaán SubTSQL Ñeå thöïc hieän bieân dòch caâu truy vaán baèng maõ nguoàn môû, phaàn naøy nhaéc laïi moät soá yù cô baûn veà SubTSQL, chi tieát coù theå xem trong [9]. Döõ lieäu thôøi gian ñöôïc caäp nhaät trong nhöõng baûng döõ lieäu cuûa moâ hình quan heä truyeàn thoáng, trong moãi baûng neáu coù döõ lieäu thôøi gian thì theâm vaøo 2 coät v_begin (thôøi gian baét ñaàu cuûa döõ lieäu ñöôïc sinh ra), vaø v_end (thôøi gian keát thuùc). Noùi moät caùch khaùc döõ lieäu (hay söï kieän) ñöôïc ghi trong baûng coù giaù trò ñuùng trong khoaûng thôøi gian töø v_begin ñeán v_end (xem baûng patient döôùi ñaây. Caâu truy vaán thôøi gian SubTSQL töông töï nhö nhöõng caâu SQL thoâng thöôøng, chæ theâm moät meänh ñeà WHEN ñeå thao taùc yeáu toá thôøi gian, yeáu toá thôøi gian laø vò trí töông ñoái giöõa hai khoaûng thôøi gian v_begin vaø v_end vaø noù tuaân theo nhöõng taân töø trong [2], cuï theå laø nhöõng taân töø: BEFORE, AFTER, DURING, CONTAINS, OVERLAPS, Khởi tạo tiến trình Khởi tạo môi trường Định vị các handle Kết nối với server Gửi câu SQL và xử lý Ngắt kết nối Giải phóng các handle và cấu trúc dữ liệu Hình 6: Những bước hoạt động của OCI Khoa hoïc - kó thuaäät 42 MEETS, STARTS, FINISHES, vaø EQUALS. Vaø sau ñaây laø moät soá ví duï cuï theå veà caâu truy vaán thôøi gian. - Caâu truy vaán SELECT, meänh ñeà WHEN duøng taân töø ‚DURING‛ SELECT manv, Hoten, V_begin, V_end FROM NhanVien WHEN NhanVien DURING (25/3/2000 , 25/5/2000) WHERE mapb = 'D8' ; - Caâu truy vaán UPDATE, meänh ñeà WHEN chæ ra thôøi gian caàn caäp nhaät UPDATE drugs set drug= 'dfdsf' WHEN (25/02/03,05/03/03,'dd/mm/yy') where p_id>0 - Caâu truy vaán DELETE, meänh ñeà WHEN chæ ra döõ lieäu caàn xoùa trong moät khoûang thôøi gian. DELETE from drugs WHEN(5/02/03,05/03/03,'dd/mm/yy') where p_id>0 Ví duï: Cho baûng döõ lieäu Patient vaø caâu truy vaán thôøi gian nhö sau Patient P_ ID problem department v_begin v_end J001 P1 D10 14/02/2000 01/03/2000 J001 P2 C2 10/03/2000 31/12/9999 P005 P3 D8 01/04/2000 12/05/2000 R006 P3 D8 13/02/2000 01/06/2000 SELECT p_id, problem, v_begin, v_end FROM patient WHEN patient DURING (25/3/2000 , 25/5/2000) WHERE department = 'D8' ; Caâu truy vaán treân caàn bieân dòch thaønh caâu Oracle-SQL SELECT p_id, problem, v_begin, v_end FROM patient WHERE department ='D8' AND ((patient.v_begin)> to_date(‘25/3/2000’,’’dd/mm/yyyy’) AND( (patient.v_end) <= to_date(‘25/5/2000’,’dd/mm/yyyy’)) OR (( patient.v_begin) >= to_date(‘25/3/2000’,’dd/mm/yyyy’)) AND (patient.v_end)< to_date(‘25/5/2000’,’dd/mm/yyyy’)); Trong ví duï naøy, phaàn chöõ in nghieâng, ñaäm trong meänh ñeà WHERE cuûa caâu Oracle-SQL chính laø noäi dung cuûa meänh ñeà WHEN ñöôïc vieát theo nhöõng taân töø so saùnh khoaûng thôøi gian nhö trong [2]. Ví duï naøy cho thaáy: moät caâu truy vaán thôøi gian ñöôïc vieát baèng caâu truy vaán thoâng thöôøng thì khaù phöùc taïp, raát deã maéc loãi, ngay caû nhöõng laäp trình vieân chuyeân nghieäp. Do vaäy, vieäc bieân dòch caâu SubTSQL baèng maõ nguoàn môû coù yù nghóa thieát thöïc, cuõng nhö caâu SubTSQL vôùi cuù phaùp ñôn giaûn, deã thaân thieän vôùi ngöôøi duøng (Nhöõng caâu truy vaán thôøi gian Update vaø Delete cuõng ñöôïc bieân dòch moät caùch töông töï nhö caâu truy vaán Select). 4.2 Kieán truùc trong caøi ñaët Ñeå thöïc hieän caøi ñaët, chuùng toâi kieán truùc moät moâ-ñun nhö hình 7, ñaët trong khung hình chöõ nhaät ñöôïc vieàn ñaäm baèng ñöôøng keùp, vaø noù ñöôïc ñaët treân ñænh cuûa HQTCSDL Oracle. Hôn nöõa moâ-ñun naøy, noù ñoäc laäp vôùi moïi HQTCSDL, neáu ñöôïc chænh laïi moät chuùt trong Yacc ñeå coù maõ sinh ra ñuùng vôùi cuù phaùp cuûa HQTCSDL caàn duøng. Khoa hoïc - kó thuaäät 43 Trong hình 7, tieán trình thöïc hieän caâu truy vaán bao goàm : Ngöôøi duøng nhaäp moät caâu leänh Q, sau ñoù Lex phaân tích Q thaønh caùc token. Yacc phaân tích cuù phaùp cuûa Q döïa treân cuù phaùp cuûa SubTSQL. Baát kì loãi naøo ñöôïc tìm thaáy trong quaù trình phaân tích seõ thoâng baùo. Neáu khoâng coù loãi thì Q ñöôïc göûi ñeán Boä sinh maõ, noù bieân dòch Q thaønh caâu leänh SQL cuûa Oracle, sau ñoù göûi ñeán heä quaûn trò CSDL Oracle thoâng qua moâ-ñun OCI, taïi ñaây noù nhaän caâu leänh SQL- Oracle vaø thöïc hieän treân Oracle ñeå laáy keát quaû traû veà. Cuoái cuøng Boä xöû lyù xuaát keát quaû cho ngöôøi duøng. 4.3 Giao dieän thöïc hieän caâu truy vaán Hình 8 chæ ra maøn hình giao dieän vôùi ngöôøi duøng ñeå thöïc hieän vaán tin treân CSDL höôùng thôøi gian, ñöôïc caøi ñaët trong Visual C++, ngöôøi duøng coù theå soaïn caâu truy vaán trong khung SubTSQL input, sau ñoù cho keát noái Oracle baèng nuùt Connect vaø thöïc thi baèng nuùt Execute, Keát quaû ñöôïc hieän thò trong Results. Neáu quaù trình bieân dòch hay thöïc thi treân Oracle coù loãi, thoâng baùo loãi ñöôïc hieån thò trong SQL output/Error output. 5. KEÁT LUAÄN Xaây döïng öùng duïng baèng söû duïng maõ nguoàn môû ñaõ giaûm ñöôïc nhieàu chi phí, hôn nöõa maõ nguoàn môû cho pheùp coù theå aùp duïng xaây döïng nhöõng öùng duïng khaùc nhau trong nhieàu laõnh vöïc. Trong baøi baùo naøy, söû duïng LEX vaø YACC bieân dòch nhöõng caâu leänh ñeå thöïc hieän nhöõng öùng duïng trong moâ hình CSDL höôùng thôøi gian. Vaø coøn coù nhieàu maõ nguoàn môû khaùc cho pheùp ngöôøi duøng söû duïng theo yeâu caàu rieâng cuûa moãi ngöôøi maø khoâng vi phaïm baûn quyeàn, vaø ñi vaøo khaù nhieàu laõnh vöïc öùng duïng thieát thöïc nhö: keá toaùn, phaùt trieån Web, chính phuû ñieän töû, coâng ngheä sinh hoïc, quaûn trò doanh nghieäp . . . coù theå xem chi tieát trong taäp san [8]. Trong chieàu höôùng Vieät Nam gia nhaäp WTO, thì vieäc phaùt trieån veà CNTT duøng maõ nguoàn môû laø moät loái ñi deã daøng coù nhieàu höùa heïn. Coâng vieäc tieáp theo cuûa chuùng toâi tieáp tuïc trieån khai öùng duïng maõ nguoàn môû ñeå xaây döïng theâm nhöõng caâu truy vaán cho vieäc trích yeáu thôøi gian trong moâ hình CSDL höôùng thôøi gian. Hình 7: Kieán truùc thöïc hieän caâu truy vaán Oracle Bộ sinh mã Bộ xử lý xuất kết qủa Câu truy vấn SubTSQL Mô-đun OCI Lex Yacc Kết qủa Báo lỗi Khoa hoïc - kó thuaäät 44  TAØI LIEÄU THAM KHAÛO [1] Anthony A. Aaby, ‘Compiler construction using FLex and Bison’, Walla Walla College, April, 2005. [2] J.F. Allen, ‘Maintaining Knowledge about Temporal Intervals’, Communication of the ACM, 26(11), November, 1993, 832-843. [3] C.J. Date, Hugh Darwen, N.A.Lorentzos, ‘Temporal Data and the Relation Model’, Morgan Kaufmann Publishers, 2003. [4] Bert Hubert, ‘LEX and YACC primer/How to’, PowerDNS BV, April, 2002. [5] N. A. Lorentzos, ‘The Interval- extended Relational Model and its Application to Valid-time Databases’, Temporal Databases – Theory, Design and Implementation, Benjamin/ Cummings Publishing, 1993, 65-91. [6] Phil Locke, ‘Oracle Call Interface Programmer’s Guide’, Oracle Corporation, 1997. [7] Thomas Niemann, ‘A compact guide to LEX & YACC ’, www.epaperpress.com. [8] Taäp san ‘Hoäi thaûo khoa hoïc öùng duïng phaàn meàm maõ nguoàn môû’, Vaên phoøng CNTT- Boä KH&CN, Sôû KH&CN- TP.HCM 13-09-2005. [9] Phaïm vaên Chung. Döông Tuaán Anh, ‚Implementing a Query Sublanguage for Temporal Clincal database Systems‛, Proceedings of the MMU International Symposum on information & Communications Technologies 2005, 24– 25 November 2005, Malaysia, pp. TS12- 13-16. Hình 8: Giao dieän thöïc hieän hieän caâu truy vaán coù yeáu toá thôøi gian

Các file đính kèm theo tài liệu này:

  • pdf3744R.pdf