KNT hỗ trợ chức năng đăng kí tín chỉ mv1, mv1a, mv1b

Một phần của tài liệu 28030_171220200191278LUANVANLETHITHANHCHAU (Trang 50 - 54)

6. Bố cục luận văn

2.4.4.KNT hỗ trợ chức năng đăng kí tín chỉ mv1, mv1a, mv1b

a) Mục đích: thống kê danh sách các môn cùng lớp học phần có thể đăng kí của sinh viên

- mv1a: Danh sách lớp học phần đang mở.

- mv1b: Danh sách môn học sinh viên được đăng ký. Danh sách này có được bằng cách gộp 03 danh sách:

+ Danh sách môn học trong kỳ hiện tại của sinh viên,

+ Danh sách môn học sinh viên còn nợ/được phép học cải thiện, + Danh sách môn học sinh viên được phép học vượt.

- mv1: Danh sách lớp học phần sinh viên được phép đăng ký. Danh sách này có được bằng cách nối 02 danh sách: mv1a và mv1b.

b) Cấu trúc bảng:

Bảng 2.3. Cấu trúc các KNT mv1a, mv1b, mv1

mv1a mv1b

malophp mamh tenmh masv mamh tenmh

… … … …

mv1

malophp masv mamh tenmh

… … … …

c) Chiến lược cập nhật mv1a: CNGT đồng bộ Các trigger cho các hành vi ở bảng gốc: - lophocphan: insert, delete, update - monhoc: update

- hoc: insert, update, delete

Giải thích: Chủ thể chính là lophocphan nên khi 1 lớp học phần mới được insert sẽ có trigger insert vào mv1a.

monhoc có trigger update để thay đổi các trường (tên môn học…) đến mv1a khi monhoc bị update;

Sẽ không cần trigger delete vì ta thiết đặt thuộc tính khóa ngoại cascade. Nếu 1 môn học bị xóa => các lophocphan của môn học đó sẽ bị xóa, và trigger delete của lophocphan sẽ giúp ta xóa trong mv1a.

Hoc: là table quyết định xem lophocphan đã đạt giới hạn số người đăng kí hay chưa nên cũng cần thêm trigger insert; nếu có sinh viên đăng kí vào table hoc 1 record sẽ được insert. Trigger sẽ kiểm tra xem lophocphan đó đã full hay chưa để xóa lophocphan khỏi mv1a.

d) Chiến lược cập nhật mv1b: CNGT đồng bộ Các trigger cho các hành vi ở bảng gốc: - sinhvien: insert, delete, update

- lop:update - nganh:update

- chuongtrinh:insert, delete, update - mv3: insert, delete, update

Giải thích: Khi 1 sinhvien nhập học, ta sẽ tìm các môn trong khung chương trình cho sinh viên đăng kí (trigger insert).

lop và nganh: không cần trigger delete vì sẽ sử dụng khóa ngoại cascade để delete sinhvien có liên quan, từ đó chạy trigger delete của sinhvien tới mv1b.

Chuongtrinh: Thêm 1 môn vào khung chương trình của ngành nào đó thì ta phải cập nhật lại các môn có thể đăng kí của sinh viên(trigger insert)

mv3: Mọi sự thay đổi đến bảng điểm cùng cần kiểm tra cập nhật mv1b vì ảnh hưởng đến các môn có thể học lại hoặc học cải thiện.

e) Chiến lược cập nhật mv1: CNGT đồng bộ Các trigger cho các hành vi ở bảng gốc: - mv1a: insert, delete, update

- mv1b: insert, delete, update

Đánh giá: KNT đã lưu lại kết quả tính toán, truy vấn nên tốc độ select đã được tối ưu. Tuy nhiên có vấn đề nảy sinh khi thực hiện update lên bảng gốc là thời gian thực hiện lại quá lâu ~ 20s.

Sở dĩ có kết quả update như vậy là do cơ chế đệ quy của trigger trong HQT CSDL. Khi ta thực hiện chiến lược CNGT. Với mỗi row thay đổi ta phải thực thi 1 số câu truy vấn để xác định được cần phải cập nhật những row nào trong KNT. Và khi tiến hành nhiều KNT chồng chéo lên nhau, mỗi row của bảng gốc lại kích hoạt trigger update một số bảng ghi của một hoặc nhiều KNT, mà mỗi KNT lại mang trigger để cập nhật một hoặc nhiều KNT khác làm cho số lượng câu truy vấn phải thực hiện là rất lớn. Như trên ví dụ, ta thực hiện cập nhật lên table monhoc. table monhoc sẽ bị update => table chuongtrinh sẽ bị update do cơ chế khóa ngoại. table chuongtrinh xác định các môn học có trong khung chương trình của từng ngành, khi 1 row của chuongtrinh bị update thì cần cập nhật lại mv1 cho tất cả các sinh viên thuộc lớp, thuộc khoa của ngành bị ảnh hưởng. (adsbygoogle = window.adsbygoogle || []).push({});

Khi monhoc bị update cũng sẽ sinh trigger cập nhật đến mv3, mv1a và table lophocphan (cơ chế khóa ngoại); lophocphan lại chạy trigger cập nhật mv3; mv3 chạy trigger capnhat mv1b; mv1b chạy trigger capnhat mv1, mv1a sinh trigger cập nhật mv1… Làm cho số lượng câu truy vấn phải thực thi là rất lớn; phụ thuộc vào số lượng sinh viên thuộc khoa, nganh bị ảnh hưởng.

g) Chiến lược cập nhật mv1: cập nhật toàn phần đồng bộ

Do những bất lợi đã đề cập nên ta sẽ sử dụng chiến lược cập nhật toàn phần đồng bộ để khắc phục vấn đề update dữ liệu ở các bảng gốc cho mv1.

Cập nhật toàn phần là chiến lược cập nhật hủy hoàn toàn và tái tạo lại KNT. Điểm đặc biệt là nó không quan tâm đến số bản ghi mà mỗi câu lệnh update, insert hay delete tác động; truy vấn để tìm ra phải cập nhật thế nào trong mv như CNGT mà chỉ thực hiện 1 lần. Sau mỗi câu lệnh insert, delete, update.

Việc cài đặt cũng đơn giản là 2 hoạt động:

- và insert into mv1: để chèn dữ liệu của câu truy vấn vào mv1.

Cập nhật toàn phần là 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.

Kết luận Chương 2

Trong chương này, luận văn đã trình bày phân tích HTTT quản lý đào tạo của Trường Đại học Tài chính - Kế toán, mô tả thiết kế mô hình CSDL gồm mô hình ER và mô hình quan hệ, mô tả chi tiết các chức năng dưới dạng biểu đồ tuần tự, xác định được 05 chức năng có truy vấn dữ liệu phức tạp kèm theo các phân tích, đánh giá câu lệnh SQL truy vấn được sử dụng cho chức năng và thiết kế 05 KNT nhằm hỗ trợ hệ thống xử lý tốt hơn cho 05 chức năng đưa ra.

Từ việc ứng dụng KNT sử dụng chiến lược CNGT đồng bộ bằng cách sử dụng các triger, 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.

CHƯƠNG 3

CÀI ĐẶT, THỬ NGHIỆM VÀ ĐÁNH GIÁ

Một phần của tài liệu 28030_171220200191278LUANVANLETHITHANHCHAU (Trang 50 - 54)