KNT là một đối tượng trong CSDL dùng để lưu trữ kết quả thực thi c a một truy vấn, giúp cải thiện và nâng cao tốc độ thực thi đối với các truy vấn ph c t p, có tần suất sử dụng cao trên
Trang 1HI UăNĔNG PH NăM MăQU NăLụăĐÀOăT O
LU NăVĔNăTH CăSĨ
H ăTH NGăTHỌNGăTIN
ĐƠăN ngă- 2019
Trang 2HI UăNĔNG PH NăM MăQU NăLụăĐÀOăT O
ChuyênăngƠnh:ăH ăth ngăthôngătin
Mưăs : 848.01.04
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ă- 2019
Trang 6M C L C
L IăCAMăĐOAN i
TịMăT T ii
M CăL C iv
DANHăM CăVI TăT T vi
DANHăM CăCỄCăB NG vii
DANHăM CăCỄCăBI UăĐ ă viii
DANHăM CăCỄCăHỊNH ix
M ăĐ U 1
1 Tính cấp thiết c a đề tài 1
2 Mục tiêu và nhiệm vụ đề tài 3
3 Đối tượng và ph m vi nghiên c u 3
4 Phương pháp nghiên c u 4
5 Kết quả đ t được 4
6 Bố cục luận văn 4
CH NGă1.ăNGHIểNăC UăT NGăQUAN 6
1.1 Tổng quan về khung nhìn thực 6
1.1.1 Tổng quan về khung nhìn thực 6
1.1.2 Phân lo i KNT 9
1.2 Các cơ chế và phương pháp cập nhật KNT 10
1.2.1 Các cơ chế cập nhật KNT 10
1.2.2 Các phương pháp cập nhật KNT 11
1.3 Khung nhìn thực trong PostgreSQL 11
1.3.1 Tổng quan về PostgreSQL 11
1.3.2 Khái niệm về trigger 12
1.3.3 Trigger trong PostgreSQL 13
1.3.4 Hàm trigger 14
Kết luận Chương 1 14
CH NGă2.ăTHI TăK ăH ăTH NG 15
2.1 Mô tả cơ sở dữ liệu hiện t i 15
2.1.1 Yêu cầu hệ thống 15
2.1.2 Mô hình ER 15
2.1.3 Mô hình quan hệ 16
2.1.4 Mô tả chi tiết thiết kế các bảng 16
2.2 Mô tả các ch c năng c a hệ thống 18
Trang 72.2.1 Sơ đồ ch c năng tổng quát 18
2.2.2 Mô tả chi tiết các ch c năng 19
2.3 Các ch c năng sẽ ng dụng KNT 26
2.3.1 Đăng ký h c phần 26
2.3.2 H y đăng ký h c phần 29
2.3.3 Xem điểm 30
2.3.4 L c danh sách xét h c bổng 32
2.3.5 L c danh sách nợ h c phần 34
2.4 Thiết kế KNT hỗ trợ cho các ch c năng đã đề xuất 36
2.4.1 KNT hỗ trợ ch c năng xem bảng điểm mv3 37
2.4.2 KNT hỗ trợ ch c năng h y đăng kí h c phần mv2 37
2.4.3 KNT hỗ trợ ch c năng thống kê điểm mv4 38
2.4.4 KNT hỗ trợ ch c năng đăng kí tín chỉ mv1, mv1a, mv1b 38
Kết luận Chương 2 41
CH NGă3.ăCÀIăĐ T,ăTH ăNGHI MăVÀăĐỄNHăGIỄ 42
3.1 Cài đặt KNT 42
3.1.1 KNT hỗ trợ ch c năng xem bảng điểm mv3 42
3.1.2 KNT hỗ trợ ch c năng h y đăng kí h c phần mv2 43
3.1.3 KNT thống kê các lớp h c phần được mở trong kì hiện t i mv1a 45
3.1.4 KNT thống kê danh sách môn h c sinh viên được đăng ký mv1b 46
3.1.5 KNT danh sách lớp h c phần sinh viên được phép đăng ký mv1 48
3.2 Thử nghiệm và kết quả 50
3.2.1 Cấu hình hệ thống, số lượng dữ liệu test 50
3.2.2 Kết quả truy vấn ch n dữ liệu 50
3.2.3 Kết quả truy vấn cập nhật dữ liệu 54
3.3 So sánh, đánh giá 60
3.3.1 So sánh, đánh giá các truy vấn ch n dữ liệu 60
3.3.2 So sánh, đánh giá các truy vấn cập nhật dữ liệu 60
Kết luận Chương 3 62
K TăLU N 63
TÀIăLI UăTHAMăKH O 64 QUY TăĐ NHăGIAOăĐ ăTÀIăLU NăVĔNă(B năsao)
Trang 8CSDL QH Cơ sở dữ liệu quan hệ
CT HSSV Công tác H c sinh sinh viên
HTQ CSDL Hệ quản tr cơ sở dữ liệu
Trang 9DANHăM CăCÁC B NG
S ăhi uă
2.1 Mô tả chi tiết các bảng trong CSDL quản lý đào t o 16
3.2 So sánh kết quả truy vấn ch n (select) dữ liệu 603.3 So sánh kết quả truy vấn cập nhật dữ liệu 61
Trang 10DANHăM CăCỄCăBI UăĐ
S ăhi uă
3.1 So sánh kết quả truy vấn ch n (select) dữ liệu 603.2 So sánh kết quả truy vấn cập nhật dữ liệu 61
Trang 112.10 Biểu đồ tuần tự l c danh sách xét h c bổng 252.11 Biểu đồ tuần tự l c danh sách nợ h c phần 25
3.1 Kết quả truy vấn gốc lớp h c phần có thể đăng ký dựa trên
3.2 Kết quả truy vấn sử dụng KNT lớp h c phần có thể đăng ký 51
3.4 Kết quả truy vấn sử dụng KNT h c phần được h y 52
3.6 Kết quả truy vấn sử dụng KNT điểm sinh viên theo 533.7 Kết quả truy vấn gốc lấy danh sách xét h c bổng 533.8 Kết quả truy vấn sử dụng KNT lấy danh sách xét h c bổng 533.9 Kết quả truy vấn gốc l c danh sách nợ h c phần 543.10 Kết quả truy vấn sử dụng KNT l c danh sách nợ h c phần 54
Trang 12S ăhi uă
3.17 Thời gian truy vấn chèn dùng KNT mv3 và mv2 573.18 Thời gian truy vấn xóa dùng KNT mv3 và mv2 573.19 Thời gian truy vấn sửa dùng KNT mv3 và mv2 573.20 Thời gian truy vấn chèn dùng KNT mv3, mv2, mv1a, mv1b,
Trang 13M ăĐ U
1.ăTínhăc păthi tăc aăđ ătƠiă
Hiện nay, công nghệ thông tin (CNTT) đang ngày càng phát triển Con người
đã ng dụng CNTT vào công việc cũng như các ho t động hàng ngày Các hệ thống thông tin (HTTT) đã được triển khai trong hầu hết các lĩnh vực: kinh doanh, giải trí, quản tr , hành chính Các hệ thống này có thể ho t động 24/7 và có nhiều ch c năng được thực hiện tự động mà không cần sự kiểm soát c a con người
T i Trường Đ i h c Tài chính - Kế toán, HTTT cũng được triển khai trong các
ho t động: quản lý, d y h c, quảng bá Trong số các HTTT này, HTTT quản lý đào
t o là hệ thống quan tr ng và có sự tương tác cao HTTT quản lý đào t o đã giúp cho quá trình đào t o được diễn ra suôn sẻ, nhanh chóng và dễ kiểm soát
Ngoài những kết quả đáng tin cậy, HTTT quản lý đào t o vẫn còn một số vấn
đề về hiệu năng mà tồn t i lớn nhất là ch c năng đăng ký lớp h c phần (đăng ký tín chỉ) Ch c năng này vừa yêu cầu dữ liệu được trích xuất ph c t p từ cơ sở dữ liệu
(CSDL) vừa có một lượng lớn sinh viên truy cập đồng thời Để có được danh sách lớp
h c phần mà sinh viên có thể đăng ký, chương trình phải tính nhiều dữ liệu trung gian, đặc biệt là tính các môn h c: sinh viên đã h c, sinh viên còn nợ hoặc được phép h c cải thiện và các môn h c được phép h c vượt… Các phép tính này dùng nhiều phép nối () Vì thế thời gian phản hồi c a hệ thống b chậm và nhiều lúc quá tải, không phản hồi Hay ch c năng xét h c bổng, ch c năng này chỉ l c danh sách điểm c a những sinh viên đ tiêu chí xét h c bổng h c tập trong năm h c cụ thể Từ danh sách này, Khoa, Phòng CT HSSV sẽ xem xét l i, cân đối, ch n l c để cấp h c bổng h c tập
Để có được bảng điểm, chương trình phải thực hiện 08 phép nối, lấy dữ liệu từ nhiều bảng; Để có được danh sách xét cấp h c bổng cuối cùng, chương trình phải thực hiện thêm 05 phép thống kê (Sum, Min, Average) Và còn một số ch c năng cần phải nâng cao tốc độ thực thi truy vấn để đ t được hiệu quả tốt nhất
Trong thời gian h c tập khóa h c cao h c c a mình, tôi đã được tiếp cận với kỹ thuật khung nhìn thực (KNT) - một kỹ thuật giúp cải thiện và nâng cao tốc độ thực thi cho các truy vấn ph c t p KNT là một đối tượng trong CSDL dùng để lưu trữ kết quả thực thi c a một truy vấn, giúp cải thiện và nâng cao tốc độ thực thi đối với các truy vấn ph c t p, có tần suất sử dụng cao trên một lượng dữ liệu lớn Ý tưởng c a KNT là dựa trên các bảng kết quả s n có để trả lời truy vấn một cách nhanh chóng mà không cần thực thi l i truy vấn Đối với những truy vấn ph c t p bao gồm nhiều phép nối và các hàm thống kê, hiệu quả sử dụng KNT càng rõ rệt đặc biệt khi áp dụng trên một lượng dữ liệu đ lớn, do đã bỏ qua các bước thực thi phép nối và các hàm thống kê,
Trang 14đây là những thành phần chiếm nhiều chi phí tài nguyên trong quá trình thực thi truy vấn
ng dụng KNT sử dụng chiến lược cập nhật gia tăng (CNGT) đồng bộ bằng cách sử dụng các trigger, chiến lược cập nhật toàn phần đồng bộ cho thấy hiệu quả khi viết l i truy vấn để sử dụng KNT - tăng tốc độ thực thi c a truy vấn lên nhiều lần, đặc biệt là các truy vấn ph c t p sử dụng lượng dữ liệu lớn, đáp ng được tính t c thời đối với kết quả thực thi truy vấn trong HTTT Ngoài ra cập nhật toàn phần là một phương pháp được sử dụng hi sinh thời gian update, delete để đảm bảo việc thực hiện select trong mùa đăng kí tín chỉ được diễn ra nhanh chóng; Không phụ thuộc vào lượng dữ liệu, diễn ra với một tốc độ cố đ nh, và không mắc phải vấn đề như ở CNGT khi các KNT cập nhật lẫn nhau
Cùng với đó, tôi cũng được tiếp cận hệ quản tr cơ sở dữ liệu (HQT CSDL)
PostgreSQL - một HQT CSDL nguồn mở cho phép tích hợp kỹ thuật KNT vào để nâng cao hiệu năng PostgreSQL là một HQT CSDL mã nguồn mở, được phát triển dựa trên mã nguồn c a trường Đ i h c Berkeley, hỗ trợ đầy đ các thành phần phổ biến c a một HQT CSDL như các truy vấn ph c hợp, bẫy sự kiện, khung nhìn, tính toàn vẹn c a giao d ch, và có thể ch y trên m i hệ điều hành Được phát triển hơn 20 năm qua bởi đội ngũ kĩ sư giàu kinh nghiệm, PostgreSQL đã t o được lòng tin về độ tin cậy cũng như tính đúng đắn, toàn vẹn dữ liệu PostgreSQL không chỉ là cơ sở dữ liệu quan hệ (CSDLQH), nó là quan hệ hướng đối tượng Điều này cung cấp cho nó một vài lợi thế so với các CSDL SQL mã nguồn mở khác như MySQL, MariaDB và
Firebird
KNT giống như các view thông thường trong việc trình diễn tập kết quả c a một truy vấn mà b n muốn sử dụng thường xuyên, ngo i trừ tập kết quả thực sự được lưu trữ trên ổ đĩa giống như các bảng thông thường KNT cũng có thể được đánh chỉ mục, không giống các views thông thường được t o ra mỗi lần chúng được g i, KNT
là các ảnh chụp t i một thời điểm Chúng không được làm mới (refreshed) ngo i trừ được chỉ đ nh Điều này có thể tăng đáng kể tốc độ với các truy vấn sử dụng KNT
Trigger là một th tục đặc biệt mà việc thực thi c a nó tự động khi có sự kiện xảy ra, các sự kiện g i th tục đặc biệt này được đ nh nghĩa trong câu lệnh, thông thường được thực hiện với các sự kiện liên quan đến Insert, Update, Delete dữ liệu Trigger được sử dụng trong việc bảo đảm toàn vẹn dữ liệu theo quy tắc xác đ nh, được quản lý theo bảng dữ liệu hoặc khung nhìn Sử dụng trigger một cách hợp lý trong CSDL sẽ có tác động rất lớn trong việc tăng hiệu năng c a CSDL
Từ vấn đề đang tồn t i trong HTTT quản lý đào t o t i trường và kiến th c
được tiếp cận trong khóa h c, tôi ch n đề tài “Nghiên cứu ứng dụng khung nhìn
Trang 15thực để nâng cao hiệu năng hệ thống thông tin quản lý đào tạo tại Trường Đại học
Tài chính - Kế toán” để làm luận văn tốt nghiệp
Mục đích c a luận văn là nghiên c u áp dụng KNT vào hệ thống thông tin quản
lý đào t o c a trường Đ i h c Tài chính - Kế toán nhằm tăng tốc hệ thống Điều này
có nghĩa rằng đối tượng nghiên c u c a luận văn là HTTT quản lý đào t o c a trường Trên cơ sở đó, ph m vi nghiên c u c a luận văn là việc áp dụng KNT cho một số truy vấn có độ ph c t p tương đối cao Trong đó, các cài đặt sẽ được triển khai trên HQT
CSDL PostgreSQL - một HQT CSDL
Luận văn sử dụng hai phương pháp nghiên c u: nghiên c u tài liệu và thực nghiệm Trong đó:
- Nghiên c u tài liệu: Tìm hiểu, phân tích, tổng hợp các tài liệu có liên quan từ
các sách, giáo trình, các bài báo
- Thực nghiệm: Xây dựng các truy vấn gốc, KNT, truy vấn dựa trên KNT
2 ăM cătiêuăvƠănhi măv ăđ ătƠi
- Nghiên c u tổng quan về KNT
- Nghiên c u ng dụng KNT trong các HQT CSDL
- Nghiên c u ng dụng KNT nhằm đẩy nhanh các thực thi các truy vấn trên một
số lượng bản ghi lớn
- Nghiên c u hệ thống quản lý đào t o t i Trường Đ i h c Tài chính - Kế toán
- Khai thác các thuật toán CNGT đồng bộ, CNGT toàn phần đã có để ng dụng vào đề tài
- ng dụng KNT vào phần mềm quản lý đào t o t i Trường Đ i h c Tài chính -
Kế toán để nâng hiệu năng
3 ăĐ iăt ngăvƠăph măviănghiênăc u
3.1 Đối tượng nghiên cứu
- HQT CSDL PostgreSQL
- KNT
- Thuật toán CNGT đồng bộ, CNGT toàn phần
- Hệ thống thông tin quản lý đào t o
3.2 Phạm vi nghiên cứu
- ng dụng KNT trong HQT CSDL PostgreSQL
- ng dụng KNT nhằm đẩy nhanh các thực thi các truy vấn
- Nghiên c u hệ thống quản lý đào t o t i Trường Đ i h c Tài chính - Kế toán
- Khai thác các thuật toán CNGT KNT để có để ng dụng vào phần mềm quản
lý đào t o t i Trường Đ i h c Tài chính - Kế toán, đặc biệt là thuật toán CNGT KNT với truy vấn lồng
Trang 164 ăPh ngăphápănghiênăc uă
Về phương pháp nghiên c u, tôi sử dụng hai phương pháp chính là nghiên c u
lý thuyết và nghiên c u thực nghiệm
4.1 Phương pháp lý thuyết
Thu thập, ch n l c, phân lo i, ghi chú và nghiên c u các tài liệu (sách, bài báo, luận văn, trang web) có liên quan đến KNT, HQT CSDL PostgreSQL, CNGT KNT, đồng bộ KNT, CNGT toàn phần KNT
4.2 Phương pháp thực nghiệm
- Nghiên c u các ch c năng cần thiết nâng cao tốc độ thực thi truy vấn c a Phần mềm Quản lý đào t o Trường Đ i h c Tài chính - Kế toán
- ng dụng KNT để nâng cao hiệu năng
5 ăK tăqu ăđ tăđ c
5.1 Lý thuyết
- Hiểu thêm về HQT CSDL PostgreSQL, ng dụng KNT trong các HQT CSDL PostgreSQL, cách sử dụng các trigger, CNGT đồng bộ, CNGT toàn phần
- Phân tích được các ch c năng cần thiết để ng dụng KNT nhằm nâng cao tốc
độ thực thi truy vấn c a Phần mềm Quản lý đào t o Trường Đ i h c Tài chính - Kế
toán
5.2 Thực tiễn
- Đề tài sẽ ng dụng KNT trong HQT CSDL PostgreSQL, cách sử dụng các
trigger CNGT đồng bộ, CNGT toàn phần để nâng cao hiệu năng c a phần mềm Quản
lý đào t o t i Trường Đ i h c Tài chính - Kế toán
- Tiến hành kiểm thử so sánh đánh giá tốc độ thực thi truy vấn c a ng dụng
6.ăB ăc călu năvĕnă
Luận văn bao gồm các phần: Mở đầu, các chương, Kết luận và Tài liệu tham khảo Trong đó, các chương gồm:
+ Ch ngă1ă- Nghiênăc uăt ngăquan Chương này trình bày tổng quan các
kiến th c cơ sở về KNT Đầu tiên là giới thiệu về KNT Sau đó là phân lo i KNT Tiếp theo là các phương pháp cập nhật KNT được sử dụng hiện nay Tiếp đến, phần giới thiệu HQT CSDL PostgreSQL được trình bày Cuối chương là các kiến th c liên quan đến KNT trong HQT CSDL PostgreSQL như trigger và hàm trigger
+ Ch ngă2ă- Thi tăk ăh ăth ng Chương này trình bày các kết quả thiết kế
CSDL, các ch c năng ng dụng KNT Đầu tiên, chương trình bày kết quả phân tích yêu cầu hệ thống quản lý đào t o t i Trường Đ i h c Tài chính - Kế toán Sau đó là thiết kế mô hình dữ liệu ở m c khái niệm - mô hình ER và mô hình dữ liệu quan hệ Tiếp đó là phân tích thiết kế biểu đồ tuần tự và câu lệnh truy vấn cho các ch c năng hệ
Trang 17thống có kết nối ph c t p hay thường được truy cập đồng thời cần ng dụng KNT để nâng cao hiệu năng Sau cùng là thiết kế KNT hỗ trợ cho các ch c năng được nêu ra
+ Ch ngă3ă- CƠiăđ t,ăth ănghi măvƠăđánhăgiá Chương này trình bày các kết
quả cài đặt, thử nghiệm KNT và đánh giá Đầu tiên là cài đặt các KNT được thiết kế ở Chương 2 Sau đó là ch y thử nghiệm một số truy vấn đối ch ng cho các KNT được cài đặt Cuối cùng là các so sánh, đánh giá về kết quả thử nghiệm
Trang 18CH NGă1 NGHIểNăC UăT NGăQUAN
1.1 T ng quan v khung nhìn th c
1.1.1 Tổng quan về khung nhìn thực
Một khung nhìn (view) có thể được xem như là một bảng “ảo” trong CSDL có nội dung được đ nh nghĩa thông qua một truy vấn (câu lệnh SELECT) Điểm khác biệt giữa khung nhìn và bảng là khung nhìn không được xem là một cấu trúc lưu trữ dữ liệu tồn t i trong CSDL Thực chất dữ liệu quan sát được trong khung nhìn được lấy từ các bảng thông qua câu lệnh truy vấn dữ liệu
Để hình dung về khung nhìn, ta xét trường hợp dữ liệu sau Một trường cần quản lý danh sách sinh viên theo lớp nên lập một CSDL gồm 02 bảng Bảng th nhất
mô tả về lớp như Bảng 1.1 Bảng th hai mô tả về sinh viên như Bảng 1.2
Bảng 1.2 Danh sách sinh viên
masv hodem ten ngaysinh malop
ta t o ra một khung nhìn bằng cách nối bảng lớp và bảng sinh viên l i rồi bỏ bớt các đặc tính không cần thiết Và việc bỏ bớt này không ảnh hưởng gì đến CSDL thật Khung nhìn kết quả có được như Bảng 1.3
Trang 19Cấu trúc khung nhìn danh sách sinh viên:
CREATE VIEW DSSV(masv,hodem,ten,tuoi,tenlop) AS
SELECT masv, hodem, ten,DATEDIFF(YY, ngaysinh, GETDATE()), tenlop
FROM sinhvien, lop
WHERE sinhvien.malop = lop.malop
Bảng 1.3 Khung nhìn danh sách sinh viên
masv hodem ten tuoi tenlop
1501002 Lê Thanh An 22 Kế toán khóa 15
1501003 Trần Văn Bình 22 Kế toán khóa 15
1502001 Võ Văn Kiệt 21 Kế toán khóa 16
1502002 Lê Hồng Mến 21 Kế toán khóa 16
1503001 Tr nh Thanh Bình 20 Kế toán khóa 17
Khi khung nhìn đã được đ nh nghĩa, ta có thể sử dụng câu lệnh SELECT để truy vấn dữ liệu từ khung nhìn như đối với các bảng Khi trong câu truy vấn xuất hiện
khung nhìn, HQT CSDL sẽ dựa vào đ nh nghĩa c a khung nhìn để chuyển yêu cầu truy vấn dữ liệu liên quan đến khung nhìn và việc truy vấn dữ liệu được thực hiện bởi yêu cầu tương đương trên các bảng
Việc sử dụng khung nhìn trong cơ sở dữ liệu đem l i các lợi ích sau đây: bảo mật dữ liệu, đơn giản hoá các thao tác truy vấn dữ liệu, tập trung và đơn giản hóa dữ liệu, độc lập dữ liệu
Tuy nhiên, việc sử dụng khung nhìn cũng tồn t i một số nhược điểm:
Do HQT CSDL thực hiện việc chuyển đổi các truy vấn trên khung nhìn thành những truy vấn trên các bảng cơ sở nên nếu một khung nhìn được đ nh nghĩa bởi một
truy vấn ph c t p thì sẽ dẫn đến chi phí về mặt thời gian khi thực hiện truy vấn liên quan đến khung nhìn sẽ lớn
Mặc dù thông qua khung nhìn có thể thực hiện được thao tác bổ sung và cập nhật dữ liệu cho bảng cơ sở nhưng chỉ h n chế đối với những khung nhìn đơn giản Đối với những khung nhìn ph c t p thì thường không thực hiện được; hay nói cách khác là dữ liệu trong khung nhìn là chỉ đ c
Một khung nhìn có thể được cụ thể hóa bằng cách lưu trữ các bộ dữ liệu c a các
khung nhìn trong cơ sở dữ liệu, được g i là khung nhìn thực (KNT - Materialized
view)
KNT là một đối tượng trong CSDL dùng để lưu trữ kết quả thực thi c a một
Trang 20truy vấn, giúp cải thiện và nâng cao tốc độ thực thi đối với các truy vấn ph c t p, có tần suất sử dụng cao trên một lượng dữ liệu lớn Ý tưởng c a KNT là dựa trên các bảng kết quả s n có để trả lời truy vấn một cách nhanh chóng mà không cần thực thi
l i truy vấn Đối với những truy vấn ph c t p bao gồm nhiều phép nối và các hàm thống kê, hiệu quả sử dụng KNT càng rõ rệt đặc biệt khi áp dụng trên một lượng dữ liệu đ lớn, do đã bỏ qua các bước thực thi phép nối và các hàm thống kê, đây là những thành phần chiếm nhiều chi phí trong quá trình thực thi truy vấn
Giả sử ta có CSDL quản lý việc mua bán hàng hóa, với các bảng Đơn hàng, Đặt
hàng và Khách hàng được mô tả như Hình 1.1
Dữ liệu từ các bảng gốc (BG) càng tăng theo thời gian, tốc độ thực hiện c a truy vấn càng chậm
Hình 1.2 Hoạt động của HQT CSDL khi yêu cầu dữ liệu từ nhiều bảng
Trang 21Tuy nhiên, thông qua việc triển khai lưu trữ bằng KNT, người dùng có thể dễ dàng có được kết quả và sử dụng nó một cách trực tiếp hoặc kết hợp nó với các truy vấn khác Lúc này, hiệu quả truy vấn xem như đ t m c tối đa, vì HQT CSDL chỉ cần
đ c từ bảng KNT kết quả c a truy vấn thay vì phải thực hiện phép nối và tính toán các biểu th c thống kê, vốn là các thao tác chiếm nhiều chi phí Lúc này, CSDL như Hình
1.3
Hình 1.3 CSDL quản lý đặt giao hàng dùng KNT
Tuy nhiên, việc sử dụng KNT cũng có những nhược điểm, đó là: KNT làm tiêu tốn không gian lưu trữ và phải được cập nhật khi các bảng chi tiết cơ bản được sửa đổi
1.1.2 Phân loại KNT
KNT được chia làm 04 lo i: bản sao, hăm hở, rất lười và lười
a) KNT bản sao (snapshot materialized view):
Chiến lược cập nhật: kiểu KNT được cập nhật theo yêu cầu
Cài đặt: KNT bản sao được cài đặt khá dễ dàng bằng cách g i hàm sau:
refresh_matview() Khi g i hàm refresh_matview(), HQT CSDL sẽ tự động xóa nội dung c a KNT trước đó, rồi thực hiện truy vấn khung nhìn và điền kết quả vào l i KNT với nội dung hiện t i c a khung nhìn đó
b) KNT hăm hở (eager materialized view):
Chiến lược cập nhật: Chúng được cập nhật ngay sau khi có bất kỳ thay đổi nào
được thực hiện với CSDL đó mà sẽ ảnh hưởng đến nó Điều này được thực hiện với một hệ thống kích ho t trên tất cả các bảng cơ sở Phụ thuộc vào hàm thay đổi được (như now()) sẽ gây ra cho KNT trở nên sai lệch, nhưng có thể được sửa chữa với
Trang 22những làm mới nhỏ, mà chỉ ảnh hưởng đến các hàng
Cài đặt: Việc thực thi KNT hăm hở được thực hiện qua hai hàm sau:
mv_refresh_row(PK): cập nhật bộ giá tr với khóa chính PK
mv_refresh(): sử dụng nếu khung nhìn dựa vào hàm thay đổi được như “now()”
Khi đó, các trigger với các bẫy sự kiện trong các HQT CSDL tương ng với các truy vấn INSERT, UPDATE và DELETE sẽ được g i thông qua hàm mv_refresh_row() một cách thích hợp
c) KNT rất lười (very lazy materialized view):
Mô tả KNT rất lười như sau:
Chiến lược cập nhật: Chúng sẽ ghi l i các hàng trong KNT cần phải được cập
nhật, nhưng sẽ không cập nhật cho đến khi hướng đến Điều này sẽ rất hữu ích nếu b n đang cam kết nhiều giao d ch mà ảnh hưởng đến KNT đó, nhưng không muốn thực sự cập nhật KNT cho đến sau này Chúng có ch c năng tương đương với các KNT bản
sao
Cài đặt: Việc cài đặt KNT kiểu rất lười qua các bước sau:
Ghi tất cả những thay đổi trên các bảng cơ sở trong một bản ghi (sử dụng một
số trigger và hàm)
Cài đặt một hàm "matview_refresh()" mà đ c bản ghi đó và cập nhật KNT theo danh sách các thay đổi trong bản ghi
d) KNT lười (lazy materialized view):
Chiến lược cập nhật: Chúng sẽ ghi l i các hàng trong KNT cần phải được cập
nhật, và cập nhật chúng khi giao d ch được thực hiện Điều này hữu ích nếu nhiều sự thay đổi sẽ ảnh hưởng đến các hàng giống nhau và cũng sẽ cho phép những thay đổi được thực hiện nhanh hơn nhiều
Cài đặt: Tương tự như KNT rất lười, việc g i và thực thi KNT thông qua hàm
“matview_refresh()”, trong đó cơ chế g i sẽ được g i theo cam kết và không theo yêu cầu
Trang 23bộ khai thác thời gian trì hoãn cho phép trong cập nhật dữ liệu được xác đ nh bởi công nghệ xử lý dữ liệu trong các hệ thống thông tin và ý nghĩa c a các bài toán giải quyết trong đó
1.2.2 Các phương pháp cập nhật KNT
Các quá trình cập nhật dữ liệu cho một KNT để đáp ng với những thay đổi trong dữ liệu cơ bản được g i là cập nhật KNT Có 03 phương pháp cập nhật KNT: toàn phần, gia tăng và ép buộc
a) Cập nhật toàn phần (COMPLETE): là cập nhật làm mới l i bảng dữ liệu KNT Tương tự việc xóa tất cả dữ liệu đã có và thêm dữ liệu mới Thực hiện phương pháp này tốn nhiều thời gian
b) CNGT (FAST hay còn g i là INCREMENTAL): là cập nhật chỉ sửa đổi nội dung KNT tương ng với các thay đổi trong các BG Thực hiện phương pháp này rất tiết kiệm thời gian Tuy nhiên, không phải trường hợp cập nhật dữ liệu KNT nào cũng dễ/có thể thực hiện theo phương pháp này
c) Cập nhật ép buộc (FORCE): là cập nhật xem xét khi có khả năng thì thực hiện CNGT, còn nếu không thì sử dụng cập nhật toàn phần
1.3 Khung nhìn th c trong PostgreSQL
1.3.1 Tổng quan về PostgreSQL
PostgreSQL là một HQT CSDL mã nguồn mở, được phát triển dựa trên mã nguồn c a trường Đ i h c Berkeley, hỗ trợ đầy đ các thành phần phổ biến c a một HQT CSDL như các truy vấn ph c hợp, bẫy sự kiện, khung nhìn, tính toàn vẹn c a giao d ch, và có thể ch y trên m i hệ điều hành Được phát triển hơn 20 năm qua bởi đội ngũ kĩ sư giàu kinh nghiệm, PostgreSQL đã t o được lòng tin về độ tin cậy cũng như tính đúng đắn, toàn vẹn dữ liệu
PostgreSQL không chỉ là cơ sở dữ liệu quan hệ (CSDLQH), nó là quan hệ hướng đối tượng Điều này cung cấp cho nó một vài lợi thế so với các CSDL SQL mã nguồn mở khác như MySQL, MariaDB và Firebird
Một đặc điểm cơ bản c a CSDLQH hướng đối tượng là hỗ trợ các đối tượng người dùng tự đ nh nghĩa và các hành vi c a chúng bao gồm các kiểu dữ liệu, các hàm, các thao tác, các tên miền và các chỉ mục Điều này làm cho PostgreSQL cực kỳ m nh
và linh ho t Trong những cái khác, các cấu trúc dữ liệu ph c t p có thể được t o ra, lưu trữ, và truy xuất
PosgreSQL cũng là HQT CSDL đóng vai trò tiên phong trong việc đưa ra những khái niệm quan tr ng mà các HQT CSDL thương m i khác rất lâu sau mới có
Là một HQT CSDL mã nguồn mở hàng đầu trên thế giới và KNT đã được triển khai trên PostgreSQL ở các phiên bản 9.3.4, 9.4, 10… KNT giống như các view thông
Trang 24thường trong việc trình diễn tập kết quả c a một truy vấn mà b n muốn sử dụng thường xuyên, ngo i trừ tập kết quả thực sự được lưu trữ trên ổ đĩa giống như các bảng thông thường KNT cũng có thể được đánh chỉ mục, không giống các views thông thường được t o ra mỗi lần chúng được g i, KNT là các ảnh chụp t i một thời điểm Chúng không được làm mới (refreshed) ngo i trừ được chỉ đ nh Điều này có thể tăng đáng kể tốc độ với các truy vấn ch y sử dụng KNT Thay vì sử dụng các views thông thường hoặc phải làm các join ph c t p trên các bảng hoặc thực hiện các hàm tập hợp (aggregation funcitons) trong truy vấn, sử dụng materialized views với các
dữ liệu cần thiết s n sàng và chờ đợi trên ổ đĩa để tăng hiệu quả Khi b n s n sàng cập nhật dữ liệu trong materialized view, nó có thể làm mới sử dụng lệnh REFRESH, tuy nhiên KNT trong PostgreSQL vẫn chưa hỗ trợ vấn đề cập nhật đồng bộ gia tăng
Do vậy, việc nghiên c u các kỹ thuật CNGT cho KNT trên PostgesSQL đang rất được quan tâm
1.3.2 Khái niệm về trigger
Trigger là một th tục đặc biệt mà việc thực thi c a nó tự động khi có sự kiện xảy ra, các sự kiện g i th tục đặc biệt này được đ nh nghĩa trong câu lệnh, thông thường được thực hiện với các sự kiện liên quan đến Insert, Update, Delete dữ liệu Trigger được sử dụng trong việc bảo đảm toàn vẹn dữ liệu theo quy tắc xác đ nh, được quản lý theo bảng dữ liệu hoặc khung nhìn
Điểm khác biệt giữa th tục lưu trữ và trigger là: các th tục lưu trữ được thực thi khi người sử dụng có lời g i đến chúng còn các trigger l i được “g i” tự động khi xảy ra những giao tác làm thay đổi dữ liệu trong các bảng hoặc khung nhìn
Mỗi một trigger được t o ra và gắn liền với một bảng hoặc một khung nhìn nào
đó trong CSDL Khi dữ liệu trong bảng hoặc khung nhìn b thay đổi (t c là khi bảng hoặc khung nhìn ch u tác động c a các câu lệnh INSERT, UPDATE hay DELETE) thì trigger sẽ được tự động kích ho t
Sử dụng trigger một cách hợp lý trong CSDL sẽ có tác động rất lớn trong việc tăng hiệu năng c a CSDL Các trigger thực sự hữu dụng với những khả năng sau:
Một trigger có thể nhận biết, ngăn chặn và huỷ bỏ được những thao tác làm thay đổi trái phép dữ liệu trong cơ sở dữ liệu
Các thao tác trên dữ liệu (xoá, cập nhật và bổ sung) có thể được trigger phát hiện ra và tự động thực hiện một lo t các thao tác khác trên CSDL nhằm đảm bảo tính hợp lệ c a dữ liệu
Thông qua trigger, ta có thể t o và kiểm tra được những mối quan hệ ph c t p hơn giữa các bảng trong CSDL mà bản thân các ràng buộc không thể thực hiện được
Có thể đ nh nghĩa nhiều trigger cho một sự kiện trên một bảng Lúc đó, chúng
Trang 25sẽ được thực thi theo th tự alphabet theo tên c a trigger
Có thể xác đ nh sự kiện insert, update hay delete cũng như thời điểm g i trigger
là trước (before) hay sau (after) từ bên trong trigger, nên ta có thể sinh mã một trigger cho tất cả các sự kiện trên mỗi bảng
1.3.3 Trigger trong PostgreSQL
PostgreSQL hỗ trợ 2 lo i trigger là trigger viết bằng ngôn ngữ PL/pgSQL và trigger viết bằng ngôn ngữ C Có nghiên c u đã ch ng minh được trigger viết bằng ngôn ngữ C cho hiệu suất cao hơn trigger viết bằng ngôn ngữ PL/pgSQL (khoảng 13%), mặc dù việc triển khai C trigger trên PostgreSQL được cho là rất ph c t p và không được khuyến ngh Tuy nhiên, đề tài vẫn sử dụng trigger viết bằng ngôn ngữ C với hy v ng tối ưu hóa hiệu suất cập nhật, một bước quan tr ng trong quá trình CNGT
Trigger trên PostgreSQL có thể xử lý một tập các bản ghi, hoặc chỉ xử lý một bản ghi Chỉ trigger xử lý một bản ghi mới có thể nhìn thấy dữ liệu đang được thao tác
Vì vậy đề tài thực hiện sinh mã nguồn trigger bắt sự kiện thay đổi dữ liệu trên các BG theo cơ chế xử lý từng bản ghi một trong tập các bản ghi được cập nhật Việc xử lý từng bản ghi là không năng suất so với xử lý một tập các bản ghi, nên trong tương lai nếu PostgreSQL hỗ trợ khả năng đ c được tập dữ liệu đang xử lý trong thân hàm
trigger, hiệu suất cập nhật sẽ được gia tăng đáng kể
Một bảng có thể được khai báo nhiều trigger, vì vậy các trigger thực hiện CNGT có thể được cài đặt song song với các trigger khác c a người dùng Quá trình cập nhật KNT bằng trigger được thể hiện như Hình 1.4
Trang 261.3.4 Hàm trigger
Khi một hàm được khai báo trả về kiểu trigger và được n p vào server, có thể
t o hàm trigger bằng lệnh: CREATE TRIGGER <tên trigger> {BEFORE|AFTER} {INSERT|DELETE|UPDATE} ON <tên bảng> FOR EACH ROW EXECUTE
PROCEDURE <tên hàm C> Trong đó:
Tên trigger do người dùng tùy ch n, tên hàm C trùng với tên hàm nằm ngay sau lệnh CREATE FUNCTION <tên hàm>, không nhất thiết phải trùng hoàn toàn với tên hàm trong tệp thư viện chia sẻ
K tălu năCh ngă1
Chương này trình đã bày tổng quan các kiến th c cơ sở về KNT và HQT CSDL PostgreSQL Các kiến th c cơ sở về KNT được trình bày bao gồm: khái niệm, phân
lo i KNT và các phương pháp cập nhật KNT Các kiến th c về HQT CSDL PostgreSQL được trình bày như trigger, hàm trigger
Đây là những kiến th c tr ng tâm liên quan đến việc xây dựng KNT trên PostgreSQL sẽ được nghiên c u ở các chương sau
Trang 27CH NGă2 THI TăK ăH ăTH NG
2.1.ăMôăt ăc ăs ăd ăli uăhi năt i
- Trong kỳ, tiến hành công tác d y, h c theo kế ho ch năm h c
- Cuối kỳ, giảng viên môn h c nhập điểm cho lớp h c phần mà mình d y
- Kết thúc kỳ h c, Phòng Khảo thí tổ ch c thi và nhập điểm thi
- Những sai sót trong quá trình nhập điểm thành phần, điểm thi có thể gửi văn bản nhờ Phòng Đào t o sửa giúp
- Cuối năm, Phòng CT HSSV, khoa có thể l c danh sách sinh viên theo điểm kết quả để xem xét cấp h c bổng Phòng Đào t o, khoa có thể l c danh sách nợ h c phần
để cố vấn sớm, cảnh bảo h c tập đến sinh viên
2.1.2 Mô hình ER
Hinh 2.1 Mô hình ER của hệ thống
Trang 282.1.3 Mô hình quan hệ
Từ mô hình ER có được ở Hình 2.1, chuyển mô hình này sang mô hình quan hệ
ta được mô hình cơ sở dữ liệu c a hệ thống như Hình 2.2
Hình 2.2 Mô hình quan hệ
2.1.4 Mô tả chi tiết thiết kế các bảng
Mô tả chi tiết thiết kế c a các bảng trong CSDL như Bảng 2.1
Bảng 2.1 Mô tả chi tiết các bảng trong CSDL quản lý đào tạo
Trang 29B ng Cột Ki uăd ăli u Ghi chú
TenHe nvarchar(30) Tên hệ đào t o
Trang 302.2 Mô t các ch cănĕngăc a h th ng
2.2.1 Sơ đồ chức năng tổng quát
Hệ thống thực tế có nhiều ch c năng Sau đây là sơ đồ ch c năng tổng quát đã được lược bỏ các ch c năng phụ
Hình 2.3 Chức năng hệ thống
Trang 312.2.2 Mô tả chi tiết các chức năng
Sau đây, luận văn mô tả chi tiết (biểu đồ tuần tự) c a các ch c năng thường xuyên trong hệ thống
a) T o h c phần:
Hình 2.4 Biểu đồ tuần tự tạo lớp học phần
Trang 32b) Đăng ký h c phần
Hình 2.5 Biểu đồ tuần tự đăng ký học phần
Trang 33c) H y đăng ký h c phần
Hình 2.6 Biểu đồ tuần tự hủy đăng ký học phần
Trang 34d) Nhập điểm thành phần
Hình 2.7 Biểu đồ tuần tự nhập điểm thành phần
Trang 35e) Nhập điểm thi
Hình 2.8 Biểu đồ tuần tự nhập điểm thi
thi
Trang 36f) Xem điểm
Hình 2.9 Biểu đồ tuần tự xem điểm
Trang 382.3 Các ch cănĕngăs ng d ng KNT
Các ch c năng sẽ ng dụng KNT là các ch c năng mà việc t o ra dữ liệu sử dụng phải được tính toán nhiều/ph c t p làm tốn nhiều thời gian hoặc b truy cập đồng thời với số lượng lớn người dùng
2.3.1 Đăng ký học phần
- Mô tả quá trình thao tác dữ liệu c a ch c năng: Gồm 2 quá trình
+ Quá trình 1: lấy danh sách h c phần có thể đăng ký
Dữ liệu vào: Masv, KyThu
Dữ liệu ra: Danh sách các lớp h c phần mà sinh viên có thể đăng ký: ds
Xử lý: - Danh sách lớp h c phần đang mở có thể đăng ký bổ sung:
A TrangThai = true count(MaSV)<50 (LOPHOCPHAN)
- Danh sách các môn h c có lớp đang mở:
B MONHOC.* (A MONHOC)
- Các môn h c trong kỳ hiện t i c a sinh viên masv:
C MONHOC.* ( (SINHVIEN.MaSV = masv KyHT = KyThu) (SINHVIEN
LOP NGANH CHUONGTRINH MONHOC))
- Các môn h c mà sinh viên masv đã h c:
D MONHOC.* ( SINHVIEN.MaSV = masv (SINHVIEN HOC
LOPHOCPHAN MONHOC))
- Các môn h c mà sinh viên masv còn nợ hoặc được phép cải thiện:
E MONHOC.* ( (MaSV = masv (DiemTP*0.4 + DiemThi*0.6)<5.5) Cuoi=1(SINHVIEN HOC LOPHOCPHAN MONHOC))
- Các môn h c mà sinh viên masv được phép h c vượt:
F MHTruoc in D.MaMH (MONHOC)
- Danh sách môn h c mà sinh viên masv được đăng ký:
G B (C E F)
- Danh sách các lớp h c phần mà sinh viên có thể đăng ký:
H MaMH in G.MaMH (A)
ds = H SELECT dbo.LOPHOCPHAN.*
FROM dbo.LOPHOCPHAN WHERE
(
(TrangThai = 1) AND (dbo.LOPHOCPHAN.MaLopHP in (
Trang 39select dbo.LOPHOCPHAN.MaLopHP FROM dbo.LOPHOCPHAN INNER JOIN dbo.HOC ON dbo.LOPHOCPHAN.MaLopHP = dbo.HOC.MaLopHP
GROUP BY dbo.LOPHOCPHAN.MaLopHP HAVING (count(MaSV)<50))
)
AND
dbo.LOPHOCPHAN.MaMH in (
SELECT dbo.MONHOC.MaMH FROM dbo.LOPHOCPHAN INNER JOIN dbo.MONHOC ON dbo.LOPHOCPHAN.MaMH = dbo.MONHOC.MaMH
WHERE (dbo.LOPHOCPHAN.TrangThai = 1)
INTERSECT (
SELECT dbo.MONHOC.MaMH FROM dbo.SINHVIEN INNER JOIN dbo.LOP ON dbo.SINHVIEN.MaLop = dbo.LOP.MaLop INNER JOIN
dbo.NGANH ON dbo.LOP.MaNg = dbo.NGANH.MaNg INNER JOIN
dbo.CHUONGTRINH ON dbo.NGANH.MaNg = dbo.CHUONGTRINH.MaNg INNER JOIN
dbo.MONHOC ON dbo.CHUONGTRINH.MaMH = dbo.MONHOC.MaMH
WHERE (dbo.LOP.KyHT - dbo.CHUONGTRINH.KyThu = 0) AND (dbo.SINHVIEN.MaSV = masv)
UNION
Trang 40SELECT dbo.MONHOC.MaMH FROM dbo.SINHVIEN INNER JOIN dbo.HOC ON dbo.SINHVIEN.MaSV = dbo.HOC.MaSV INNER JOIN
dbo.LOPHOCPHAN ON dbo.HOC.MaLopHP = dbo.LOPHOCPHAN.MaLopHP INNER JOIN
dbo.MONHOC ON dbo.LOPHOCPHAN.MaMH = dbo.MONHOC.MaMH
WHERE (dbo.SINHVIEN.MaSV = masv) AND (dbo.HOC.Cuoi = 1) AND (dbo.HOC.DiemTP * 0.4 + dbo.HOC.DiemThi * 0.6 < 5.5)
UNION
SELECT dbo.MONHOC.MaMH FROM dbo.MONHOC
WHERE dbo.MONHOC.MAMH in (
SELECT dbo.MONHOC.MaMH FROM dbo.SINHVIEN INNER JOIN dbo.HOC ON dbo.SINHVIEN.MaSV = dbo.HOC.MaSV INNER JOIN
dbo.LOPHOCPHAN ON dbo.HOC.MaLopHP = dbo.LOPHOCPHAN.MaLopHP INNER JOIN
dbo.MONHOC ON dbo.LOPHOCPHAN.MaMH = dbo.MONHOC.MaMH
WHERE (dbo.HOC.Cuoi = 1) )
) ) )