Đang tải... (xem toàn văn)
đề 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ỚNMÔ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:
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 minh bch 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
⇨ (5’’): tbl.Detai( iMaDT, dNgayBD, dNgayKT, sCapQL, iKinhphi, sTenDT, iMaCD, iMaGV)
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
Trang 17PHẦN VI Thêm dữ liệu
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)
(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
⮚ View 2: Hiển thị sinh viên làm công việc gì trong đề tài nào và tiền phụ c p có thể nhân sau khi đề tài kết thúc
create view vw_2 as
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 23II Tiến Mnh
⮚ View 1: To view sinh viên ở hà nội create view vw_SVHN_DTM1 as
select iMaSV,sTenSV,bGioiTinh,sDiaChi from tblSinhvien where sDiaChi =N'Hà Nội'
group by iMaSV,sTenSV,bGioiTinh,sDiaChi
⮚ View 2: Giảng viên có giới tính nam create view vw_NamGV_DTM2 as
select iMaGV,sTenGV,bGioiTinh from tblGiangvien where 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.iMaCD left join tblGiangvien on tblGiangvien.iMaGV=tblDetai.iMaGV left join tblThamgia on tblThamgia.iMaDT=tblDetai.iMaDT left 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 as
select tblThamGia.iMaSV , sTenSV, count(iMaDT) as [SLDT] from tblSinhvien, tblThamgia
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(tblSinhv ien.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
Trang 27PHẦN VIII Tạo các thủ tục lưu I Tu n Phong
⮚ Proc 1: Tự động thêm sinh viên vào đề tài với tham số truyền vào là tên đề tài, công việc cần tuyển thêm và số sinh viên cần thêm
alter PROCEDURE them_sinh_vien_vao_de_tai
where tblDetai.sTenDT = @stenDetai
if(upper(@stenCV) in (select upper(tblCongviec.sTenCV) from tblCongviec))
select @iMaCV = tblCongviec.iMaCV from tblCongviec where tblCongviec.sTenCV = @stenCV
Trang 29⮚ Proc 2: thêm công việc
CREATE PROCEDURE them_cong_viec
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
⮚ 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 32end test
sp_slsv @detai=1
⮚ Proc 2: To thủ tục lưu cho biết tên chủ đề, đề tài, giảng viên của sinh viên đã nhập với tham số truyền vào là mã sinh viên
Trang 33@sTenLop nvarchar(50) AS
declare @iMaLop int
select @iMaLop = tblLop.iMaLop from tblLop where tblLop.sTenLop = @sTenLop
select * from tblSinhvien where @iMaLop = tblSinhvien.iMaLop END
⮚ 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
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 = @iMaDT raiserror(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
declare @kinhphiconlai int ,@iMaDT int select @iMaDT=iMaDT from inserted
select @kinhphiconlai = vw_3.itienconlai from vw_3 where
⮚ 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))
raiserror (N' -THÔNG BÁO -',16,10) PRINT(N'Công việc ' + @stenCV+ N' đã có trong kho')
⮚ 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.iMaDT end
II Tiến Mnh
❖ Trigger 1: kiểm tra giới tính nhập phải là Nam hoặc Nữ alter trigger trGioiTinh on tblSinhVien
after insert,update as
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ười create trigger tgSVLOP
on tblSinhvien after insert,update as
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 ti create trigger trg_ngay
Trang 41❖ Trigger 2: To trigger tăng 10% kinh phí cho những đề tài có thời hn làm
Trang 42❖ 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 43❖ Trigger 2: kiểm tra 1 cố v n 1 lớp create trigger kiemtra_1cv_1lop
select @sCoVan = sCoVan, @sTenLop = sTenLop, @iMaKhoa = iMaKhoa from inserted
if( @sCoVan in ( select tblLop.sCoVan from tblLop where tblLop.iMaKhoa = @iMaKhoa))
raiserror (N' -THÔNG BÁO -',16,10) PRINT(N'Cố v n ' + @sCoVan+ N' đã có trong kho') end
else begin
Trang 44insert into tblLop
values(@sTenLop,@sCoVan,@iMaKhoa) end
end
Trang 45PHẦN X Phân tán dữ liệu
I Tu n Phong Trên máy chủ
⮚To login, user, phân quyền
● create login maychu
● with password= '11111111'
● create user phong_maychu
● for login maychu
● with default_schema = btl
● grant insert,delete,select on tblCongviec to phong_maychu grant insert,delete,select on tblThamgia to phong_maychu
⮚To link server tới máy trm
❖ Phân tán ngang bảng công việc với phụ c p >1000000 thì lưu ti máy trm create trigger phan_tan_tblCongviec
Trang 46on tblCongviec after insert as begin
declare @iMaCV int,@fphucap float,@sTenCV nvarchar(50)
select @iMaCV = iMaCV,@fphucap = fPhucap,@sTenCV = sTenCV from
❖ Phân tán ngang bảng tham gia theo mã đề tài chẵn lẻ( lẻ lưu ti trm) create trigger phan_tan_tblThamgia
on tblThamgia after insert as begin
declare @iMaCV int,@iMaSV int ,@iMaDT int
select @iMaCV = iMaCV,@iMaDT= iMaDT,@iMaSV = iMaSV from inserted
if( @iMaDT %2=1) begin
rollback tran
print(N'thông tin tham gia đề tài cảu sinh viên đã được lưu ti trm 1') insert into LINK_TOI_MAY_TRAM.BTL_TRAM.dbo.tblThamgia