Mô tả bài toán Trường quản lý khoa bằng các thông tin: mã khoa, tên khoa, số điện thoai, địa chỉ Một khoa có thể có nhiều sinh viên.. Thông tin sinh viên gồm: mã sinh viên, tên sinh viê
Mô tả bài toán
Trường quản lý khoa bằng các thông tin: mã khoa, tên khoa, số điện thoai, địa chỉ
Một khoa có thể có nhiều sinh viên Thông tin sinh viên gồm: mã sinh viên, tên sinh viên, ngày sinh, giới tính, số điện thoại, địa chỉ
Các đề tài tốt nghiệp được quản lý bằng các thông tin: mã đề tài, tên đề tài, thời gian bắt đầu, thòi gian kết thúc
Giảng viên được quản lý thông qua các thông tin như mã giảng viên, tên, số điện thoại, học vị, chuyên ngành và địa chỉ Để tiến hành chấm các đề tài, cần có hội đồng bảo vệ, bao gồm các thông tin như mã hội đồng, thời gian và địa chỉ.
Khi sinh viên thực hiện đề tài thì ghi lại điểm số và chức vụ của giảng viên cho điểm đó
Một đề tài có thể có nhiều sinh viên cùng thực hiên nhưng một sinh viên chỉ thực hiện một đề tài
Một giảng viên có thể hướng dẫn nhiều đề tài nhưng 1 đề tài chỉ do 1 giảng viên hướng dẫn
Một hội đồng có nhiều giảng viên tham gia chấm điểm cho nhiều sinh viên trên đề tài mỗi sinh viên thực hiện
Các đối tượng
SINH VIÊN (maSV, tenSV, gioiTinh, ngaySinh, SDT, diaChi)
GIẢNG VIÊN (maGV, tenGV, SDT, hocVi, chuyenNganh, diaChi) ĐỀ TÀI (maDT, tenDT, TGBD, TGKT)
KHOA (maK, tenK, SDT, diaChi)
HỘI ĐỒNG (maHD, thoiGian, diaChi)
Các mối liên kết
SINH VIÊN THỰC HIỆN ĐỀ TÀI: 1-n
GIẢNG VIÊN THUỘC HỘI ĐỒNG: n-n
GIẢNG VIÊN CHẤM ĐIỂM SINH VIÊN: n-1
GIẢNG VIÊN HƯỚNG DẪN ĐỀ TÀI: n-1
Mô hình thực thể liên kết
IV Mô hình cơ sở dữ liệu quan hệ
B1: Chuyển kiểu thực thể mạnh
R1: SINH VIÊN (maSV, tenSV, diaChiSV, gioiTinh, SDT, ngay, thang, nam)
R2: GIẢNG VIÊN (maGV, tenGV, diaChiGV, hocVi, chuyenNganh, SDT)
R3: ĐỀ TÀI (maDT, tenDT, TGBD, TGKT)
R4: HỘI ĐỒNG (maHD, thuKi, thoiGian, diaChiHD)
R5: KHOA (maK, tenK, SDT, diaChiK)
B2: Chuyển liển kết một – nhiều
R1 SINH VIÊN (maSV , tenSV, diaChiSV, gioiTinh, SDT, ngay, thang, nam, maK) R1.1 B3: Chuyển liên kết có bậc lớn hơn 2
+Giảng viên thuộc Hội đồng đánh giá Sinh viên trên Đề tài
R6: DanhGia(maHD, maGV, maDT, maSV, chucVuGV, diem)
R1.1: SINH VIÊN (maSV , tenSV, diaChiSV, gioiTinh, SDT, ngay, thang, nam, maK) R2: GIẢNG VIÊN (maGV, tenGV, diaChiGV, hocVi, chuyenNganh, SDT)
R3: ĐỀ TÀI (maDT, tenDT, TGBD, TGKT)
R4: HỘI ĐỒNG (maHD, thuKi, thoiGian, diaChiHD)
R5: KHOA (maK, tenK, SDT, diaChiK)
R6: DanhGia(maHD, maGV, maDT, maSV, chucVuGV, diem)
Tạo database và chèn dữ liêu
Tạo bảng create table KHOA
( maK varchar(10) primary key, tenK nvarchar(50),
( maSV varchar(10) primary key, tenSV nvarchar(30), ngaySinh datetime, gioiTinh nvarchar(5),
SDT varchar(10), diaChi nvarchar(50), maK varchar(10)
) alter table SINHVIEN add constraint FK_SINHVIEN_maK foreign key(maK) references KHOA(maK) create table GIANGVIEN
( maGV varchar(10) primary key, tenGV nvarchar(30),
SDT varchar(10), hocVi nvarchar(20), chuyenNganh nvarchar(30), diaChi nvarchar(50),
( maHD varchar(10), thoiGian datetime, diaChi nvarchar(50), constraint PK_HOIDONG_maHD primary key(maHD)
( maDT varchar(10) primary key, tenDT nvarchar(30),
) alter table DETAI add constraint CK_DETAI_thoigian check(TGBD @DiemHuongDan AND chucVuGV = N'Hướng dẫn'
19 Tạo thủ tục cho biết danh sách giảng viên của 1 hội đồng có tham số truyền vào là mã hội đồng create PROCEDURE DSGVTHEOHD
DISTINCT GIANGVIEN.maGV,tenGV,SDT,hocVi,chuyenNganh,GIANGVIEN.diaChi FROM
GIANGVIEN.maGVhGia.maGV AND HOIDONG.maHDhGia.maHD and HOIDONG.maHD=@maHD
20 Tạo thủ tục cho biết danh sách sinh viên của 1 hội đồng có tham số truyền vào là mã hội đồng
DISTINCT SINHVIEN.maSV,tenSV,ngaySinh,gioiTinh,SDT,SINHVIEN.diaChi,maK FROM
SINHVIEN.maSVhGia.maSV AND HOIDONG.maHDhGia.maHD and HOIDONG.maHD=@maHD
1 Tao trigger khi thêm giảng viên trong bảng DanhGia nếu là GVHD hoặc GVPB thì nhập mã hội đồng là 0 create trigger KtraMaHD on DanhGia for insert as begin
(chucVuGV = N'Hướng dẫn' AND maHD != '0') OR
(chucVuGV = N'Phản biện' AND maHD != '0')
RAISERROR (N'Giảng viên hướng dẫn/phản biện vui lòng nhập mã hội đồng là 0!', 16, 1); (hiện báo lỗi -có thể dùng print thay thế )
INSERT INTO DanhGia (maHD, maGV, maDT, maSV, chucVuGV, diemBV)
('0', 'GV01', 'DT01', 'SV01', N'Hướng dẫn', 9),
('0', 'GV02', 'DT02', 'SV02', N'Phản biện', 8);
INSERT INTO DanhGia (maHD, maGV, maDT, maSV, chucVuGV, diemBV)
('HD03', 'GV01', 'DT01', 'SV03', N'Hướng dẫn', 8), Lỗi
('HD04', 'GV02', 'DT02', 'SV04', N'Phản biện', 7); Lỗi
2 Tạo trigger kiểm tra tính hợp lệ của dữ liệu khi thêm: thoiGianHD>tgkt đề tài khi thêm create trigger KtraTgianHD on DanhGia for insert as begin
FROM inserted,HOIDONG,DETAI,DanhGia
WHERE DanhGia.maHD=HOIDONG.maHD and DanhGia.maDTAI.maDT and HOIDONG.thoiGian thời gian kết thúc và vai trò không phải GVHD hoặc GVPB
IF (@tg2 > @tg1 AND @chucVu NOT IN ('Hướng dẫn', 'Phản biện'))
INSERT INTO DanhGia (maHD, maGV, maDT, maSV, chucVuGV, diemBV)
VALUES (@maHD, @maGV, @maDT, @maSV, @chucVu, @diemBV);
ELSE IF (@tg2 < @tg1 AND @chucVu NOT IN ('Hướng dẫn', 'Phản biện'))
PRINT N'Đề tài đó chưa kết thúc Thời gian kết thúc đề tài (TGKT): ' +
CONVERT(nvarchar, @tg1) + N', Thời gian hội đồng (TGHD): ' + CONVERT(nvarchar,
Điều kiện 2: Vai trò là "Hướng dẫn" hoặc "Phản biện" và mã hội đồng là '0'
IF (@chucVu IN ('Hướng dẫn', 'Phản biện') AND @maHD = '0')
INSERT INTO DanhGia (maHD, maGV, maDT, maSV, chucVuGV, diemBV)
VALUES (@maHD, @maGV, @maDT, @maSV, @chucVu, @diemBV);
ELSE IF (@chucVu IN ('Hướng dẫn', 'Phản biện') AND @maHD != '0')
PRINT N'GVHD hoặc GVPB vui lòng nhập mã HD là 0';
END; exec themDG 'HD01','GV05','DT01','SV01','Ủy viên',8
EXEC themDG 'HD001','GV001','DT001','SV001',N'Hướng dẫn', 8.5
2 Tạo thủ tục có tham số truyền vào là mã sinh viên cho biết đề tài mà sinh viên đó thực hiện
-có thể dùng begin hoặc select luôn
Kiểm tra xem mã sinh viên có tồn tại không
IF NOT EXISTS (SELECT 1 FROM SINHVIEN WHERE maSV = @maSV) BEGIN
PRINT N'Mã sinh viên không tồn tại';
RETURN; Dừng thủ tục nếu mã sinh viên không tồn tại
DECLARE @maDT varchar(10), @tenDT nvarchar(30);
Lấy mã đề tài của sinh viên
Lấy tên đề tài từ bảng DETAI
PRINT N'Đề tài của sinh viên ' + @maSV + N' là: ' + @maDT + N' - ' + @tenDT; END; drop PROCEDURE xemDeTaiBangMaSV exec xemDeTaiBangMaSV'SV00'
The procedure "thongKeSinhVienTheoMaHD" is designed to generate statistics on the number of students associated with each council code (maHD) It accomplishes this by selecting the council code and counting the number of student IDs (maSV) from the "DanhGia" table, grouping the results by the council code To execute this procedure, simply run the command "exec thongKeSinhVienTheoMaHD" to obtain the desired statistics.
4 Thông kê sinh viên của hội đồng theo mã hội đồng nhập vào create procedure thongKeSinhVienTheoMaHDNhapVao
Kiểm tra xem mã có tồn tại không
IF NOT EXISTS (SELECT 1 FROM HOIDONG WHERE maHD = @maHD)
PRINT N'Mã hội đồng không tồn tại';
RETURN; Dừng thủ tục nếu mã không tồn tại
The SQL query retrieves distinct student information, including their ID, name, project title, and evaluation score, by joining the SINHVIEN, DETAI, and DanhGia tables based on specific conditions The procedure "thongKeSinhVienTheoMaHDNhapVao" is executed with the parameter 'HD01' to analyze student data associated with that particular ID.
5 Cập nhật điểm của sinh viên theo tham số truyền vào là mã giảng viên, chức vụ, mã sinh viên và điểm create procedure capNhatDiemSV
@maGV varchar(10), @chucVuGV nvarchar(50),@maSV varchar(10),@diemBV float as
WHERE @maGV=maGV and @chucVuGV=chucVuGV and @maSV=maSV exec capNhatDiemSV'GV02',N'Chủ tịch','SV01',8 trước:
6 Tạo thủ tục có tham số truyền vào là năm cho biết các hội đồng trong năm đó create procedure truyenThamSoLaNam
@year Int as select HOIDONG.maHD,diaChi from HOIDONG where YEAR(thoiGian)=@year exec truyenThamSoLaNam 2023
The procedure TKSoLuongDeTai is designed to generate statistics on the number of projects supervised by each lecturer It selects the lecturer's ID (maGV), name (tenGV), and counts the number of projects (maDT) associated with them The data is retrieved from the GIANGVIEN and DanhGia tables, grouping the results by the lecturer's ID and name Executing this procedure will provide a comprehensive overview of the project distribution among faculty members.
8 Tạo thủ tục thêm dữ liệu cho bảng SINHVIEN theo các tham số truyền vào create procedure ThemSinhVien
To insert a new student record into the SINHVIEN table, use the following SQL command: `INSERT INTO SINHVIEN (maSV, tenSV, ngaySinh, gioiTinh, SDT, diaChi, maK) VALUES (@maSV, @tenSV, @ngaySinh, @gioiTinh, @SDT, @diaChi, @maK)` For example, to add a student with ID 'SV06', name 'Nguyễn ANH Dung', birth date '2003-03-03', gender 'Male', phone number '0324025016', address 'Hà Nội', and class code 'K01', execute the command: `EXEC ThemSinhVien 'SV06', N'Nguyễn ANH Dung', '2003-03-03', N'Nam', '0324025016', N'Hà Nội', 'K01'`.
Tạo thủ tục DSDTtheoMaHD để liệt kê danh sách tên các đề tài do hội đồng đánh giá theo mã hội đồng trong một khoảng thời gian nhất định Thủ tục này nhận tham số đầu vào bao gồm mã hội đồng và thời gian để trả về kết quả chính xác.
@maHD varchar(10),@thang int ,@year int as begin
Kiểm tra xem mã có tồn tại không
IF NOT EXISTS (SELECT 1 FROM HOIDONG WHERE maHD = @maHD)
PRINT N'Mã hội đồng không tồn tại';
RETURN; Dừng thủ tục nếu mã không tồn tại
The SQL query retrieves specific details from the "DanhGia," "DETAI," and "HOIDONG" tables, filtering results based on the year and month specified by the user, as well as a particular committee ID The execution of the stored procedure "DSDTtheoMaHD" is demonstrated with parameters indicating the committee ID 'HD01' and the date set to May 2024.
10 Tạo thủ tục xóa bản ghi trong bảng DanhGia theo mã sinh viên được truyền vào
@masv varchar(10) as delete from DanhGia where maSV=@masv exec spxoadgtheomasv'SV01' select * from DanhGia trước:
11 Tạo thủ tục tính trung bình cộng điểm của khoa theo mã khoa được truyền vào create proc sptbcdiemkhoa
The SQL query retrieves the average rating (TBC) of departments by selecting the department ID (maK), name (tenK), phone number (SDT), and address (diaChi) from the KHOA table It joins the KHOA and SINHVIEN tables based on the department ID, while filtering results according to a specific department identifier (@makhoa) The results are grouped by department ID, name, phone number, and address to provide a comprehensive overview of each department's average rating.
12 Thủ tục cho biết điểm thành phần của sinh viên (tham số truyền vào là mã sinh viên) create proc spdiemtheomsv
@masv varchar(10) as select distinct SINHVIEN.maSV,tenSV,ngaySinh,gioiTinh,SDT,SINHVIEN.diaChi,maK, diemBV from SINHVIEN,DanhGia where SINHVIEN.maSVhGia.maSV and SINHVIEN.maSV=@masv
13 Tạo thủ tục có tham số truyền vào là mã giảng viên cho biết các đề tài mà giảng viên đó hướng dẫn create PROCEDURE DeTaiGiangVienHuongDan
SELECT distinct DETAI.maDT,tenDT
WHERE DETAI.maDThGia.maDT and DanhGia.maGV = @MaGV; END exec DeTaiGiangVienHuongDan 'GV01'
14 Kiểm tra xem đề tài đó có hay chưa
IF EXISTS (SELECT 1 FROM DETAI WHERE maDT = @MaDT) BEGIN
PRINT N'Đề tài tồn tại';
PRINT N'Đề tài không tồn tại';
15 Cập nhật tgkt của đề tài do1 giảng viên hướng dẫn theo magv truyền vào,maDT truyền vào, tgkt mới create PROCEDURE CapNhatThoiGianKetThucDeTai
WHERE DETAI.maDT = DanhGia.maDT AND DanhGia.maGV = @MaGV and DETAI.maDT=@MaDT
16 Xóa đề tài theo sinh viên theo mã sinh viên
WHERE DETAI.maDT = DanhGia.maDT and DanhGia.maSV = @MaSV );
17.Thống kê số lượng sinh viên của 1 đề tài
DETAI.maDT,tenDT,COUNT(SINHVIEN.maSV) AS SoluongSV
DETAI.maDThGia.maDT and DanhGia.maDT = @MaDT andSINHVIEN.maSVhGia.maSV
GROUP BY DETAI.maDT,tenDT
END exec SOLUONGSV1DETAI 'DT03'
18 Tạo thủ tục có tham số truyền vào là điểm hướng dẫn và cho biết các sinh viên có điểmHD trên 9
SINHVIEN.maSV,tenSV,chucVuGV,diemBV
DanhGia.maSV=SINHVIEN.maSV AND diemBV > @DiemHuongDan AND chucVuGV = N'Hướng dẫn'
19 Tạo thủ tục cho biết danh sách giảng viên của 1 hội đồng có tham số truyền vào là mã hội đồng create PROCEDURE DSGVTHEOHD
DISTINCT GIANGVIEN.maGV,tenGV,SDT,hocVi,chuyenNganh,GIANGVIEN.diaChi FROM
GIANGVIEN.maGVhGia.maGV AND HOIDONG.maHDhGia.maHD and HOIDONG.maHD=@maHD
20 Tạo thủ tục cho biết danh sách sinh viên của 1 hội đồng có tham số truyền vào là mã hội đồng
DISTINCT SINHVIEN.maSV,tenSV,ngaySinh,gioiTinh,SDT,SINHVIEN.diaChi,maK FROM
SINHVIEN.maSVhGia.maSV AND HOIDONG.maHDhGia.maHD and HOIDONG.maHD=@maHD
Các trigger
1 Tao trigger khi thêm giảng viên trong bảng DanhGia nếu là GVHD hoặc GVPB thì nhập mã hội đồng là 0 create trigger KtraMaHD on DanhGia for insert as begin
(chucVuGV = N'Hướng dẫn' AND maHD != '0') OR
(chucVuGV = N'Phản biện' AND maHD != '0')
RAISERROR (N'Giảng viên hướng dẫn/phản biện vui lòng nhập mã hội đồng là 0!', 16, 1); (hiện báo lỗi -có thể dùng print thay thế )
INSERT INTO DanhGia (maHD, maGV, maDT, maSV, chucVuGV, diemBV)
('0', 'GV01', 'DT01', 'SV01', N'Hướng dẫn', 9),
('0', 'GV02', 'DT02', 'SV02', N'Phản biện', 8);
INSERT INTO DanhGia (maHD, maGV, maDT, maSV, chucVuGV, diemBV)
('HD03', 'GV01', 'DT01', 'SV03', N'Hướng dẫn', 8), Lỗi
('HD04', 'GV02', 'DT02', 'SV04', N'Phản biện', 7); Lỗi
2 Tạo trigger kiểm tra tính hợp lệ của dữ liệu khi thêm: thoiGianHD>tgkt đề tài khi thêm create trigger KtraTgianHD on DanhGia for insert as begin
FROM inserted,HOIDONG,DETAI,DanhGia
WHERE DanhGia.maHD=HOIDONG.maHD and DanhGia.maDTAI.maDT and HOIDONG.thoiGian