đề tài chỉ được bảo lãnh bởi một giảng viên● SINH VIÊN : Mỗi sinh viên sẽ có các thông tin như MÃ SV, TÊN SV, ĐỊA CHỈ, SĐT, EMAIL, GIỚI TÍNH, NGÀY SINH.. Một sinh viên có thể làm nhiều
Trang 1TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
-BÁO CÁO BÀI TẬP LỚN MÔN : HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
ĐỀ TÀI: QUẢN LÝ ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN
Giảng viên HD: NGUYỄN ĐỨC TUẤN
Sinh viên thực hiện:Phm Tu n PhongNguyễn Du Tu n AnhTrần Thị Minh ThuNguyễn Tiến Mnh
Hà nội, 2021
Phm Tu n
Phong
Nguyễn TiếnMnh
Nguyễn Du
Tu n Anh
Trần ThịMinh Thu
Trang 2tblChude,tblDetai
Trang 3PHẦN I PHÁT BIỂU BÀI TOÁN
Qua khảo sát cách quản lý đề tài nghiên cứu khoa học của sinh viên ta th y việc quản lý thông tin của đề tài nghiên cứu là r t quan trọng Việc quản lý chi tiết minhbch là thiết yếu Thông tin cá nhân của SINH VIÊN nằm trong KHOA nào LỚP
nào CHỦ ĐỀ của ĐỀ TÀI và các CÔNG VIỆC nằm trong phm vi đề tài Và đề tài này là do GIẢNG VIÊN nào đứng đầu, bảo lãnh, hướng dẫn Việc quản lý một cách tường minh sẽ tốt cho việc tập hợp đánh giá và đầu tư
● GIẢNG VIÊN MÃ GV, TÊN GV,ĐỊA CHỈ, SĐT, EMAIL, GIỚI :
TÍNH Mỗi giảng viên là người đứng đầu, hướng dẫn và bảo lãnh cho đề tài
mà sinh viên nghiên cứu Mỗi giảng viên chỉ được bảo lãnh cho 1 đề tài và
đề tài chỉ được bảo lãnh bởi một giảng viên
● SINH VIÊN : Mỗi sinh viên sẽ có các thông tin như MÃ SV, TÊN SV, ĐỊA CHỈ, SĐT, EMAIL, GIỚI TÍNH, NGÀY SINH Số điện thoi,
email mỗi sinh viên chỉ sở hữu 1 cái duy nh t Một sinh viên có thể làm nhiều công việc trong nhiều đề tài khác nhau
● KHOA : MÃ KHOA, TÊN KHOA, ĐỊA CHỈ, SĐT Số điện thoi của khoa là duy nh t Một khoa có nhiều lớp
● LỚP : MÃ LỚP, TÊN LỚP, CỐ VẤN Một lớp có nhiều sinh viên
● CHỦ ĐỀ MÃ CD, TÊN CD : Một chủ đề có thể có nhiều đề tài
● ĐỀ TÀI MÃ ĐT, NGÀY BĐ, NGÀY KT, CẤP QL, KINH PHÍ, TÊN :
ĐT C p quản lý như c p trường, c p thành phố, tỉnh, quốc gia……Ngày bắt
đầu phải nhỏ hơn ngày kết thúc
● CÔNG VIỆC MÃ CV, TÊN CV, PHỤ CẤP: Phụ c p là phụ c p theo ngày
Trang 4PHẦN II MÔ HÌNH THỰC THỂ LIÊN KẾT
II.1 Xác định các thực thể và thuộc tính
Từ phát biểu bài toán ta có:
1 Tbl.Sinhvien: iMaSV, sTenSV,sDiachi, iSdt, s Email, bGioitinh,dNgaysinh
⮚ Thuộc tính khóa: iMaSV
2 Tbl.Lop: iMalop, sTenlop, sCovan
⮚ Thuộc tính khóa: iMalop
3 Tbl.Khoa: iMaK, sTenK, sDiadiem, iSdt
⮚ Thuộc tính khóa: iMaK
4 Tbl.Chude: iMaCD, sTenCD
⮚ Thuộc tính khóa : iMaCD
5 Tbl.Detai: iMaDT, dNgayBD, dNgayKT, sCapQL, iKinhphi, sTenDT
⮚ Thuộc tính khóa: iMaDT
6 Tbl.Congviec:iMaCV, sTenCV, iPhucap
⮚ Thuộc tính khóa: iMaCV
7 Tbl.Giangvien: iMaGV, sTenGV,sDiachi, iSdt, s Email, bGioitinh
⮚ Thuộc tính khóa: iMaGV
Trang 6II.2 Xác định liên kết giữa các thực thể
1 Tbl.Sinhvien – thuộc – Tbl.Lop(n-1)
- 1 lớp có nhiều sinh viên
- 1 Sinh viên chỉ thuộc 1 lớp
2 Tbl.Lop – thuộc – Tbl.Khoa(n-1)
4 Tbl.Sinhvien, Tbl.Congviec, Tbl.Detai
- 1 sinh viên có thể làm nhiều công việc
- 1 công việc có thể do nhiều sinh viên làm
- 1 đề tài có nhiều công việc
- 1 công việc có thể có trong nhiều đề tài
- 1 sinh viên có thể làm trong nhiều đề tài
- 1 đề tài có thể có nhiều sinh viên tham gia
⇨ Liên kết bậc 3
5 Tbl.Giangvien -tbl.Detai(1-1)
- 1 giảng viên – hướng dẫn – 1 đề tài
dNgaysinh
Trang 7PHẦN III Mô hình cơ sở dữ liệu quan hệ
● QT1: Chuyển đổi thực thể mnh
(1) : tbl.Sinhvien(iMaSV, sTenSV,sDiachi, iSdt, s Email,
bGioitinh,dNgaysinh)
(2) : tbl.Lop(iMalop, sTenlop, sCovan)
(3) : tbl.Khoa(iMaK, sTenK, sDiadiem, iSdt)
(4) : tbl.Chude(iMaCD, sTenCD)
(5) : tbl.Detai( iMaDT, dNgayBD, dNgayKT, sCapQL, iKinhphi, sTenDT)
(6) :tbl.Congviec( iMaCV, sTenCV, iPhucap)
(7) Tbl.Giangvien:( iMaGV, sTenGV,sDiachi, iSdt, s Email, bGioitinh)
● QT2: Chuyển đổi thuộc tính đa trị
● QT3: Chuyển đổi thực thể yếu
● QT4: Chuyển liên kết quan hệ (m-n)
● QT5: Chuyển đổi quan hệ n-1
Trang 8● QT7: Chuyển đổi quan hệ bậc >2
- Tbl.Sinhvien, tbl.Detai, tbl,Congviec
⇨ (8) : tbl.Thamgia(iMaDT, iMaCV, iMaSV )
⇨ (2’): tbl.Lop(iMalop, sTenlop, sCovan, iMakhoa)
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
Trang 9⇨ (3): tbl.Khoa(iMaK, sTenK, sDiadiem, iSdt)
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
động
Trang 10⇨ (5’’): tbl.Detai( iMaDT, dNgayBD, dNgayKT, sCapQL, iKinhphi, sTenDT, iMaCD, iMaGV)
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
⇨ (6): tbl.Congviec( iMaCV, sTenCV, iPhucap)
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
tăng
Trang 11⇨ (7): Tbl.Giangvien:( iMaGV, sTenGV,sDiachi, iSdt, s Email, bGioitinh)STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
⇨ (8) : tbl.Thamgia(iMaTG, iMaDT, iMaCV, iMaSV )
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
Trang 13PHẦN IV Chuẩn hóa cơ sở dữ liệu
● Mọi thuộc tính đều là nguyên tố, giá trị các thuộc tính trên bộ là đơn trị, không
có thuộc tính nào có giá trị được tính toán từ một số thuộc tính khác
⇨ Lược đồ quan hệ trên đã ở dng chuẩn 1NF
● Mọi thuộc tính không khóa của quan hệ đều phụ thuộc hàm đầy đủ vào khóa chính
⇨ Lược đồ quan hệ trên đã ở dng chuẩn 2NF
● Mọi thuộc tính không khóa của quan hệ đều phụ thuộc trực tiếp vào khóa chính
và không phụ thuộc bắc cầu vào b t kì khóa chính của quan hệ
⇨ Lược đồ quan hệ trên đã ở dng chuẩn 3NF
Vậy lược đồ quan hệ đã được chuẩn hóa về dạng cao nhất – 3NF
Trang 14PHẦN V Cài đặt mức vật lý
1 to bảng Sinh viên
create table tblSinhvien(
iMaSV int identity(1,1),
sTenSV nvarchar(40) not null,
sDiaChi nvarchar(50) not null,
iSDT int unique not null,
sEmail nvarchar(40) unique not null,
bGioiTinh nvarchar(3) not null,
iMaLop int not null,
dNgaysinh date not null,
constraint PK_iMaSV_tblkSinhVien primary key (iMaSV)
)
2 to bảng lớp
create table tblLop(
iMaLop int identity(1,1),
sTenLop nvarchar(40) not null,
sCoVan nvarchar(40) not null,
iMaKhoa int not null,
constraint PK_iMaLop_tblLop primary key(iMaLop)
)
alter table tblLop
add constraint FK_iMaKhoa_tblKhoa foreign key(iMaKhoa) references tblKhoa(iMaKhoa)
3 to bảng khoa
create table tblKhoa(
iMaKhoa int identity(1,1),
sTenKhoa nvarchar(40) not null,
sDiaDiem nvarchar(40) not null,
iSDT int unique not null,
constraint PK_iMaKhoa_tblKhoa primary key(iMaKhoa)
)
alter table tblSinhvien
Trang 15add constraint FK_iMaLop_tblLop foreign key(iMaLop) references tblLop(iMaLop)
4 to bảng chủ đề
create table tblChude(
iMaCD int identity(1,1),
STenCD nvarchar(20) not null
constraint PK_iMaCD_tblChuDe primary key(iMaCD)
)
5 to bảng đề tài
create table tblDetai(
iMaDT int identity(1,1),
sTenDT nvarchar(40) not null,
sCapQL nvarchar(20) not null,
dNgayBD date not null,
dNgayKT date not null,
iKinhPhi int ,
iMaCD int not null,
iMaGV int not null,
constraint PK_iMaDT_tblDeTai primary key(iMaDT)
)
alter table tblDetai
add constraint FK_iMaCD_tblChuDe foreign key(iMaCD) references tblChude(iMaCD),
constraint FK_iMaGV_tblGiangVien foreign key(iMaGV) references tblGiangvien(iMaGV)
6 to bảng công việc
create table tblCongviec(
iMaCV int identity(1,1),
sTenCV nvarchar(40) not null,
fPhuCap float not null,
constraint PK_iMaCV_tblCongViec primary key(iMaCV)
)
Trang 167 to bảng giảng viên
create table tblGiangvien(
iMaGV int identity(1,1),
sTenGV nvarchar(40) not null,
sDiaChi nvarchar(50) not null,
iSDT int unique not null,
sEmail nvarchar(40) unique not null,
bGioiTinh tinyint not null,
constraint PK_iMaGV_tblGiangvien primary key(iMaGV))
8 to bảng tham gia
create table tblThamgia(
iMaGV int identity(1,1) primary key,
iMaDT int not null,
iMaCV int not null,
iMaSV int not null,
constraint FK_tblThamGia_iMaCV foreign key(iMaCV) references tblCongviec(iMaCV),
constraint FK_tblThamGia_iMaDT foreign key(iMaDT) references tblDetai(iMaDT),
constraint FK_tblThamGia_iMaSV foreign key(iMaSV) references tblSinhvien(iMaSV)
)
Trang 17PHẦN VI Thêm dữ liệu
(N'Nguyễn Minh Tâm',N'Hà
Trang 194 insert bảng giảng viên
insert into tblGiangvien(sTenGV,sDiaChi,iSDT,sEmail,bGioiTinh)
values
(N'Vũ Văn Hnh',N'Hà Nội','0489765942','hanhvu@gmail.com',1),
(N'Dương Văn Đông',N'Hà Nam','0445665942','dongduong@gmail.com',1),(N'Nguyễn Thị Nga',N'Thái Bình','0481235942','nganguyen@gmail.com',0),(N'Trần Minh Tâm',N'Hồ Chí Minh','0489765777','tamhcm@gmail.com',0) 5 insert bảng chủ đề
insert into tblChude(sTenCD)
(N'Bảo vệ môi trường',N'Trường','2021/10/30','2021/11/10',100000000,1,1),(N'Ô nhiễm môi trường',N'Trường','2021/11/20','2021/12/10',150000000,1,2),(N'Đi dịch Corona',N'Trường','2021/10/20','2021/12/20',200000000,2,3),(N'Sống khỏe-Sống đẹp',N'Trường','2021/10/20','2021/11/10',5000000,2,4) 7 insert bảng công việc
insert into tblCongviec(sTenCV,fPhuCap)
8 insert bảng tham gia
insert into tblThamgia
(iMaDT,iMaCV,iMaSV)
values
(1,1,1),(1,2,5),(1,3,9),(1,4,10),(1,5,20),(1,5,23),
(2,1,2),(2,2,6),(2,3,20),(2,4,19),(2,5,11),(2,5,18),
Trang 20(3,1,3),(3,2,7),(3,3,21),(3,4,12),(3,5,22),(3,5,17),(4,1,4),(4,2,8),(4,3,15),(4,4,14),(4,5,16),(4,5,13)
Trang 21PHẦN VII Tạo các view
select iMaDT, sTenDT, iMaSV, sTenSV, iMaCV, sTenCV,
DATEDIFF(day, dNgayBD, dNgayKT) as 'isongaylam',
(DATEDIFF(day, dNgayBD, dNgayKT)*tblCongviec.fPhuCap) as'itinhphucap'
from tblSinhvien,tblDetai,tblCongviec,tblThamgia
where
tblSinhvien.iMaSV = tblThamgia.iMaSV and
tblCongviec.iMaCV = tblThamgia.iMaCV and
tblDetai.iMaDT = tblThamgia.iMaDT
group by iMaDT,sTenDT,iMaSV,sTenSV,iMaCV,sTenCV,
Trang 23⮚ View 2: Giảng viên có giới tính nam
create view vw_NamGV_DTM2
as
select iMaGV,sTenGV,bGioiTinh from tblGiangvienwhere bGioiTinh='1'
group by iMaGV,sTenGV,bGioiTinh
Trang 24III Minh Thu
⮚ View 1: To view xem sinh viên làm đề tài nào, thuộc chủ đề nào, giảng viên nào
create view vw_svlamdetai
as
select tblSinhvien.iMaSV as[Ma sv],sTenSV as[Ten sv],sTenCD as[Ten chu de],sTenDT as[Ten de tai],sTenGV as[Ten giang vien]from tblChude left join tblDetai on tblChude.iMaCD=tblDetai.iMaCDleft join tblGiangvien on tblGiangvien.iMaGV=tblDetai.iMaGVleft join tblThamgia on tblThamgia.iMaDT=tblDetai.iMaDTleft join tblSinhvien on tblThamgia.iMaSV=tblSinhvien.iMaSV test
select*from vw_svlamdetai
⮚ View 2: To view xem tổng kinh phí đối với từng chủ đề
create view vw_kinhphi
as
Trang 25select tblChude.iMaCD, sTenCD,sum(iKinhPhi) as[kinh phi]from tblDetai, tblChude
where tblChude.iMaCD=tblDetai.iMaCD
group by tblChude.iMaCD,sTenCD
test
select*from vw_kinhphi
⮚ View 3: To view xem những học sinh làm nhiều hơn 1 đề tài
create view vw_lamnhieuDT
Trang 26⮚ View 1: Đếm xem 1 lớp có bao nhiêu sinh viên
create view vwdemsv
as
select
tblLop.iMaLop,tblLop.iMaKhoa,tblLop.sCoVan,isnull(count(tblSinhvien.iMaSV),0) as 'Số sinh viên'
from tblLop left join tblSinhvien on tblLop.iMaLop =
tblSinhvien.iMaLop
group by tblLop.iMaLop,tblLop.iMaKhoa,tblLop.sCoVan
⮚ View 2: Xem các lớp của từng khoa
create view vwxemkhoa
as
select
tblKhoa.iMaKhoa,tblKhoa.sTenKhoa,tblLop.iMaLop,tblLop.sTenLopfrom tblKhoa,tblLop
where tblKhoa.iMaKhoa=tblLop.iMaKhoa
group by
tblKhoa.iMaKhoa,tblKhoa.sTenKhoa,tblLop.iMaLop,tblLop.sTenLop
Trang 27PHẦN VIII Tạo các thủ tục lưu
where tblDetai.sTenDT = @stenDetai
if(upper(@stenCV) in (select upper(tblCongviec.sTenCV) fromtblCongviec))
begin
select @iMaCV = tblCongviec.iMaCV from tblCongviecwhere tblCongviec.sTenCV = @stenCV
Trang 28while(@int <= @isoSVcanthem)
beginselect top(1) @iMaSV = tblSinhvien.iMaSV,@tenSV = tblSinhvien.sTenSV
from tblSinhvienwhere tblSinhvien.iMaSV not in (select tblThamgia.iMaSV from tblThamgia where tblThamgia.iMaDT = @iMaDT)
insert into tblThamgiavalues(@iMaDT,@iMaCV,@iMaSV)print (N'Vừa thêm sinh viên ' + @tenSV +N' mã sinh viên '+
cast(@iMaSV as varchar) +N' vào đề tài '+
Trang 29⮚ Proc 2: thêm công việc
CREATE PROCEDURE them_cong_viec
else raiserror(N'công việc đã tồn ti trong kho',16,10)
END
Trang 30II Tiến Mnh
⮚ Proc 1: To thủ tục lưu thêm sinh viên
create proc prThemDuLieuSV
@sTenSV nvarchar(50) ,@sDiaChi nvarchar(50),@sEmail
nvarchar(30),@bGioiTinh tinyint,@iMaLop int ,@dNgaySinh date
as
begin
insert into tblSinhvien(sTenSV,sDiaChi,sEmail,bGioiTinh,iMaLop,dNgaysinh)values (@sTenSV,@sDiaChi,@sEmail,@bGioiTinh,@iMaLop,@dNgaySinh)end
⮚ Proc 2: To thủ tục lưu tổng sinh viên theo giới tính
create proc prTongSV_theogioitinh
@bGioiTinh nvarchar(3)
Trang 31III Minh Thu
⮚ Proc 1: To thủ tục lưu cho biết số lượng sinh viên làm đề tài nào đó với tham
số truyền vào là mã đề tài
Trang 33@sTenLop nvarchar(50)
AS
BEGIN
declare @iMaLop int
select @iMaLop = tblLop.iMaLop from tblLop where tblLop.sTenLop =
@sTenLop
select * from tblSinhvien where @iMaLop = tblSinhvien.iMaLopEND
⮚ Proc 2: To thủ tục lưu thêm lớp
CREATE PROCEDURE them_lop
Trang 34END
Trang 35PHẦN IX Tạo các trigger
I Tu n Phong
⮚ Trigger 1: 1 sinh viên chỉ được thêm 1 lần vào 1 dự án
alter TRIGGER Kiem_tra_1SV_1DT
@sTenCV nvarchar(50),@sTenDT nvarchar(50)
select @iMaSV = iMaSV,@iMaDT=iMaDT,@iMaCV = iMaCV from inserted
if(@iMaSV not in (select tblThamgia.iMaSV from tblThamgia where tblThamgia.iMaDT = @iMaDT))
begin
insert into tblThamgiavalues(@iMaDT,@iMaCV,@iMaSV)end
else
begin
select @sTenSV = vw_2.sTenSV,@sTenCV
=vw_2.sTenCV,@sTenDT =vw_2.sTenDT from vw_2
where vw_2.iMaSV = @iMaSV and vw_2.iMaDT = @iMaDTraiserror(N'sinh viên này đã có mặt trong đề tài',16,10)print(N'Sinh viên '+@sTenSV+ N' đã đang làm công việc '+@sTenCV+N' trong đề tài '+@sTenDT)
end
end
Trang 36⮚ Trigger 2: kiểm tra kinh phí có đủ để thêm sinh viên vào làm hay không
create trigger Kiem_tra_kinh_phi
on tblThamgia
after insert
as
begin
declare @kinhphiconlai int ,@iMaDT int
select @iMaDT=iMaDT from inserted
select @kinhphiconlai = vw_3.itienconlai from vw_3 where vw_3.iMaDT = @iMaDT
⮚ Trigger 3: kiểm tra tồn tại công việc
CREATE trigger kiemtra_tenCV
Trang 37select @stenCV = upper(sTenCV),@fphucap = fPhuCap from inserted
if(@stenCV in (select upper(tblCongviec.sTenCV) from tblCongviec))
begin
raiserror (N' -THÔNG BÁO -',16,10)PRINT(N'Công việc ' + @stenCV+ N' đã có trong kho')rollback tran
⮚ Trigger 4: cập nhật kinh phí còn lại
alter table tblDetai
add ikinhphiconlai int
create trigger capnhatkinhphi
on tblThamgia
after insert,update,delete
as
Trang 38update tblDetai
set ikinhphiconlai =vw_3.itienconlai
from vw_3 where tblDetai.iMaDT = vw_3.iMaDTend
declare @bGioiTinh nvarchar(3)
select @bGioiTinh=bGioiTinh from inserted
Trang 39❖ Trigger 2: Kiểm tra số sinh viên trong 1 lớp không được quá 10 ngườicreate trigger tgSVLOP
on tblSinhvien
after insert,update
as
begin
declare @TongSV int
declare @iMalop int
select @iMalop= iMalop from inserted
select @TongSV =(select count(iMaLop) from tblSinhvien where iMaLop
III Minh Thu
❖ Trigger 1: To trigger đảm bảo ngày kết thúc luôn >= ngày hiện ticreate trigger trg_ngay
Trang 40hợp lệ
insert into tblDetai
(sTenDT,sCapQL,dNgayBD,dNgayKT,iMaGV,iMaCD)values (N'Chống dịch',N'Trường','2020/09/30','2021/12/18',1,1)
Trang 41❖ Trigger 2: To trigger tăng 10% kinh phí cho những đề tài có thời hn làm hơn 30 ngày
create trigger trg_kinhphi
Trang 42insert into tblDetai
(sTenDT,sCapQL,dNgayBD,dNgayKT,iKinhPhi,iMaGV,iMaCD)values (N'Chống dịch',N'Trường','2020/09/30','2021/12/18',0,1,2)
IV Tu n Anh
❖ Trigger 1: kiểm tra tên khoa đã tồn ti
create trigger kiemtra_tenkhoa
select @sTenKhoa = upper(sTenKhoa), @sDiaDiem = sDiaDiem,
@iSDT = iSDT from inserted
if( @sTenKhoa in( select upper(tblKhoa.sTenKhoa) from tblKhoa))begin
raiserror (N' -THÔNG BÁO -',16,10)
PRINT(N'Khoa ' + @sTenKhoa+ N' đã có trong kho')end
Trang 43else
begin
insert into tblKhoavalues(@sTenKhoa,@sDiaDiem,@iSDT)end
end
❖ Trigger 2: kiểm tra 1 cố v n 1 lớp
create trigger kiemtra_1cv_1lop
else
begin
Trang 44insert into tblLop
values(@sTenLop,@sCoVan,@iMaKhoa)end
end