Tải bản đầy đủ (.docx) (11 trang)

Lab6 Quản lý thông tin IE103 UIT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (526.82 KB, 11 trang )

Bài tập thực hành môn Quản lý Thông tin tuần 6
Câu 1: Liệt kê các thực thể có mặt trong CSDL trên.
SINHVIEN,
DETAI,
GIAOVIEN,
HOCVI,
CHUYENNGANH,
HOCHAM,
HOIDONG
Câu 2: Mô tả lược đồ quan hệ cho CSDL trên. Vẽ sơ đồ Diagram cho các quan hệ
trên (sử dụng chức năng tạo Diagram trong SQL Server)
SINHVIEN (MSSV, TENSV, SODT, LOP, DIACHI)
DETAI (MSDT, TENDT)
SV_DETAI (MSSV, MSDT)
GIAOVIEN (MSGV, TENGV, DIACHI, SODT, MSHH, NAMHH)
HOCVI (MSHV, TENHV)
CHUYENNGANH (MSCN, TENCN)
GV_HV_CN (MSGV, MSHV, MSCN, NAM)
HOCHAM (MSHH, TENHH)
GV_HDDT (MSGV, MSDT, DIEM)
GV_PBDT (MSGV, MSDT, DIEM)
GV_UVDT (MSGV, MSDT, DIEM)
HOIDONG (MSHD, PHONG, TGBD, NGAYHD, TINHTRANG, MSGV)
HOIDONG_GV (MSHD, MSGV)
HOIDONG_DT (MSHD, MSDT, QUYETDINH)


Sơ đồ Diagram:
SV_DETAI

SINHVIEN


MSSV

MSSV

TENSV

MSDT

SODT

GV_PBDT

LOP

MSGV

DIACHI

MSDT

DETAI

GV_HDDT

DIEM

MSDT

MSGV


TENDT

MSDT
DIEM

GV_UVDT

HOIDONG_DT

MSGV

MSHD
MSDT
MSDT
QUYETDINH

DIEM

HOIDONG_GV
MSHD
MSGV

HOIDONG
MSHD

HOCHAM

PHONG

MSHH


TGBD

TENHH

NGAYHD
TINHTRANG
MSGV

GIAOVIEN
MSGV
TENGV
DIACHI
SODT
MSHH

GV_HV_CN

NAMHH

MSGV
MSHV
MSCN
NAM

CHUYENNGANH
HOCVI
MSHV
TENHV


MSCN
TENCN


Câu 3: Hiện thực các ràng buộc như sau. Yêu cầu phát biểu ràng buộc, và vẽ bảng
tầm ảnh hưởng, sau đó hiện thực trong SQL Server.
3.1. Một sinh viên chỉ được tham gia một đề tài.
Bảng tầm ảnh hưởng:
Thêm
Sửa
SINHVIEN
DETAI
SV_DETAI
+
+(MSSV)
- Trigger cho thao tác thêm dữ liệu trên bảng SV_DETAI:

Xóa
-(*)
-(*)
-

create trigger TRG_SV_DETAI_INSERT
on SV_DETAI
for insert
as
begin
declare @MSSV char(8), @SLDT int
select @MSSV = MSSV from inserted
select @SLDT = count(MSDT)

from SV_DETAI
where MSSV = @MSSV
if(@SLDT > 1)
begin
print 'Mot sinh vien chi duoc tham gia mot de tai!'
rollback transaction
end
end

- Trigger cho thao tác sửa dữ liệu trên bảng SV_DETAI:
create trigger TRG_SV_DETAI_UPDATE
on SV_DETAI
for update
as
begin
declare @MSSV char(8), @SLDT int
select @MSSV = MSSV from inserted
select @SLDT = count(MSDT) from SV_DETAI
where MSSV = @MSSV
if(@SLDT > 1)
begin
print 'Mot sinh vien chi duoc tham gia mot de tai!'
rollback transaction
end
end


3.2. Một đề tài khơng có q 3 sinh viên tham gia.
Bảng tầm ảnh hưởng:
Thêm

Sửa
SINHVIEN
DETAI
SV_DETAI
+
+(MSDT)
- Trigger cho thao tác thêm dữ liệu trên bảng SV_DETAI:
create trigger TRG_SV_DETAI_MAX_BA_INSERT
on SV_DETAI
for insert
as
begin
declare @MSDT char(8), @SLSV int
select @MSDT = MSDT from inserted
select @SLSV = count(MSSV)
from SV_DETAI
where MSDT = @MSDT
if(@SLSV > 3)
begin
print 'Mot de tai khong qua 3 sinh vien!'
rollback transaction
end
end

- Trigger cho thao tác sửa dữ liệu trên bảng SV_DETAI:
create trigger TRG_SV_DETAI_MAX_BA_UPDATE
on SV_DETAI
for update
as
begin

declare @MSDT char(8), @SLSV int
select @MSDT = MSDT from inserted
select @SLSV = count(MSSV)
from SV_DETAI
where MSDT = @MSDT
if(@SLSV > 3)
begin
print 'Mot de tai khong qua 3 sinh vien!'
rollback transaction
end
end

Xóa
-(*)
-(*)
-


3.3. Điểm của đề tài trong thang điểm từ 0 đến 10.
Bảng tầm ảnh hưởng:
Thêm

Sửa

Xóa

GV_UVDT

+


+(DIEM)

-

GV_HDDT

+

+(DIEM)

-

GV_PBDT

+

+(DIEM)

-

- Thêm ràng buộc DIEM trên bảng GV_UVDT:
alter table GV_UVDT add
constraint CHECK_DIEM_GV_UVDT
check (DIEM between 0 and 10)
- Thêm ràng buộc DIEM trên bảng GV_HDDT:
alter table GV_HDDT add
constraint CHECK_DIEM_GV_HDDT
check (DIEM between 0 and 10)

-Thêm ràng buộc DIEM trên bảng GV_PBDT:

alter table GV_PBDT add
constraint CHECK_DIEM_GV_PBDT
check (DIEM between 0 and 10)

3.4. GV là chủ tịch hội đồng phải có học vị tiến sĩ.
Thêm
Sửa
HOIDONG
+
+(MSGV)
GIAOVIEN
HOCVI
GV_HV_CN
+(MSGV, MSHV)
- Trigger cho thao tác thêm dữ liệu trên bảng HOIDONG:

Xóa
-(*)
-(*)
-(*)
+

create trigger TRG_TS_MSGV_HOIDONG_INSERT
on HOIDONG
for insert
as
begin
declare @MSGV char(8), @MSHV int
select @MSGV = MSGV from inserted
select @MSHV = MSHV

from GV_HV_CN
where MSGV = @MSGV
if (@MSHV != 4)
begin
print 'Chu tich hoi dong phai co hoc vi tien si'
rollback transaction
end
end


- Trigger cho thao tác sửa dữ liệu trên bảng HOIDONG:
create trigger TRG_TS_MSGV_HOIDONG_UPDATE
on HOIDONG
for update
as
begin
declare @MSGV char(8), @MSHV int
select @MSGV = MSGV from inserted
select @MSHV = MSHV
from GV_HV_CN
where MSGV = @MSGV
if (@MSHV != 4)
begin
print 'Chu tich hoi dong phai co hoc vi tien si'
rollback transaction
end
end

- Trigger cho thao tác sửa dữ liệu trên bảng GV_HV_CN:
create trigger MSGV_MSHV_GV_HV_CN_UPDATE

on GV_HV_CN
for UPDATE
as
begin
if ( exists (
select *
from HOIDONG, inserted
where HOIDONG.MSGV = inserted.MSGV)
)
begin
declare @MSGV char(8), @MSHV int
select @MSGV = MSGV from inserted
select @MSHV = MSHV
from GV_HV_CN
where MSGV = @MSGV
if (@MSHV != 4)
begin
print 'Chu tich hoi dong phai co hoc vi tien si'
rollback transaction
end
end
end


- Trigger cho thao tác xóa dữ liệu trên bảng GV_HV_CN:
create trigger MSGV_MSHV_GV_HV_CN_DELETE
on GV_HV_CN
for delete
as
begin

if ( exists (
select *
from HOIDONG, deleted
where HOIDONG.MSGV = deleted.MSGV)
)
begin
declare @MSHV int
select @MSHV = MSHV from deleted
if (@MSHV = 4)
begin
print 'Chu tich hoi dong phai co hoc vi tien si'
rollback transaction
end
end
end

Câu 4: Viết các truy vấn xử lý thông tin như sau sử dụng Function, hoặc stored
procedured:
4.1. Tìm điểm trung bình của một đề tài.
create procedure TINH_DTB @MSDT char(6), @DIEMTB float OUTPUT
as
begin
select @DIEMTB = (SUM(GV_HDDT.DIEM) + SUM(GV_PBDT.DIEM) +
SUM(GV_UVDT.DIEM)) / (count(GV_HDDT.MSGV) +
count(GV_PBDT.MSGV) + count(GV_UVDT.MSGV))
from DETAI as A inner join GV_HDDT on A.MSDT = GV_HDDT.MSDT
inner join GV_UVDT on A.MSDT = GV_UVDT.MSDT
inner join GV_PBDT on a.MSDT = GV_PBDT.MSDT
where A.MSDT = @MSDT
if (@DIEMTB is null)

set @DIEMTB = 0
end
declare @A float
-- Tạo biến A
exec TINH_DTB '97005', @A OUTPUT -- Truyền MSDT và A vào hàm TINH_DTB
print @A – In ra giá trị biến A


4.2. In ra danh sách điểm trung bình của mỗi đề tài trong danh sách đề tài.
create function F_TINH_DTB (@MSDT char(6))
returns float
as
begin
declare @DIEMTB float
select @DIEMTB = (SUM(GV_HDDT.DIEM) + SUM(GV_PBDT.DIEM) +
SUM(GV_UVDT.DIEM)) / (count(GV_HDDT.MSGV) +
count(GV_PBDT.MSGV) + count(GV_UVDT.MSGV))
from DETAI as A inner join GV_HDDT on A.MSDT = GV_HDDT.MSDT
inner join GV_UVDT on A.MSDT = GV_UVDT.MSDT
inner join GV_PBDT on a.MSDT = GV_PBDT.MSDT
where A.MSDT = @MSDT
if (@DIEMTB is null)
set @DIEMTB = 0
return @DIEMTB
end
-- In ra danh sách điểm trung bình của mỗi đề tài
select MSDT, TENDT, dbo.F_TINH_DTB(MSDT) DIEM_TB
from DETAI

4.3. In ra danh sách giảng viên có phản biện đề tài.

create procedure DS_GV_PBDT
as
begin
select distinct GIAOVIEN.*
from GIAOVIEN, GV_PBDT
where GIAOVIEN.MSGV = GV_PBDT.MSGV
end
-- In ra danh sách giảng viên có phản biện đề tài
exec DS_GV_PBDT

4.4. In ra danh sách các đề tài trong một hội đồng.
create procedure DS_DETAI_HOIDONG @MSHD int
as
begin
select HD.MSHD, DETAI.*
from DETAI, HOIDONG_DT HD
where DETAI.MSDT = HD.MSDT AND
@MSHD=HD.MSHD
end
-- In ra danh sách các đề tài trong một hội đồng (1)
exec DS_DETAI_HOIDONG 1


Câu 5: Phân quyền, xác thực.
5.1. Tạo ra 3 user: GIANGVIEN, GIAOVU và SINHVIEN, đặt mật khẩu tuỳ ý.


Tạo login user




create login GIANGVIEN with password = '12345'
create login GIAOVU with password = '12345'
create login SINHVIEN with password = '12345'
Tạo database user

create user GIANGVIEN for login GIANGVIEN
create user GIAOVU for login GIAOVU
create user SINHVIEN for login SINHVIEN
5.2. Phân quyền cho các user trên database như sau:



GIAOVU có quyền xem và chỉnh sửa trên tất cả các bảng.
grant
grant
grant
grant
grant
grant
grant
grant
grant
grant
grant
grant
grant
grant




update
update
update
update
update
update
update
update
update
update
update
update
update
update

on
on
on
on
on
on
on
on
on
on
on
on
on
on


SINHVIEN to GIAOVU
DETAI to GIAOVU
SV_DETAI to GIAOVU
GIAOVIEN to GIAOVU
HOCVI to GIAOVU
CHUYENNGANH to GIAOVU
GV_HV_CN to GIAOVU
HOCHAM to GIAOVU
GV_HDDT to GIAOVU
GV_PBDT to GIAOVU
GV_UVDT to GIAOVU
HOIDONG to GIAOVU
HOIDONG_GV to GIAOVU
HOIDONG_DT to GIAOVU

GIANGVIEN có quyền xem trên các bảng liên quan đến thông tin giáo viên,
thông tin học sinh, các đề tài mà GV hướng dẫn, phản biện hay làm uỷ viên,
và xem thông tin hội đồng
grant
grant
grant
grant
grant
grant



select,
select,

select,
select,
select,
select,
select,
select,
select,
select,
select,
select,
select,
select,

select
select
select
select
select
select

on
on
on
on
on
on

GIAOVIEN to GIANGVIEN
SINHVIEN to GIANGVIEN
GV_HDDT to GIANGVIEN

GV_PBDT to GIANGVIEN
GV_UVDT to GIANGVIEN
HOIDONG to GIANGVIEN

GIANGVIEN có quyền cập nhật thơng tin của giảng viên.
grant update on GIAOVIEN to GIANGVIEN



SINHVIEN có quyền xem thơng tin của sinh viên, của hội đồng và các đề tài
hiện hữu trên hệ thống.
grant select on SINHVIEN to SINHVIEN
grant select on HOIDONG to SINHVIEN


grant select on DETAI to SINHVIEN



Tất cả người dùng đều khơng có quyền xố thơng tin.
deny
deny
deny
deny
deny
deny
deny
deny
deny
deny

deny
deny
deny
deny

delete
delete
delete
delete
delete
delete
delete
delete
delete
delete
delete
delete
delete
delete

on
on
on
on
on
on
on
on
on
on

on
on
on
on

SINHVIEN to GIANGVIEN, GIAOVU, SINHVIEN
DETAI to GIANGVIEN, GIAOVU, SINHVIEN
SV_DETAI to GIANGVIEN, GIAOVU, SINHVIEN
GIAOVIEN to GIANGVIEN, GIAOVU, SINHVIEN
HOCVI to GIANGVIEN, GIAOVU, SINHVIEN
CHUYENNGANH to GIANGVIEN, GIAOVU, SINHVIEN
GV_HV_CN to GIANGVIEN, GIAOVU, SINHVIEN
HOCHAM to GIANGVIEN, GIAOVU, SINHVIEN
GV_HDDT to GIANGVIEN, GIAOVU, SINHVIEN
GV_PBDT to GIANGVIEN, GIAOVU, SINHVIEN
GV_UVDT to GIANGVIEN, GIAOVU, SINHVIEN
HOIDONG to GIANGVIEN, GIAOVU, SINHVIEN
HOIDONG_GV to GIANGVIEN, GIAOVU, SINHVIEN
HOIDONG_DT to GIANGVIEN, GIAOVU, SINHVIEN

Câu 6: Thiết kế report cho đề tài như sau:
a. Thông tin GV phản biện.

b. Thông tin hội đồng chấm đề tài


c. Thông tin điểm đề tài (lưu ý: điểm làm tròn 2 chữ số)




×