1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng mô đun sinh tự động mã nguồn trigger trên ngôn ngữ c phục vụ cập nhật gia tăng, đồng bộ các khung nhìn thực với truy vấn lồng cho postgresql

92 6 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 92
Dung lượng 5,4 MB

Nội dung

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM - LÊ THỊ THẢO NGUYÊN XÂY DỰNG MÔ-ĐUN SINH TỰ ĐỘNG MÃ NGUỒN TRIGGER TRÊN NGÔN NGỮ C PHỤC VỤ CẬP NHẬT GIA TĂNG, ĐỒNG BỘ CÁC KHUNG NHÌN THỰC VỚI TRUY VẤN LỒNG CHO POSTGRESQL LUẬN VĂN THẠC SĨ NGÀNH HỆ THỐNG THÔNG TIN Đà Nẵng - Năm 2018 ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM - LÊ THỊ THẢO NGUYÊN XÂY DỰNG MÔ-ĐUN SINH TỰ ĐỘNG MÃ NGUỒN TRIGGER TRÊN NGÔN NGỮ C PHỤC VỤ CẬP NHẬT GIA TĂNG, ĐỒNG BỘ CÁC KHUNG NHÌN THỰC VỚI TRUY VẤN LỒNG CHO POSTGRESQL Chuyên ngành Mã số : Hệ thống thông tin : 8480104 LUẬN VĂN THẠC SĨ NGƯỜI HƯỚNG DẪN KHOA HỌC: TS Nguyễn Trần Quốc Vinh Đà Nẵng - Năm 2018 i LỜI CAM ĐOAN Tôi xin cam đoan cơng trình nghiên cứu khoa học riêng Các số liệu, kết nêu luận văn trung thực chưa công bố cơng trình Mọi giúp đỡ cho việc thực luận văn cảm ơn thơng tin trích dẫn luận văn rõ nguồn gốc rõ ràng phép công bố Tac gia lu�n van � Le Thj Thao Nguyen iv MỤC LỤC LỜI CAM ĐOAN i TRANG THÔNG TIN LUẬN VĂN THẠC SĨ ii DANH MỤC CÁC TỪ VIẾT TẮT vi DANH MỤC HÌNH VẼ vii DANH MỤC CÁC BẢNG viii LỜI MỞ ĐẦU 1 Lý chọn đề tài Mục tiêu nhiệm vụ đề tài Đối tượng phạm vi nghiên cứu .3 Phương pháp nghiên cứu .3 Ý nghĩa khoa học thực tiễn đề tài Cấu trúc luận văn CHƯƠNG NGHIÊN CỨU TỔNG QUAN 1.1 Tổng quan ngơn ngữ lập trình C 1.1.1 Ngơn ngữ lập trình C .5 1.1.2 Đặc điểm ngôn ngữ C 1.2 Tổng quan truy vấn lồng 1.2.1 Đặc điểm truy vấn lồng 1.2.2 Phân loại 1.3 Tổng quan khung nhìn thực .9 1.3.1 Giới thiệu chung .9 1.3.2 Phân loại khung nhìn thực 14 1.4 Tổng quan cập nhật gia tăng, đồng khung nhìn thực 15 1.4.1 Tổng quan cập nhật gia tăng 15 1.4.2 Cập nhật đồng khung nhìn thực 16 1.5 Cập nhật khung nhìn thực trigger C PostgreSQL .16 1.5.1 Khái niệm trigger 16 1.5.2 Trigger HQT CSDL 17 1.5.3 Trigger PostgreSQL 17 1.5.4 Hàm C 18 1.5.5 Hàm trigger C 19 1.5.6 Ví dụ tạo trigger C PostgreSQL 19 1.6 Kết chương .19 v CHƯƠNG 2: KHUNG NHÌN THỰC TRONG POSTGRESQL VÀ THUẬT TỐN CẬP NHẬT GIA TĂNG KHUNG NHÌN THỰC VỚI TRUY VẤN LỒNG .20 2.1 PostgreSQL khung nhìn thực PostgreSQL 20 2.2 Các phương pháp cập nhật KNT 21 2.2.1 Phương pháp làm KNT 21 2.2.2 Phương pháp cập nhật gia tăng đồng .21 2.2.3 Một số vấn đề cần quan tâm CNGT KNT với truy vấn lồng 22 2.3 Thuật toán cập nhật gia tăng KNT với truy vấn lồng 23 2.3.1 Thuật toán chuyển từ truy vấn lồng sang truy vấn nối .23 2.3.2 Điều kiện triển khai thuật toán 25 2.3.3 Thuật toán cập nhật gia tăng khung nhìn thực với truy vấn nối 26 2.4 Kết chương .35 CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH SINH TỰ ĐỘNG MÃ NGUỒN CÁC TRIGGER THỰC HIỆN CẬP NHẬT GIA TĂNG KHUNG NHÌN THỰC VỚI TRUY VẤN LỒNG .36 3.1 Cài đặt môi trường CSDL ngơn ngữ lập trình .36 3.2 Xây dựng mô-đun sinh mã tự động trigger .36 3.2.1 Tạo sở liệu thực nghiệm .36 3.2.2 Chương trình sinh tự động mã trigger 36 3.2.3 Sử dụng kết chương trình sinh mã 40 3.2.4 Đánh giá kết thực nghiệm .41 3.3 Kết chương .47 KẾT LUẬN VÀ KIẾN NGHỊ .48 THẢO LUẬN MỘT SỐ KẾT QUẢ ĐẠT ĐƯỢC 48 GIỚI HẠN CỦA LUẬN VĂN NÀY 48 TÀI LIỆU THAM KHẢO 49 PHỤ LỤC 51 PHỤ LỤC 55 PHỤ LỤC 74 vi DANH MỤC CÁC TỪ VIẾT TẮT Chữ viết tắt/ ký hiệu BG Cụm từ đầy đủ Bảng gốc CNGT Cập nhật gia tăng CSDL Cơ sở liệu HQTCSDL Hệ quản trị sở liệu KNT Khung nhìn thực SPJ Select – Project – Join; Kết nối bao gồm phép chọn, chiếu TVG Truy vấn gốc DSSV Danh sách sinh viên Col QLSV Columns (cột) Quản lý sinh viên vii DANH MỤC HÌNH VẼ Số hiệu hình vẽ 1.1 Tên hình vẽ Cơ sở liệu quản lý đặt giao hàng hóa Trang 12 Mơ tả hoạt động HQT CSDL xuất truy vấn yêu 1.2 cầu sử dụng liệu không sử dụng KNT 13 1.3 Cơ sở liệu quản lý đặt giao hàng hóa sử dụng khung nhìn thực 13 2.1 Mơ tả q trình CNGT KNT trigger 22 2.2 CSDL quản lý sinh viên đơn giản với bảng 24 3.1 Ví dụ liệu đầu vào 40 3.2 Giao diện chương trình sinh mã 41 3.3 Tốc độ thực thi lệnh Select 1000 row không dùng KNT 42 3.4 Tốc độ thực thi lệnh Select 1000 row có dùng KNT 43 3.5 Tốc độ thực thi lệnh insert row không dùng câu lệnh trigger 43 3.6 Tốc độ thực thi lệnh insert row có dùng câu lệnh trigger 44 3.7 Tốc độ thực thi lệnh update row không dùng câu lệnh trigger 44 3.8 Tốc độ thực thi lệnh update row có dùng câu lệnh trigger 45 3.9 Tốc độ thực thi lệnh update 1000 row không dùng câu lệnh trigger 45 3.10 Tốc độ thực thi lệnh update 1000 row có dùng câu lệnh trigger 46 viii DANH MỤC CÁC BẢNG Số hiệu bảng 1.1 1.2 Tên bảng Trang Mô tả thông tin chi tiết liệu bảng SINHVIEN bảng LOP 10 Khung nhìn thực DSSV với liệu lấy từ bảng SINHVIEN LOP 10 68 GET_STR_ON_NEW_ROW(tenlopmoi, 2); GET_INT64_ON_NEW_ROW(makhoamoi, 3); INT64_TO_STR(makhoamoi, str_makhoamoi); //lay ten khoa moi truong hop ma khoa thay doi DEFQ("Select ten_khoa from khoa where ma_khoa="); ADDQ(str_makhoamoi); EXEC; DEFR(1); //tao result set co cot FOR_EACH_RESULT_ROW(i) { //ban ghi tra ve chi co row, vong lap chay lan GET_STR_ON_RESULT(tenkhoamoi, i, 1); } DEFQ("update mv set ma_lop="); ADDQ(str_malopmoi); ADDQ(", ten_lop='"); ADDQ(tenlopmoi); ADDQ("', ma_khoa="); ADDQ(str_makhoamoi); ADDQ(", ten_khoa='"); ADDQ(tenkhoamoi); ADDQ("' where ma_lop="); ADDQ(str_malopcu); EXEC; INF("Done"); //in thong bao END; //giai phong bo nho, ket thuc trigger an toan } FUNCTION(lopdelete) { int64 malopcu; 69 char str_malopcu[10]; REQUIRED_PROCEDURES; GET_INT64_ON_TRIGGERED_ROW(malopcu, 1); INT64_TO_STR(malopcu, str_malopcu); DEFQ("delete from mv where ma_lop="); ADDQ(str_malopcu); EXEC; INF("Done"); END; } FUNCTION(svdelete) { int64 masvcu; char str_masvcu[10]; REQUIRED_PROCEDURES; GET_INT64_ON_TRIGGERED_ROW(masvcu, 1); INT64_TO_STR(masvcu, str_masvcu); DEFQ("delete from mv where ma_sv="); ADDQ(str_masvcu); EXEC; INF("Done"); END; } FUNCTION(svinsert) { int64 masv; char str_masv[10]; char* ten_sv; char* que_quan; 70 int64 malop; char str_malop[10]; char* ten_lop=""; int64 makhoa; char str_makhoa[10]; char* tenkhoa=""; //lay du lieu insert vao bang sv REQUIRED_PROCEDURES; GET_INT64_ON_TRIGGERED_ROW(masv, 1); INT64_TO_STR(masv, str_masv); GET_STR_ON_TRIGGERED_ROW(ten_sv, 3); GET_STR_ON_TRIGGERED_ROW(que_quan, 4); GET_INT64_ON_TRIGGERED_ROW(malop, 2); INT64_TO_STR(malop, str_malop); //tim ten lop, ma khoa, ten khoa de dien vao cot lai view DEFQ("Select ten_lop,khoa.ma_khoa,ten_khoa from lop join khoa on lop.ma_khoa=khoa.ma_khoa where ma_lop="); ADDQ(str_malop); EXEC; DEFR(3); //tao result set co cot FOR_EACH_RESULT_ROW(i) { //ban ghi tra ve chi co row, vong lap chay lan GET_STR_ON_RESULT(ten_lop, i, 1); GET_INT64_ON_RESULT(makhoa, i, 2); INT64_TO_STR(makhoa, str_makhoa); GET_STR_ON_RESULT(tenkhoa, i, 3); } DEFQ("insert into mv values ("); ADDQ(str_masv); 71 ADDQ(",'"); ADDQ(ten_sv); ADDQ("','"); ADDQ(que_quan); ADDQ("',"); ADDQ(str_malop); ADDQ(",'"); ADDQ(ten_lop); ADDQ("',"); ADDQ(str_makhoa); ADDQ(",'"); ADDQ(tenkhoa); ADDQ("')"); EXEC; INF("Done"); END; } FUNCTION(svupdate) { int64 masvcu; char str_masvcu[10]; int64 masvmoi; char str_masvmoi[10]; char* ten_sv; char* que_quan; int64 malop; char str_malop[10]; char* ten_lop = ""; int64 makhoa; char str_makhoa[10]; char* tenkhoa = ""; //lay du lieu insert vao bang sv 72 REQUIRED_PROCEDURES; GET_INT64_ON_TRIGGERED_ROW(masvcu, 1); INT64_TO_STR(masvcu, str_masvcu); GET_INT64_ON_NEW_ROW(masvmoi, 1); INT64_TO_STR(masvmoi, str_masvmoi); GET_STR_ON_NEW_ROW(ten_sv, 3); GET_STR_ON_NEW_ROW(que_quan, 4); GET_INT64_ON_NEW_ROW(malop, 2); INT64_TO_STR(malop, str_malop); //tim ten lop, ma khoa, ten khoa de dien vao cot lai view DEFQ("Select ten_lop,khoa.ma_khoa,ten_khoa from lop join khoa on lop.ma_khoa=khoa.ma_khoa where ma_lop="); ADDQ(str_malop); EXEC; DEFR(3); //tao result set co cot FOR_EACH_RESULT_ROW(i) { //ban ghi tra ve chi co row, vong lap chay lan GET_STR_ON_RESULT(ten_lop, i, 1); GET_INT64_ON_RESULT(makhoa, i, 2); INT64_TO_STR(makhoa, str_makhoa); GET_STR_ON_RESULT(tenkhoa, i, 3); } DEFQ("update mv set ma_sv="); ADDQ(str_masvmoi); ADDQ(",ten_sv='"); ADDQ(ten_sv); ADDQ("',que_quan='"); ADDQ(que_quan); 73 ADDQ("',ma_lop="); ADDQ(str_malop); ADDQ(",ten_lop='"); ADDQ(ten_lop); ADDQ("',ma_khoa="); ADDQ(str_makhoa); ADDQ(",ten_khoa='"); ADDQ(tenkhoa); ADDQ("' where ma_sv="); ADDQ(str_masvcu); EXEC; INF("Done"); END; } 74 PHỤ LỤC Danh sách kiểu liệu SQL C Kiểu SQL Kiểu C Thư viện khai báo PostgreSQL Abstime AbsoluteTime Utils/nabstime.h Boolean Bool Postgres.h Box BOX* Utils/geo_decls.h Bytea Bytea* Postgres.h “char” Char Character BpChar* Postgres.h cid CommandId Postgres.h Date DateADT Utils/date.h Smallint(int2) Int2 or int16 Postgres.h Int2vector Int2vector* Postgres.h Integer(int4) Int4 or int32 Postgres.h Real(float4) Float4* Postgres.h Doubl precision (float8) Float8* Postgres.h nterval Interval* Utils/timestamp.h Lseg LSEG* Utils/geo_decls.h Name Name Postgres.h Oid Oid Postgres.h Oidvector Oidvector* Postgres.h Path PATH* Utils/geo_decls.h Point POINT* Utils/geo_decls.h Regproc Regproc Postgres.h Reltime relaticeTiem Utils/nabstime.h Text Text* Postgres.h Tid ItemPointer Storage/itemptr.h Time timeADT Utils/date.h Time with time zone TimeTzADT Utils/date.h Timestamp Timestamps* Utils/timestamp.h Tinterval timeInterval Utils/nabstime.h Varchar varChar* Postgres.h Xid TransactionId Postgres.h ... tơi chọn đề tài ? ?Xây dựng mô- đun sinh tự động mã nguồn trigger ngôn ngữ C ph? ?c vụ c? ??p nhật gia tăng, đồng khung nhìn th? ?c với truy vấn lồng cho PostgreSQL? ?? làm khóa luận tốt nghiệp cao h? ?c M? ?c. .. dụng ngôn ngữ C làm mã nguồn cho trigger xây dựng mô- đun để sinh tự động trigger cho tất BG tham gia vào truy vấn, ph? ?c vụ th? ?c CNGT KNT chế đồng bộ, phần giao t? ?c th? ?c thao t? ?c liệu BG Đã c? ? nghiên... c? ??p nhật gia tăng khung nhìn th? ?c với truy vấn nối 36 CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH SINH TỰ ĐỘNG MÃ NGUỒN C? ?C TRIGGER TH? ?C HIỆN C? ??P NHẬT GIA TĂNG KHUNG NHÌN TH? ?C VỚI TRUY VẤN LỒNG 3.1 C? ?i đặt

Ngày đăng: 05/05/2021, 16:19

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w