Mỗi phòng ban có các nhân viên và nhân viên được quản lí bởi các thông tin:tên nhân viên, mã nhân viên, ngày sinh, giới tính, địa chỉ, lương.. Mỗi nhân viên sẽ có người thân và người thâ
Trang 1TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
Vũ Quốc Hưng -1910A05
Hà Nội – 2021
Trang 2MỤC LỤC
I PHÁT BIỂU BÀI TOÁN 2
II MÔ HÌNH CSDL QUAN HỆ 3
1 Xác định các kiểu thực thể và thuộc tính 3
2 Xác định các thuộc tính và phân loại thuộc tính 3
3 Xác định các liên kết 3
4 Chuẩn hóa cơ sở dữ liệu 4
5 CÁC BẢNG: 5
III TẠO CƠ SỞ DỮ LIỆU 7
1 DATABASE DIAGRAMS 17
IV TẠO VIEW 18
V TẠO PROCEDUCE 24
VI TẠO TRIGGER 30
VII PHÂN QUYỀN VÀ BẢO MẬT CSDL 39
VIII PHÂN TÁN CSDL 43
Trang 3PHÂN CÔNG VÀ KẾ HOẠCH THỰC HIỆN
HỌ VÀ TÊN NỘI DUNG ĐÁNH GIÁ GHI CHÚ
Trang 4I PHÁT BIỂU BÀI TOÁN
Quản lý nhân viên :
Một công ty thực hiện quản lý nhân viên của công ty Trong công ty có các dự án được thực hiện quản lí bởi các bộ phận công việc khác nhau
Mỗi dự án được quản lí bởi các thông tin: mã dự án, tên dự án, địa điểm dự
án, phòng ban thực hiện dự án đó Bộ phận công việc được quản lí bởi thông tin: mã
dự án, số thứ tự, tên công việc
Trong bộ phận thì sẽ có nhiều phòng ban, mỗi phòng ban được quản lý bởi các thông tin: mã phòng ban, tên phòng ban Mỗi phòng ban được phân biệt bởi mãphòng ban
Mỗi phòng ban sẽ có một trưởng phòng Một phòng ban chỉ có một trưởng phòng để quản lí nhân viên trong phòng đó
Mỗi phòng ban có các nhân viên và nhân viên được quản lí bởi các thông tin:tên nhân viên, mã nhân viên, ngày sinh, giới tính, địa chỉ, lương Mỗi phòng ban có thể có nhiều nhân viên, trưởng phòng quản lí nhân viên của mình bằng việc lưu giữ lại ngày vào làm
Có bảng phân công quản lý các thông tin: Mã nhân viên, mã dự án, số thứ tự,thời gian thực hiện dự án
Mỗi nhân viên sẽ có người thân và người thân được quản lý bởi các thông tin: Mã nhân viên, tên người thân, giới tính, ngày sinh và quan hệ
Trang 5II MÔ HÌNH CSDL QUAN HỆ
DỰ ÁN : mã dự án, tên dự án, địa điểm dự án, phòng
CÔNG VIỆC : mã dự án, STT, tên công việc
PHÂN CÔNG: mã nhân viên, mã dự án, STT, thời gian
NGƯỜI THÂN : mã nhân viên, tên người thân, giới tính, ngày sinh, quan hệ
2 Xác định các thuộc tính và phân loại thuộc tính
Nhân viên: thuộc tính khóa là mã nhân viên
Phòng ban: thuộc tính khóa là mã phòng
Dự án : thuộc tính khóa là mã dự án
Công việc : thuộc tính khóa là mã dự án, số thứ tự
Phân công: thuộc tính khóa là mã nhân viên, mduan, stt
Người thân : thuộc tính khóa là mã nhân viên, tên người thân
Trang 6+ Một dự án có nhiều phòng ban
+ Mỗi một phòng ban có một dự án
- Giữa thực thể NHANVIEN và thực thể NGUOITHAN có kiểu liên kết N–N, vì+ Một nhân viên có nhiều người thân
+ Một người thân thuộc nhiều nhân viên
4 Chuẩn hóa cơ sở dữ liệu
Từ mô hình quan hệ ta suy ra các phụ thuộc hàm:
MaNV TenNV, NgaySinh, GioiTinh, ĐiaChi, Luong, TgPhg, phg, NgVL.MaDa TenDa, DiaDiemDA, Phong.
Maphg TenPhg, TrgPhg, Ngaynhanchuc.
MaNV, MaDa, STT Thoigian
MaNV, TenNT Gioitinh, Ngaysinh, Quanhe.
MaDa, STT TenCV
Từ các phụ thuộc hàm trên ta thấy:
- 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 đã ở dạng 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 đã ở dạng chuẩn 2NF.
- Mọi thuộc tính không khóa của quan hệ đều 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 đã ở dạng chuẩn 3NF
Vậy lược đồ quan hệ đã được chuẩn hóa về dạng cao nhất – 3NF
5 CÁC BẢNG:
tblNhanvien:
Trang 7TT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
3 DiaDiemDA Nvarchar(20) Địa điểm dự án
TT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
1 MaNV Nvarchar(20) PK, FK Mã nhân viên
2 MaDa Nvarchar(20) PK,FK Mã dự án
Trang 8TT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
1 MaNV Nvarchar(20) PK, FK Mã nhân viên
2 TenNT Nvarchar(50) PK Tên người thân
III TẠO CƠ SỞ DỮ LIỆU
create table tblDuan(
MaDa nvarchar(20) not null primary key,
TenDa nvarchar(50) null,
DiaDiemDA nvarchar(20) null,
Phong int null
Trang 9create table tblCongviec(
MaDa nvarchar(20) NOT NULL,
STT int NOT NULL,
TenCV nvarchar(50) NULL,
)
alter table tblCongviec
add constraint pk_Congviec primary key(MaDa,STT) ;create table tblNhanvien(
MaNV nvarchar(20) NOT NULL primary key,TenNv nvarchar(50) NULL,
Ngaysinh date null,
Diachi nvarchar(50) NULL,
Gioitinh bit null,
Luong float NULL,
TrgPhg nvarchar(20) NULL,
phg int NULL
)
alter table tblNhanvien add NgVL datetime null;
create table tblPhancong(
MaNV nvarchar(20) NOT NULL,
MaDa nvarchar(20) NOT NULL,
STT int NOT NULL,
Thoigian float NULL
)
Trang 10alter table tblPhancong
add constraint pk_Phancong primary key(MaNV,MaDa,STT) ;
create table tblPhongban(
Maphg int primary key,
TenPhg nvarchar(20) NULL,
TrgPhg nvarchar(20) NULL,
Ngaynhanchuc date NULL
)
alter table tblPhongban add SoNV int null;
create table tblNguoithan(
MaNV nvarchar(20) not null,
TenNT nvarchar(50) not null,
Gioitinh bit null,
Ngaysinh date null,
Quanhe nvarchar(15) null
)
alter table tblNguoithan
add constraint pk_Nguoithan primary key(MaNV, TenNT)
ALTER TABLE tblCongviec WITH CHECK ADD CONSTRAINT [FK_congviec_duan] FOREIGN KEY(MaDa)
REFERENCES tblDuan (MaDa)
GO
ALTER TABLE tblCongviec CHECK CONSTRAINT [FK_congviec_duan]GO
Trang 11ALTER TABLE tblDuan WITH CHECK ADD CONSTRAINT
[FK_Duan_Phongban] FOREIGN KEY(Phong)
REFERENCES tblPhongban (Maphg)
Trang 13insert into tblCongviec (MaDa, STT, TenCV) values (N'1', 1, N'Thiết
Trang 14insert tblDuan (MaDa, TenDa, DiaDiemDA, Phong) values(N'5', N'Thi công 2', N'Bình Dương',5)
insert tblDuan (MaDa, TenDa, DiaDiemDA, Phong) values(N'6', N'Thi công 3', N'Đà Nẵng',4)
insert tblDuan (MaDa, TenDa, DiaDiemDA, Phong) values(N'7', N'Thi công 4', N'Hà Nội',5)
insert into tblPhongban (Maphg, TenPhg, TrgPhg, Ngaynhanchuc) values(1, N'Thiết kế', N'001', CAST(N'2016-06-19' AS Date))insert into tblPhongban (Maphg, TenPhg, TrgPhg, Ngaynhanchuc) values(2, N'Quản lý', N'002', CAST(N'2013-02-11' AS Date))insert into tblPhongban (Maphg, TenPhg, TrgPhg, Ngaynhanchuc) values(3, N'Marketing', N'003', CAST(N'2017-06-29' AS Date)) insert into tblPhongban (Maphg, TenPhg, TrgPhg, Ngaynhanchuc) values(4, N'Kế Toán', N'004', CAST(N'2015-06-26' AS Date))insert into tblPhongban (Maphg, TenPhg, TrgPhg, Ngaynhanchuc) values(5, N'Ngoại giao', N'005', CAST(N'2012-06-29' AS Date)) insert into tblPhongban (Maphg, TenPhg, TrgPhg, Ngaynhanchuc) values(6, N'An ninh', N'006', CAST(N'2011-03-09' AS Date)) insert into tblPhongban (Maphg, TenPhg, TrgPhg, Ngaynhanchuc) values(7, N'In ấn', N'007', CAST(N'2010-01-09' AS Date))
Trang 15insert into tblPhongban (Maphg, TenPhg, TrgPhg, Ngaynhanchuc) values(8, N'Lập trình', N'008', CAST(N'2009-08-08' AS Date))
insert into tblNhanvien (MaNV, TenNV, Ngaysinh, Diachi,Gioitinh, Luong, TrgPhg, phg) values (N'001', N'Nguyễn Đình
Văn',CAST(N'1999-12-15' AS Date),N'Thái Bình',1 ,11000000, N'001',1 )
insert into tblNhanvien (MaNV, TenNV, Ngaysinh, Diachi,Gioitinh, Luong, TrgPhg, phg) values (N'002', N'Đinh Quốc
Đạt',CAST(N'1995-07-11' AS Date),N'Ninh Bình',1, 9500000, N'001',2 )
insert into tblNhanvien (MaNV, TenNV, Ngaysinh, Diachi,Gioitinh, Luong, TrgPhg, phg) values (N'003', N'Trần Văn Tiến',CAST(N'1999-03-05' AS Date),N'Hà Nam',1, 10000000, N'002',3 )
insert into tblNhanvien (MaNV, TenNV, Ngaysinh, Diachi,Gioitinh, Luong, TrgPhg, phg) values (N'004', N'Vũ Quốc
Hưng',CAST(N'1988-06-05' AS Date),N'Hưng Yên',1, 9000000, N'003',4 )
Trang 16insert into tblNhanvien (MaNV, TenNV, Ngaysinh, Diachi,Gioitinh, Luong, TrgPhg, phg) values (N'005', N'Nguyễn Thị
Tuyết',CAST(N'1978-06-26' AS Date),N'Thái Bình',0, 12000000, N'002',5 )
insert into tblNhanvien (MaNV, TenNV, Ngaysinh, Diachi,Gioitinh, Luong, TrgPhg, phg) values (N'006', N'Nguyễn Thị
Hằng',CAST(N'1988-01-09' AS Date),N'Huế',0, 9500000, N'001',3 )insert into tblNhanvien (MaNV, TenNV, Ngaysinh, Diachi,Gioitinh, Luong, TrgPhg, phg) values (N'007', N'Nguyễn Văn A',CAST(N'2000-11-09' AS Date),N'Nghệ An',1, 5000000, N'002',3 )
insert into tblNhanvien (MaNV, TenNV, Ngaysinh, Diachi,Gioitinh, Luong, TrgPhg, phg) values (N'008', N'Nguyễn Thị B',CAST(N'2000-10-10' AS Date),N'Hải Phòng',0, 7000000, N'001',1 )
insert into tblPhancong (MaNV, MaDa, STT, Thoigian) values (N'001', N'1', 1, 15)
insert into tblPhancong (MaNV, MaDa, STT, Thoigian) values (N'002', N'2', 2, 5)
insert into tblPhancong (MaNV, MaDa, STT, Thoigian) values (N'003', N'3', 3, 25)
Trang 17insert into tblPhancong (MaNV, MaDa, STT, Thoigian) values (N'004', N'3', 3, 25)
insert into tblPhancong (MaNV, MaDa, STT, Thoigian) values (N'005', N'4', 4, 30)
insert into tblPhancong (MaNV, MaDa, STT, Thoigian) values (N'006', N'4', 4, 30)
insert into tblPhancong (MaNV, MaDa, STT, Thoigian) values (N'007', N'5', 5, 10)
insert into tblPhancong (MaNV, MaDa, STT, Thoigian) values (N'008', N'7', 7, 20)
insert into tblNguoithan (MaNV, TenNT,Gioitinh,Ngaysinh, Quanhe) VALUES (N'001', N'Nguyễn Đình Thiệu', 1, CAST(N'1978-5-16' AS Date), N'Bố')
insert into tblNguoithan (MaNV, TenNT,Gioitinh,Ngaysinh, Quanhe) VALUES (N'002', N'Nguyễn Thị Phít', 0, CAST(N'1995-10-5' AS Date), N'Vợ chồng')
insert into tblNguoithan (MaNV, TenNT,Gioitinh,Ngaysinh, Quanhe) VALUES (N'003', N'Trần Thị Hạnh', 0, CAST(N'1970-10-11' AS Date),N'Mẹ')
Trang 18insert into tblNguoithan (MaNV, TenNT,Gioitinh,Ngaysinh, Quanhe) VALUES (N'004', N'Vũ Quốc Thịnh', 1, CAST(N'1990-12-3' AS Date), N'Em trai')
insert into tblNguoithan (MaNV, TenNT,Gioitinh,Ngaysinh, Quanhe) VALUES (N'005', N'Nguyễn Đình Minh', 1, CAST(N'1971-4-24' AS Date), N'Vợ chồng')
insert into tblNguoithan (MaNV, TenNT,Gioitinh,Ngaysinh, Quanhe) VALUES (N'006', N'Trần Quốc Tuấn', 1, CAST(N'1987-4-26' AS Date),N'Vợ chồng')
insert into tblNguoithan (MaNV, TenNT,Gioitinh,Ngaysinh, Quanhe) VALUES (N'007', N'Nguyễn Văn C', 1, CAST(N'1970-10-20' AS Date), N'Bố')
insert into tblNguoithan (MaNV, TenNT,Gioitinh,Ngaysinh, Quanhe) VALUES (N'008', N'Hoàng Thị D', 0, CAST(N'1979-3-8' AS Date), N'Mẹ')
Trang 191 DATABASE DIAGRAMS
Trang 20IV TẠO VIEW
1 Tìm các nhân viên làm việc ở phòng số 3create view vw_1timnhanvienophong3 asselect TenNv as 'tên nhân viên' from tblNhanvienwhere phg=3
select * from vw_1timnhanvienophong3
2 Tìm các nhân viên mức lương trên 10000000create view vw_2timnhanvientren10tr asselect TenNv as 'tên nhân viên' from tblNhanvienwhere Luong>10000000
Trang 21select * from vw_2timnhanvientren10tr
3 Tìm các nhân viên có (mức lương trên 9000000 ở phòng3)hoặc các nhân viên có (mức lương trên 7000000 ở phòng 1)create view vw_3timnhanvienp3va1 as
select TenNV as 'tên nhân viên' , phg as 'Phòng' from tblNhanvienwhere (Luong > 9000000 AND phg=3) OR (Luong > 7000000 ANDphg=1)
select * from vw_3timnhanvienp3va1
4 Cho biết họ tên của các nhân viên ở Thái Bình
create view vw_4nhanvienThaibinh as
select TenNv as 'tên nhân viên' , Diachi as 'Địa chỉ' fromtblNhanvien
where Diachi = N'Thái Bình'
select * from vw_4nhanvienThaibinh
5 Cho biết các nhân viên có năm sinh trong khoảng 1978 đến1995
create view vw_5nhanvien78to95 as
select TenNv as 'tên nhân viên' , Ngaysinh as 'Ngày sinh' fromtblNhanvien
where YEAR(Ngaysinh) between 1978 and 1995
select * from vw_5nhanvien78to95
Trang 226 Cho biết các nhân viên và tuổi của nhân viên
create view vw_6tuoinvien as
select MaNV as'Mã NV', TenNv as 'Tên nhân viên' ,year(GETDATE())- year(Ngaysinh) as 'Tuổi' from tblNhanvienselect * from vw_6tuoinvien
7 Tìm tên và địa chỉ của tất cả các nhân viên của phòng "Thiếtkế"
create view vw_7phongthietke as
select TenNv as 'Tên nv', Diachi
from tblPhongban, tblNhanvien
where tblNhanvien.phg = tblPhongban.Maphg andtblPhongban.TenPhg = N'Thiết kế'
select * from vw_7phongthietke
8 Với mỗi dự án ở Hà Nội, cho biết tên dự án, tên phòng ban, họtên và
Trang 23ngày nhận chức của trưởng phòng của phòng ban chủ trì dự
án đó
create view vw_8duanhanoi as
select TenDa as 'Tên Dự án', TenPhg as 'Tên Phòng', TenNv as 'Tênnv', Ngaynhanchuc as 'Ngày nhận chức'
from tblDuan,tblPhongban,tblNhanvien
where tblDuan.Phong = tblPhongban.Maphg andtblPhongban.TrgPhg = tblNhanvien.MaNV and tblDuan.DiaDiemDA
= N'Hà Nội'
select * from vw_8duanhanoi
9 Thống kê số lượng nhân viên theo giới
tính create view vw_9solgtheogioitinh as
select Gioitinh as 'giói tính', count (MaNV) as 'số lượng nhân viên'from tblNhanvien
group by tblNhanvien.Gioitinh
select * from vw_9solgtheogioitinh
10 Tìm tên những người trưởng phòng của từng phòng bancreate view vw_10truongphong as
select TenPhg as 'Tên Phòng', TenNv as 'Tên Nhân Viên' fromtblPhongban, tblNhanvien
where tblPhongban.TrgPhg = MaNV
select * from vw_10truongphong
Trang 2411 Cho biết tên các dự án mà nhân viên Nguyễn Đình Văn đãtham gia.
create view vw_11nđvthamgia as
select TenDa as 'Tên Dự Án' from tblNhanvien, tblPhancong,tblDuan
where TenNv= N'Nguyễn Đình Văn' and tblNhanvien.MaNV=tblPhancong.MaNV and tblPhancong.MaDa= tblDuan.MaDa select * from vw_11nđvthamgia
12 Cho biết họ tên nhân viên có mức lương trên
mức lương trung bình của phòng "Marketing"
create view vw_12mlgtb as
select TenNv as 'Tên nv' , Luong as 'Lương' from tblNhanvienwhere tblNhanvien.Luong > (select avg(Luong) from tblPhongban,tblNhanvien
where tblPhongban.Maphg =tblNhanvien.phg and TenPhg = N'Marketing'
group by tblPhongban.Maphg)select * from vw_12mlgtb
Trang 2513 Cho biết danh sách các mã dự án mà nhân viên có mã là 003chưa làm.
create view vw_13duanchualam as
select MaDa as 'Mã dự án', TenDa as 'Tên dự án'
from tblDuan
where MaDa not in (select MaDa from tblPhancong
where MaNV = N'003')
select * from vw_13duanchualam
14 Tìm tên những nữ nhân viên và tên người thân của họcreate view vw_14nvnuvafnguoithan as
select TenNv as 'Tên NV', TenNT as'Tên Người thân ', Quanhe as'Quan hệ' from tblNhanvien,tblNguoithan
where tblNhanvien.MaNV = tblNguoithan.MaNV andtblNhanvien.Gioitinh = 0
select * from vw_14nvnuvafnguoithan
15 Cho biết số lượng dự án của công ty
create view vw_15solgduan as
Trang 26select count(MaDa) as 'Số dự án' from tblDuanselect * from vw_15solgduan
Trang 27select * from tblNhanvien
where TenNv = @tennv
exec proc_1timnhanvien N'Nguyễn Đình Văn'
2 Tổng tiền lg của 1 nhân viên bất kỳ
create proc proc_2tongtienlg
@manv nvarchar(20)
as
select MaNV, Luong as'Lương' from tblNhanvien
where MaNV=@manv
exec proc_2tongtienlg @manv=N'001'
3 Tạo proc cho biết các nhân viên và tuổi của nhân viêncreate proc proc_3tuoinv
@manv nvarchar(20)
as
Trang 28select MaNV as'Mã NV', TenNv as 'Tên nhân viên' ,year(GETDATE())- year(Ngaysinh) as 'Tuổi' from tblNhanvienwhere MaNV=@manv
exec proc_3tuoinv @manv=N'001'
4 Tạo proc cho biết danh sách các mã dự án mà nhân viên có
where MaDa not in (select MaDa from tblPhancong
where MaNV = @manv)
exec proc_4duanchualam @manv=N'001'
5 Cho biết tên các dự án mà nhân viên đã tham gia
create proc proc_5duanthamgia
@tennv nvarchar(50)
as
Trang 29select TenDa as 'Tên Dự Án' from tblNhanvien, tblPhancong,tblDuan
where TenNv= @tennv and tblNhanvien.MaNV=tblPhancong.MaNV and tblPhancong.MaDa= tblDuan.MaDa exec proc_5duanthamgia @tennv=N'Đinh Quốc Đạt'
6 Tạo proc cho biết địa chỉ của nv
create proc proc_6diachi
@diachi nvarchar(50)
as
select TenNv as 'tên nhân viên' , Diachi as 'Địa chỉ' fromtblNhanvien
where Diachi = @diachi
exec proc_6diachi @diachi=N'Thái Bình'
7 Với mỗi dự án, cho biết có bao nhiêu nhân viên tham gia dự
án đó
create proc proc_7duancobnnv
@tenda nvarchar(50)
as
select TenDa, count(MaNV) as 'số lg nv tham gia'
from tblDuan, tblPhancong, tblCongviec