Nếu điều kiện nàykhô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
Trang 1TRƯỜ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ũ
Trang 2NHẬ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)
Trang 3MỤ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
Trang 5NỘ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àykhô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àykhô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ẽ đượckiể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
Trang 6- 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àynằ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ẽ đượckiể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àychỉ 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ểmtra để đả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 đó
Trang 7- 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 saukhi 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ệnROLLBACK để 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”
Trang 8- 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ậpnhật có phải là giáo viên thuộc khoa đó hay không Nếu không, trigger sẽ thực hiệnROLLBACK và in ra thông báo lỗi "ERROR! TRGKHOA PHAI LA GIAOVIENTHUOC KHOA" Nếu TRGKHOA là giáo viên thuộc khoa, trigger sẽ kiểm tra học vị củagiá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íchhoạt
Câu 7:Học viên ít nhất là 18 tuổi
Trang 9- 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ấynă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ênhlệ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ậpnhậ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 (CHECKconstraint) 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ẽ đượckiể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
Trang 10- 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àobả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
- 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àobả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ữaTCLT (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ựchà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 trongbả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 xongmôn học này
Trang 11- 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ớphọ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ọcmô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íchhoạ
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
Trang 12- 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ẽ đượckí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ớptrong 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ảngGIANGDAY 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 CUNGHOCKY, 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 đó
Trang 13- Input: Bảng HOCVIEN, LOP
Trang 15Câ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ũngkhô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íchhoạ
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 haykhông Nếu có, trigger sẽ in ra thông báo lỗi và thực hiện ROLLBACK để hủy bỏ cácthay đổi
Nếu giá trị của MAMH không bằng với giá trị của MAMH_TRUOC, trigger sẽ kiểm traxem đã 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
Trang 16- 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 (FORINSERT, 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ậpnhậ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ắcchắ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
Trang 17- 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ảngKETQUATHI (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ênhay không Nếu có, trigger sẽ thực hiện ROLLBACK TRANSACTION và in ra thôngbá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,
Trang 18- 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ẽ đượckí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ảngINSERTED 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 theocủa học viên đó không Nếu không thỏa mãn, trigger sẽ thực hiện ROLLBACKTRANSACTION
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
Trang 19- 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ẽ đượckí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ớphọ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 xongkhô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àothờ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ácmô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
Trang 20- 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ảngGIANGDAY (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