You are on page 1of 21

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN


KHOA HỆ THỐNG THÔNG TIN

MÔN CƠ SỞ DỮ LIỆU
BÀI TẬP THỰC HÀNH 5

GVHD: Nguyễn Ngọc Quí


Sinh viên thực hiện: Nguyễn Hoàng Vũ

 Tp. Hồ Chí Minh, 09/2023 


IT004 – Cơ sở dữ liệu
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................

……., ngày……...tháng……năm 2023

Người nhận xét


(Ký tên và ghi rõ họ tên)

2|Page
IT004 – Cơ sở dữ liệu

MỤC LỤC

I. Ngôn ngữ định nghĩa dữ liệu: ............................................................................................................5

1. Kết quả thi là “Dat” nếu điểm từ 5 đến 10 và “Khong dat” nếu điểm nhỏ hơn 5.........................5

2. Học viên thi một môn tối đa 3 lần................................................................................................ 5

3. Học kỳ chỉ có giá trị từ 1 đến 3.....................................................................................................5

4. Học vị của giáo viên chỉ có thể là “CN”, “KS”, “Ths”, “TS”, “PTS”.......................................... 6

5. Lớp trưởng của một lớp phải là học viên của lớp đó.................................................................... 6

6. Trưởng khoa phải là giáo viên thuộc khoa và có học vị “TS” hoặc “PTS”..................................7

7. Học viên ít nhất là 18 tuổi.............................................................................................................8

8. Giảng dạy một môn học ngày bắt đầu (TUNGAY) phải nhỏ hơn ngày kết thúc (DENNGAY).8

9. Giáo viên khi vào làm ít nhất là 22 tuổi........................................................................................9

10. Tất cả các môn học đều có số tín chỉ lý thuyết và tín chỉ thực hành chênh lệch nhau không

quá 3..................................................................................................................................................9

11. Học viên chỉ được thi một môn học nào đó khi lớp của học viên đã học xong môn học này. 10

12. Mỗi học kỳ của một năm học, một lớp chỉ được học tối đa 3 môn.......................................... 11

13. Sỉ số của một lớp bằng với số lượng học viên thuộc lớp đó.....................................................11

14. Trong quan hệ DIEUKIEN giá trị của thuộc tính MAMH và MAMH_TRUOC trong cùng

một bộ không được giống nhau (“A”, “A”) và cũng không tồn tại hai bộ (“A”, “B”) và (“B”,

“A”).................................................................................................................................................14

15. Các giáo viên có cùng học vị, học hàm, hệ số lương thì mức lương bằng nhau...................... 14

16. Học viên chỉ được thi lại (lần thi >1) khi điểm của lần thi trước đó dưới 5............................. 15

17. Ngày thi của lần thi sau phải lớn hơn ngày thi của lần thi trước (cùng học viên, cùng môn

học)................................................................................................................................................. 16

18. Học viên chỉ được thi những môn mà lớp của học viên đó đã học xong..................................17

19. Khi phân công giảng dạy một môn học, phải xét đến thứ tự trước sau giữa các môn học (sau

khi học xong những môn học phải học trước mới được học những môn liền sau) ...................... 17

20. Giáo viên chỉ được phân công dạy những môn thuộc khoa giáo viên đó phụ trách................18

II. Link code sql.................................................................................................................................... 19

3|Page
IT004 – Cơ sở dữ liệu

DANH MỤC BẢNG

1. Bảng KHOA

2. Bảng MONHOC

3. Bảng DIEUKIEN

4. Bảng GIAOVIEN

5. Bảng LOP

6. Bảng HOCVIEN

7. Bảng GIANGDAY

8. Bảng KETQUATHI

4|Page
IT004 – Cơ sở dữ liệu

NỘI DUNG BÀI LÀM

Câu 1: Kết quả thi là “Dat” nếu điểm từ 5 đến 10 và “Khong dat” nếu điểm nhỏ hơn 5.

- Input: Bảng KETQUATHI

- Output: Ràng buộc kết quả thi điểm từ 5-10 là “Dat” và nhỏ hơn 5 là “Khong dat”.
- Hướng giải thuật :

 Ràng buộc CHECK này xác định rằng nếu giá trị của cột DIEM nằm trong khoảng từ 5
đến 10 và giá trị của cột KQUA là 'Dat', hoặc nếu giá trị của cột DIEM nhỏ hơn 5 và giá
trị của cột KQUA là 'Khong Dat', thì ràng buộc này sẽ được đáp ứng. Nếu điều kiện này
không được đáp ứng, thì câu lệnh chèn hoặc cập nhật dữ liệu trong bảng sẽ bị từ chối.

Câu 2: Học viên thi một môn tối đa 3 lần.

- Input: Bảng KETQUATHI

- Output: Ràng buộc lần thi của học viên chỉ được nhỏ hơn hoặc bằng 3.
- Hướng giải thuật:

 Đầu tiên, chúng ta cần sử dụng câu lệnh ALTER TABLE để thêm ràng buộc kiểm tra
(CHECK constraint) vào bảng KETQUATHI.
 Ràng buộc sẽ kiểm tra giá trị của cột LANTHI (số lần thi) và đảm bảo rằng giá trị này
không vượt quá 3.
 Khi thêm mới hoặc cập nhật dữ liệu trong bảng KETQUATHI, ràng buộc này sẽ được
kiểm tra để đảm bảo tính hợp lệ của số lần thi.
 Nếu số lần thi vượt quá 3, thao tác thêm mới hoặc cập nhật dữ liệu sẽ bị từ chối.

Câu 3: Học kỳ chỉ có giá trị từ 1 đến 3.

5|Page
IT004 – Cơ sở dữ liệu
- Input: Bảng GIANGDAY

- Output: Ràng buộc học kỳ chỉ được giá trị từ 1 đến 3.


- Hướng giải thuật:

 Sử dụng câu lệnh ALTER TABLE để thêm ràng buộc kiểm tra vào bảng GIANGDAY
 Ràng buộc CK_HOCKY sẽ kiểm tra giá trị của cột HOCKY và đảm bảo rằng giá trị này
nằm trong khoảng từ 1 đến 3.
 Khi thêm mới hoặc cập nhật dữ liệu trong bảng GIANGDAY, ràng buộc này sẽ được
kiểm tra để đảm bảo tính hợp lệ của dữ liệu về học kỳ.

Câu 4: Học vị của giáo viên chỉ có thể là “CN”, “KS”, “Ths”, “TS”, “PTS”.

- Input: Bảng GIANGDAY

- Output: Ràng buộc học vị của một giáo viên chỉ có thể nằm trong “CN”, “KS”, “Ths”,
“TS”, “PTS”.
- Hướng giải thuật:

 Sử dụng câu lệnh ALTER TABLE để thêm ràng buộc kiểm tra vào bảng GIAOVIEN.
 Ràng buộc CK_HOCVI sẽ kiểm tra giá trị của cột HOCVI và đảm bảo rằng giá trị này
chỉ nằm trong danh sách học vị cho phép là "CN", "KS", "ThS", "TS", hoặc "PTS".
 Khi thêm mới hoặc cập nhật dữ liệu trong bảng GIAOVIEN, ràng buộc này sẽ được kiểm
tra để đảm bảo tính hợp lệ của học vị.

Câu 5: Lớp trưởng của một lớp phải là học viên của lớp đó.

6|Page
IT004 – Cơ sở dữ liệu

- Input: Bảng LOP

- Output: Ràng buộc để lớp trưởng của một lớp thì phải là học viên của lớp đó.
- Hướng giải thuật:

 Khi có sự cập nhật dữ liệu trên bảng LOP, trigger này sẽ được kích hoạt.
 Trigger sử dụng bảng INSERTED để lấy dữ liệu về lớp sau khi cập nhật (tức là lớp sau
khi thay đổi). Đồng thời, nó sẽ lấy mã lớp của học viên tương ứng từ bảng HOCVIEN.
 Trigger sẽ so sánh xem mã lớp của lớp trưởng hiện tại sau khi cập nhật có khớp với mã
lớp của học viên trong bảng HOCVIEN hay không.
 Nếu mã lớp của lớp trưởng không khớp với mã lớp của học viên, trigger sẽ thực hiện
ROLLBACK để hủy bỏ các thay đổi và in ra thông báo "TRGLOP CUA 1 LOP PHAI
LA HOCVIEN CUA LOP DO".
 Nếu mã lớp của lớp trưởng khớp với mã lớp của học viên, trigger sẽ in ra thông báo
"SUCCESSFUL".

Câu 6: Trưởng khoa phải là giáo viên thuộc khoa và có học vị “TS” hoặc “PTS”.

7|Page
IT004 – Cơ sở dữ liệu

- Input: Bảng KHOA


- Output: Ràng buộc để trưởng khoa nhập vào phải là giáo viên thuộc khoa và có học vị “TS”
hoặc “PTS”.
- Hướng giải thuật:

 Trigger UPDATE_KHOA_C6 kiểm tra xem trưởng khoa (TRGKHOA) của khoa đã cập
nhật có phải là giáo viên thuộc khoa đó hay không. Nếu không, trigger sẽ thực hiện
ROLLBACK và in ra thông báo lỗi "ERROR! TRGKHOA PHAI LA GIAOVIEN
THUOC KHOA". Nếu TRGKHOA là giáo viên thuộc khoa, trigger sẽ kiểm tra học vị của
giáo viên đó, nếu không phù hợp, trigger sẽ thực hiện ROLLBACK và in ra thông báo lỗi
"ERROR! TRGKHOA PHAI CO HOCVI='TS' HOAC HOCVI='PTS'".

 Khi có sự cập nhật dữ liệu trên bảng KHOA hoặc GIAOVIEN, các trigger sẽ được kích
hoạt.

Câu 7: Học viên ít nhất là 18 tuổi.

8|Page
IT004 – Cơ sở dữ liệu

- Input: Bảng HOCVIEN

- Output: Ràng buộc để học viên bắt buộc phải đủ ít nhất là 18 tuổi
- Hướng giải thuật:

 Thực hiện câu lệnh ALTER TABLE để thêm ràng buộc kiểm tra vào bảng HOCVIEN.
 Ràng buộc này có tên là CHECK_TUOI.
 Sử dụng hàm YEAR(GETDATE()) để lấy năm hiện tại và hàm YEAR(NGSINH) để lấy
năm sinh của học viên.
 Chênh lệch giữa năm hiện tại và năm sinh được tính toán, và sau đó kiểm tra xem chênh
lệch này có lớn hơn hoặc bằng 18 không.
 Nếu chênh lệch tuổi không đạt 18, ràng buộc sẽ ngăn chặn thao tác thêm mới hoặc cập
nhật dữ liệu.

Câu 8: Giảng dạy một môn học ngày bắt đầu (TUNGAY) phải nhỏ hơn ngày kết thúc
(DENNGAY).

- Input: Bảng GIANGDAY

- Output: Ràng buộc ngày bắt đầu giảng dạy 1 môn học phải nhỏ hơn ngày kết thúc môn học
đó.
- Hướng giải thuật:

 Chúng ta sử dụng câu lệnh ALTER TABLE để thêm ràng buộc kiểm tra (CHECK
constraint) vào bảng GIANGDAY.
 Ràng buộc này sẽ kiểm tra xem giá trị của cột TUNGAY (ngày bắt đầu) có nhỏ hơn giá
trị của cột DENNGAY (ngày kết thúc) không.
 Khi thêm mới hoặc cập nhật dữ liệu trong bảng GIANGDAY, ràng buộc này sẽ được
kiểm tra để đảm bảo tính chặt chẽ của ngày bắt đầu và ngày kết thúc.
 Nếu ngày bắt đầu lớn hơn hoặc bằng ngày kết thúc, thao tác thêm mới hoặc cập nhật dữ
liệu sẽ bị từ chối.

Câu 9: Giáo viên khi vào làm ít nhất là 22 tuổi.

9|Page
IT004 – Cơ sở dữ liệu

- Input: Bảng GIAOVIEN


- Output: Ràng buộc để giáo viên phải đạt ít nhất là 22 tuổi.
- Hướng giải thuật:

 Sử dụng câu lệnh ALTER TABLE để thêm ràng buộc kiểm tra (CHECK constraint) vào
bảng GIAOVIEN.
 Trong ràng buộc này, chúng ta sử dụng hàm YEAR để lấy năm từ cột NGVL (ngày bắt
đầu làm việc) và từ cột NGSINH (ngày sinh) để tính tuổi khi vào làm việc.
 Ràng buộc sẽ kiểm tra xem sự chênh lệch về tuổi khi vào làm việc có lớn hơn hoặc bằng
22 tuổi không.
 Nếu tuổi khi vào làm việc không đáp ứng điều kiện, thao tác thêm mới hoặc cập nhật dữ
liệu trong bảng GIAOVIEN sẽ bị từ chối.

Câu 10: Tất cả các môn học đều có số tín chỉ lý thuyết và tín chỉ thực hành chênh lệch
nhau không quá 3.

- Input: Bảng MONHOC

- Output: Ràng buộc để số TCLT và số TCTH có chênh lệch không vượt quá 3.
- Hướng giải thuật:

 Sử dụng câu lệnh ALTER TABLE để thêm ràng buộc kiểm tra (CHECK constraint) vào
bảng MONHOC.
 Trong ràng buộc này, chúng ta sử dụng hàm ABS để lấy giá trị tuyệt đối của hiệu số giữa
TCLT (số tín chỉ lý thuyết) và TCTH (số tín chỉ thực hành).
 Ràng buộc này sẽ kiểm tra xem sự chênh lệch giữa số tín chỉ lý thuyết và số tín chỉ thực
hành có lớn hơn 3 đơn vị không.
 Nếu sự chênh lệch không vượt quá 3, thì thao tác thêm mới hoặc cập nhật dữ liệu trong
bảng MONHOC sẽ được chấp nhận.

Câu 11: Học viên chỉ được thi một môn học nào đó khi lớp của học viên đã học xong
môn học này.

10 | P a g e
IT004 – Cơ sở dữ liệu

- Input: Bảng KETQUATHI


- Output: Ràng buộc để học sinh chỉ được thi nếu lớp của học viên đã học viên đã học xong
môn học này.
- Hướng giải thuật:

 Trigger sử dụng các biến @NGTHI và @DENNGAY để lưu trữ giá trị của NGTHI và
DENNGAY từ bảng INSERTED.
 Trigger lấy dữ liệu từ bảng INSERTED để so sánh thông tin về học viên (MAHV), lớp
học (MALOP), và môn học (MAMH).
 Sau đó, trigger kiểm tra xem thời gian thi (@NGTHI) có lớn hơn thời gian kết thúc học
môn học đó (@DENNGAY) hay không. Nếu có, trigger in ra thông báo "SUCCESSFUL!
KETQUATHI HOP LE.".
 Trong trường hợp không, trigger sẽ thực hiện ROLLBACK và in ra thông báo lỗi
"ERROR! LOP CUA HV CHUA HOC XONG MON NAY".
 Khi có sự thêm mới hoặc cập nhật dữ liệu vào bảng KETQUATHI, trigger sẽ được kích
hoạ.

Câu 12: Mỗi học kỳ của một năm học, một lớp chỉ được học tối đa 3 môn.

11 | P a g e
IT004 – Cơ sở dữ liệu

- Input: Bảng GIANGDAY


- Output: Ràng buộc để trong mỗi học kì của một năm thì một lớp học chỉ được học tối đa 3
môn.
- Hướng giải thuật:

 Khi có sự thêm mới hoặc cập nhật dữ liệu vào bảng GIANGDAY, trigger này sẽ được
kích hoạ.
 Trigger sử dụng một biến @SL_MONHOC để lưu trữ số lượng môn học của mỗi lớp
trong cùng học kỳ và cùng năm học.
 Sử dụng câu lệnh SELECT để đếm số môn học (sử dụng COUNT) và lưu vào biến
@SL_MONHOC, dựa trên điều kiện MALOP, HOCKY và NAM tương ứng giữa bảng
GIANGDAY và bảng INSERTED sau khi thêm mới hoặc cập nhật dữ liệu.
 Nếu số lượng môn học vượt quá 3, trigger sẽ thực hiện ROLLBACK để hủy bỏ các thay
đổi và in ra thông báo lỗi "ERROR! LOP NAY DA HOC HON 3 MON TRONG CUNG
HOCKY, NAM".

Câu 13: Sỉ số của một lớp bằng với số lượng học viên thuộc lớp đó.

12 | P a g e
IT004 – Cơ sở dữ liệu

- Input: Bảng HOCVIEN, LOP


- Output: Ràng buộc để sỉ số của một lớp bằng số học viên của lớp đó.
- Hướng giải thuật:

13 | P a g e
IT004 – Cơ sở dữ liệu
 Trigger TRG_LOP_THEM_17:
 Mục đích: Đảm bảo rằng khi một lớp mới được thêm vào, sỉ số của lớp không được bằng
0.
 Khi có sự thêm mới vào bảng LỚP, trigger này sẽ kiểm tra xem số lượng sinh viên (SISO)
của lớp mới có khác 0 hay không. Nếu khác 0, sẽ in ra thông báo "THANH CONG",
ngược lại trigger sẽ in ra thông báo "ERROR" và thực hiện ROLLBACK
TRANSACTION.
 Trigger TRG_LOP_SUA_17:
 Mục đích: Đảm bảo rằng khi có sự cập nhật thông tin của lớp, sỉ số của lớp phải bằng số
lượng học viên thuộc lớp đó.
 Khi có sự cập nhật thông tin lớp, trigger này sẽ so sánh số lượng sinh viên (SISO) của lớp
với số lượng học viên thuộc lớp tương ứng. Nếu bằng nhau, sẽ in ra thông báo "THANH
CONG", ngược lại sẽ in ra "ERROR" và thực hiện ROLLBACK TRANSACTION.
 Trigger TRG_HOCVIEN_THEM_SUA_17:
 Mục đích: Cập nhật số lượng sinh viên (SISO) của lớp sau khi có sự thêm mới hoặc cập
nhật thông tin học viên.
 Khi có sự thêm mới hoặc cập nhật thông tin học viên, trigger này sẽ cập nhật lại SISO
của lớp tương ứng bằng cách tăng thêm số lượng học viên mới vào lớp.
 Trigger TRG_HOCVIEN_XOA_SUA_17:
 Mục đích: Cập nhật số lượng sinh viên (SISO) của lớp sau khi có sự xóa hoặc cập nhật
thông tin học viên.
 Khi có sự xóa hoặc cập nhật thông tin học viên, trigger này sẽ cập nhật lại SISO của lớp
tương ứng bằng cách giảm đi số lượng học viên bị xóa hoặc cập nhật.

14 | P a g e
IT004 – Cơ sở dữ liệu
Câu 14: Trong quan hệ DIEUKIEN giá trị của thuộc tính MAMH và
MAMH_TRUOC trong cùng một bộ không được giống nhau (“A”, “A”) và cũng
không tồn tại hai bộ (“A”, “B”) và (“B”, “A”).

- Input: Bảng DIEUKIEN


- Output: Ràng buộc để thuộc tính MAMH và MAMH_TRUOC trong quan hệ DIEUKIEN ở
cùng 1 bộ thì không được giống nhau và cũng không tồn tại 2 bộ ví dụ như (“A”, “B”), (“B”,
“A”).
- Hướng giải thuật:

 Khi có sự thêm mới hoặc cập nhật dữ liệu vào bảng DIEUKIEN, trigger này sẽ được kích
hoạ.
 Trigger sử dụng các biến @MAMH và @MAMH_TRC để lưu trữ giá trị của MAMH và
MAMH_TRUOC từ bảng INSERTED.
 Trigger kiểm tra xem giá trị của MAMH có bằng với giá trị của MAMH_TRUOC hay
không. Nếu có, trigger sẽ in ra thông báo lỗi và thực hiện ROLLBACK để hủy bỏ các
thay đổi.
 Nếu giá trị của MAMH không bằng với giá trị của MAMH_TRUOC, trigger sẽ kiểm tra
xem đã tồn tại bộ dữ liệu có giá trị MAMH_TRUOC là MAMH và MAMH_TRUOC là
MAMH hay không. Nếu tồn tại, trigger sẽ in ra thông báo lỗi và thực hiện ROLLBACK.
 Nếu không có trường hợp nào trên, trigger sẽ in ra thông báo "THANH CONG".

Câu 15: Các giáo viên có cùng học vị, học hàm, hệ số lương thì mức lương bằng nhau.

15 | P a g e
IT004 – Cơ sở dữ liệu

- Input: Bảng GIAOVIEN


- Output: Ràng buộc để các giáo viên có cùng học vị, học hàm thì mức lương bằng nhau.
- Hướng giải thuật:
 Trigger này được kích hoạt sau mỗi lần có thay đổi hoặc thêm mới giáo viên (FOR
INSERT, UPDATE).
 Trigger sử dụng biến @MUCLUONG để lưu mức lương và biến @MAGV để lưu mã
giáo viên.
 Trigger sau đó lấy thông tin mức lương (@MUCLUONG) từ bảng GIAOVIEN và mã
giáo viên (@MAGV) từ bảng INSERTED (bảng ảo chứa dữ liệu mới được thêm hoặc cập
nhật trong bảng GIAOVIEN).
 Trigger sử dụng DISTINCT để chọn các bản ghi duy nhất trong bảng GIAOVIEN và
INSERTED dựa trên các tiêu chí học vị, học hàm và hệ số lương tương đồng nhau.
 Trigger sau đó cập nhật mức lương của các giáo viên có thông tin tương tự nhau để chắc
chắn rằng họ sẽ có cùng mức lương.

Câu 16: Học viên chỉ được thi lại (lần thi >1) khi điểm của lần thi trước đó dưới 5.

16 | P a g e
IT004 – Cơ sở dữ liệu

- Input: Bảng KETQUATHI


- Output: Ràng buộc để học sinh chỉ được thi lại nếu lần thi trước đó có điểm dưới 5.

- Hướng giải thuật:


 Trigger này được kích hoạt sau khi có sự thêm mới hoặc cập nhật dữ liệu trong bảng
KETQUATHI (FOR INSERT, UPDATE).
 Trigger sử dụng biến @LANTHI để lưu trữ số lần thi và @DIEM để lưu trữ điểm.
 Trigger sau đó lấy số lần thi (@LANTHI) từ bảng INSERTED (bảng chứa dữ liệu mới
được thêm hoặc cập nhật trong bảng KETQUATHI).
 Nếu số lần thi lớn hơn 1 (lần thi > 1), trigger sẽ tiến hành kiểm tra điểm của lần thi trước
đó.
 Trigger lấy điểm (@DIEM) của lần thi trước đó và kiểm tra xem điểm có đạt từ 5 trở lên
hay không. Nếu có, trigger sẽ thực hiện ROLLBACK TRANSACTION và in ra thông
báo "HV NAY DA THI DAT".
 Trong trường hợp điểm không đạt, trigger tiếp tục thực hiện việc xóa các kết quả thi có số
lần thi lớn hơn số lần thi hiện tại.

Câu 17: Ngày thi của lần thi sau phải lớn hơn ngày thi của lần thi trước (cùng học viên,
cùng môn học).

17 | P a g e
IT004 – Cơ sở dữ liệu

- Input: Bảng KETQUATHI


- Output: Ràng buộc để ngày thi của lần thi sau sẽ lớn hơn ngày thi của lần thi trước.
- Hướng giải thuật:
 Khi có sự thêm mới hoặc cập nhật dữ liệu trong bảng KETQUATHI, trigger này sẽ được
kích hoạt (FOR INSERT, UPDATE).
 Trigger sử dụng biến @MAHV để lưu trữ mã học viên, @MAMH để lưu trữ mã môn học,
@LANTHI để lưu trữ số lần thi, và @NGTHI để lưu trữ ngày thi.
 Sau đó, trigger lấy thông tin về số lần thi, mã học viên, mã môn học, và ngày thi từ bảng
INSERTED và bảng KETQUATHI.
 Trigger kiểm tra xem ngày thi của lần thi hiện tại có lớn hơn ngày thi của lần thi tiếp theo
của học viên đó không. Nếu không thỏa mãn, trigger sẽ thực hiện ROLLBACK
TRANSACTION.
Câu 18:Học viên chỉ được thi những môn mà lớp của học viên đó đã học xong.

18 | P a g e
IT004 – Cơ sở dữ liệu

- Input: Bảng HOCVIEN


- Output: Ràng buộc để học viên chỉ thi được những môn mà lớp học viên đó đã học xong.
- Hướng giải thuật:
 Khi có sự cập nhật thông tin của học viên trong bảng HOCVIEN, trigger này sẽ được
kích hoạt (AFTER UPDATE).
 Trigger sử dụng biến @MAHV để lưu trữ mã học viên và @MALOP để lưu trữ mã lớp
học sau khi có sự cập nhật thông tin.
 Sau đó, trigger kiểm tra xem học viên có thi môn học mà lớp của học viên chưa học xong
không, thông qua việc so sánh dữ liệu trong bảng KETQUATHI và GIANGDAY.
 Nếu phát hiện rằng học viên đó thi môn mà lớp của học viên chưa học xong, hoặc thi vào
thời gian không phù hợp, trigger sẽ thực hiện ROLLBACK TRANSACTION.
 Ngược lại, nếu học viên thỏa mãn điều kiện, trigger sẽ in ra thông báo "THANH CONG".

Câu 19: Khi phân công giảng dạy một môn học, phải xét đến thứ tự trước sau giữa các
môn học (sau khi học xong những môn học phải học trước mới được học những
môn liền sau)

19 | P a g e
IT004 – Cơ sở dữ liệu

- Input: Bảng GIANGDAY


- Output: Ràng buộc để muốn học những môn học tiếp theo phải xem có môn học nào liền
trước đó không mới có thể học được.
- Hướng giải thuật:

Câu 20: Giáo viên chỉ được phân công dạy những môn thuộc khoa giáo viên đó phụ
trách.

- Input: Bảng GIANGDAY


- Output: Ràng buộc để giáo viên chỉ được phân công dạy những môn thuộc khoa giao viên
đó phụ trách.
- Hướng giải thuật:
 Trigger này được kích hoạt sau mỗi lần có sự thêm mới hoặc cập nhật dữ liệu trong bảng
GIANGDAY (FOR INSERT, UPDATE).
 Trigger sử dụng biến @MAKHOA1 để lưu trữ mã khoa của môn học và @MAKHOA2
để lưu trữ mã khoa của giáo viên.

20 | P a g e
IT004 – Cơ sở dữ liệu
 Trigger sau đó lấy mã khoa của môn học (@MAKHOA1) và mã khoa của giáo viên
(@MAKHOA2) từ bảng INSERTED (bảng chứa dữ liệu mới được thêm hoặc cập nhật
trong bảng GIANGDAY), cùng với thông tin môn học từ bảng MONHOC và thông tin
giáo viên từ bảng GIAOVIEN.
 Nếu mã khoa của môn học khác với mã khoa mà giáo viên đó phụ trách, trigger sẽ thực
hiện ROLLBACK TRANSACTION và in ra thông báo lỗi "ERROR! MAMH PHAI
THUOC KHOA GIAO VIEN PHU TRACH". Nếu mã khoa hợp lệ, trigger sẽ in ra
"SUCCESSFUL".

LINK CODE:

https://drive.google.com/file/d/1YJRPREWogaPl7dlN-EXBL_CJsoqlamxO/view?usp=sharing

21 | P a g e

You might also like