Tải bản đầy đủ (.pdf) (31 trang)

Báo Cáo Bài Tập Lớn Hệ Quản Trị Csdl Đề Tài Quản Lý Xe Bus.pdf

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 (590.57 KB, 31 trang )

lOMoARcPSD|38544120

TRƯỜ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

HỆ QUẢN TRỊ CSDL

ĐỀ TÀI
QUẢN LÝ XE BUS

Giáo viên hướng dẫn: Th.S Nguyễn Thị Tâm
Sinh viên thực hiện: Nguyễn Quang Huy-2010A05

Nguyễn Duy Hân-2010A01

Hà Nội, 2021

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

Mục Lục
I. Phát biểu bài tốn........................................................... 4
1. Xây dựng mơ hình thực thể liên kết................................. 5
2. Xây dựng mơ hình cơ sở dữ liệu quan hệ ........................ 5
3. Chuẩn hóa cơ sở dữ liệu của bài toán .............................. 7
II. Tạo bảng CSDL ............................................................. 8


1. Tạo bảng........................................................................... 8
2. Nhập dữ liệu................................................................... 14
III. Thực Hiện Các Yêu Cầu ........................................... 20
1. Truy vấn dữ liệu............................................................. 20
2. Tạo View hiện dữ liệu.................................................... 24
3. Tạo các PROCDUCE..................................................... 29
4. Tạo Trigger kiểm soát ràng buộc dữ liệu....................... 45
5. Phân quyền cho các thành viên ...................................... 60
6. Phân tán ngang theo bảng Nhân Viên ............................ 63

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

I.Phát biểu bài toán
Để quản lý xe bus một cách hiểu quả, ta cần một hệ thống quản lý. Hệ thống bao gồm:

 Đầu tiên là quản lý xe cần có biển số, loại xe ,số ghế và năm bắt đầu sử dụng
 Trên mỗi xe đều có 2 nhân viên, một lái xe và một phụ xe. Thông tin nhân viên

bao gồm: Mã nhân viên, tên nhân viên, giới tính, ngày sinh, địa chỉ, ngày vào làm,
lương cơ bản, phụ cấp, chức vụ. Mỗi nhân viên có 1 mã và tuổi phải >18
 Mỗi nhân viên và xe đều ở 1 xí nghiệp, thơng tin xí nghiệp gồm : mã xí nghiệp,
tên xí nghiệp và SĐT
 Mỗi xe có một tuyến, mỗi tuyến được xác định bởi mã tuyến, tên tuyến và lộ trình
 Thông tin chi tiết trạm dừng gồm: mã trạm dừng và mã tuyến
 Trên mỗi xe đều có thơng tin của tuyến và nhân viên, bao gồm Mã tuyến, biển số,
mã nhân viên, ngày chạy, số giờ.
Từ phát biểu bài tốn ta có mơ hình thực thể liên kết


Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

Xây dựng mơ hình quan hệ
Bước 1. Xử lý thực thể thông thường.

 Xe: biển số, loại xe, số ghế, năm bắt đầu sử dụng
 Tuyến: Mã tuyến, tên tuyến
 Trạm dừng: Mã trạm dừng, tên trạm dừng
 Nhân viên: Mã nhân viên, tên nhân viên, giới tính, ngày sinh, địa chỉ, ngày vào

làm, lương cơ bản, phụ cấp, chức vụ
 Nhà xe: Mã nhà xe, tên nhà xe, số điện thoại
Bước 2. Xử lý thực thể yếu: không tồn tại thực thể yếu.

Bước 3. Xử lý mối liên hệ 1:1: Khơng có
Bước 4. Xử lý liên kết 1:N

 Xe-nhà xe: Biển số, loại xe, số ghế, năm bắt đầu sử dụng, mã nhà xe
 Nhân viên-nhà xe: Mã nhân viên, tên nhân viên, giới tính, ngày sinh, địa chỉ, ngày

vào làm, lương cơ bản, phụ cấp, chức vụ, mã nhà xe
 Tuyến: Mã tuyến, tên tuyến, lộ trình

 Xe_Lái xe (Mã tuyến, biển số, Mã nhân viên, Ngày chạy, số giờ)

Bước 5. Xử lý liên kết M:N.
 CT_Tramdung (Mã trạm dừng, Mã tuyến)


=>Vậy cơ sở dữ liệu của bài toán:

 Xe: Biển số, loại xe,số ghế, năm bắt đầu sử dụng
 Tuyến: Mã tuyến, tên tuyến, lộ trình
 Trạm dừng: Mã trạm dừng, tên trạm dừng
 Nhà xe: Mã nhà xe, tên nhà xe, SĐT
 Nhân viên: Mã nhân viên, tên nhân viên, giới tính, ngày sinh, địa chỉ, ngày vào

làm, lương cơ bản, phụ cấp, chức vụ
 Chi Tiết Lái xe (Mã tuyến, Biển số, Mã nhân viên, Ngày chạy, Số giờ)
 Chi Tiết Trạm dừng (Mã trạm dừng,Mã tuyến)

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

Chuẩn hóa CSDL bài tốn:

Biển số => tên xe, loại xe, số ghế, năm bắt đầu sử dụng

Mã trạm dừng => tên trạm dừng

Mã tuyến => tên tuyến

Mã nhân viên => tên nhân viên, giới tính, ngày sinh, địa chỉ, ngày vào làm, lương cơ
bản, phụ cấp, chức vụ

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 tố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àokhó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

II.Xây dựng CSDL bài toán

1. Tạo bảng

tblXe: Lưu trữ thông tin xe

TT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
Nchar(10) PK
1 Bienso Nvarchar(50)
int
2 Loaixe datetime
Nchar(10)
3 Soghe

4 Ngaysanxuat

5 MaNX


tblTramdung: Lưu trữ thông tin trạm dừng

TT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
PK
1 Matramdung Nchar(10)

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

2 Tentramdung Nvarchar(50)

tblTuyen: Lưu trữ thông tin Tuyến bus

TT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
PK Ghi chú
1 Matuyen int Ghi chú
Ghi chú
2 Tentuyen Nvarchar(50)

3 Lotrinh Nvarchar(50)

Nhaxe: Lưu trữ thông tin Nhà xe

TT Tên thuộc tính Kiểu dữ liệu Ràng buộc
Nchar(10) PK
1 MaNX Nvarchar(50)
Nchar(10)
2 TenNX


3 SĐT

tblChiTietTramdung: Lưu trữ thông tin chi tiết tuyến bus

TT Tên thuộc tính Kiểu dữ liệu Ràng buộc

1 Matramdung Nchar(10) PK,FK

2 Matuyen Nchar(10) PK,FK

tblNhanVien: Lưu trữ thơng tin nhân viên

TT Tên thuộc tính Kiểu dữ liệu Ràng buộc
PK
1 MaNV Nchar(10) Tuoi>18

2 TenNV Nvarchar(50)

3 Gioitinh Nvarchar(3)

4 NgaySinh Datetime

5 DiaChi Nvarchar(50)

6 NgayVaoLam datetime

7 Luongcoban float

8 Phucap float


9 Chucvu Nvarchar(50)

10 MãNX Nchar(10)

tblChiTietLaixe: Lưu trữ thông tin chi tiết về xe đó

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

TT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú

1 MaTuyen Nchar(10) PK,FK

2 MaNV Nchar(10) PK,FK

3 MaXe Nchar(10) PK,FK

4 Ngaychay datetime

5 Sogio Int

2. Nhập dữ liệu
Select *from tblTuyen

Select * from tblTramdung

Select * from tblChiTietTramdung

Downloaded by Uy vu Nguyen ()


lOMoARcPSD|38544120

Select * from tblXe
Select * from tblNhanvien
Select * from tblChiTietLaixe

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

Select * from NhaXe

III. Thực hiện các yêu cầu
1. Truy vấn dữ liệu

--Truy vấn 1 bảng
--1. Lấy ra thông tin tên,ngày sinh, địa chỉ của các nhân viên nam
select TenNV,Ngaysinh,Diachi from tblNhanvien
where Gioitinh='Nam'
--2. Lấy ra thơng tin xe có số ghế là 26
select Bienso, Loaixe,Ngaysanxuat from tblXe
where Soghe=26
--3. Lấy ra những nhân viên có địa chỉ ở Hà Nội
select *from tblNhanvien
where Diachi=N'Hà Nội'
--4. Lấy ra thơng tin tuyến xe có mã là 3

Downloaded by Uy vu Nguyen ()


lOMoARcPSD|38544120

select *from tblTuyen
where Matuyen=3

--5. Đưa ra tên nhân viên có tuổi cao nhất
select top 1 TenNV,Max(year(getdate())-year(Ngaysinh)) as Tuoimax from
tblNhanvien
group by TenNV
order by Tuoimax desc

--Truy vấn nhiều bảng
--1. Lấy ra tên những nhân viên đi trên tuyến 3
select TenNV,Matuyen from tblNhanvien,tblChiTietLaixe
where tblNhanvien.MaNV=tblChiTietLaixe.MaNV
and Matuyen=3

--2. Lấy ra tên những nhân viên có số giờ trên xe lớn hơn 12
select TenNV,sogio from tblNhanvien,tblChiTietLaixe
where tblNhanvien.MaNV=tblChiTietLaixe.MaNV
and sogio>12

--3. Lấy ra tên các trạm dừng của tuyến 17
select tblTuyen.Matuyen,Tentramdung from tblTuyen join
tblChiTietTramdung
on tblTuyen.Matuyen=tblChiTietTramdung.Matuyen join tblTramdung
on tblChiTietTramdung.Matramdung=tblTramdung.Matramdung
and tblTuyen.Matuyen=17

--4. Lấy ra mã,tên của nhân viên và biển số xe tương ứng khi làm việc trong ngày

06-11-2021
select tblNhanvien.MaNV,TenNV,tblXe.Bienso from tblNhanvien join
tblChiTietLaixe
on tblNhanvien.MaNV=tblChiTietLaixe.MaNV join tblXe
on tblChiTietLaixe.Bienso=tblXe.Bienso

and Ngaychay='06/11/2021'

2. Tạo View hiển thị dữ liệu
/*--10 câu View--*/

--1. Tạo view đếm số xe đi của mỗi nhân viên
create view vw_dixe as
select tblNhanVien.MaNV, count(MaTuyen) as[Số lần đi] from tblNhanvien,
tblChiTietLaixe
where tblNhanVien.MaNV = tblChiTietLaixe.MaNV

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

group by tblNhanVien.MaNV

select *from vw_dixe

--2. Tạo view tìm xem những xe nào có lộ trình đi giáp bát
create view vw_gb as
select * from tblTuyen where Lotrinh like N'%Giáp Bát%'
select *from vw_gb


--3. Tạo view xem những tuyến nào đi qua trạm Ô quan Chưởng
create view vw_oqc as
select tblTuyen.Matuyen,tblTuyen.Tentuyen from tblChiTietTramdung, tblTuyen,
tblTramdung
where tblChiTietTramdung.Matuyen = tblTuyen.Matuyen
and tblChiTietTramdung.Matramdung = tblTramdung.Matramdung
and Tentramdung = N'Ô Quan Chưởng'
select *from vw_oqc

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

--4. Tạo view xem thông tin nhân viên nam
create view vw_man as
select * from tblNhanvien where Gioitinh = 'Nam'
select *from vw_man

--5. Tạo view đếm số xe đi qua bệnh viện việt đức
create view vw_demxe as
select Tentramdung, count(tblChiTietTramdung.Matuyen) as[Số xe đi qua] from
tblChiTietTramdung, tblTuyen, tblTramdung
where tblChiTietTramdung.Matuyen = tblTuyen.Matuyen
and tblChiTietTramdung.Matramdung = tblTramdung.Matramdung
and Tentramdung = N'Bệnh Viện Việt Đức'
group by Tentramdung
select *from vw_demxe

--6. Tạo view xem nhân viên có lương cơ bản cao nhất
create view vw_max as

select top 1 * from tblNhanvien
order by Luongcoban desc
select *from vw_max

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

--7. Tạo view xem thông tin xe
create view vw_xe as
select * from tblXe
select *from vw_xe

--8. Tạo view xem tuổi nhân viên
create view vw_age as
select TenNV,datediff(day,Ngaysinh,getdate())/365 as [Tuổi] from tblNhanvien
select *from vw_age

--9. Tạo view xem số giờ chạy xong tuyến của nhân viên
create view vw_sogio as
select tblNhanvien.MaNV,Matuyen, sogio from tblChiTietLaixe, tblNhanvien
where tblChiTietLaixe.MaNV = tblNhanvien.MaNV
select *from vw_sogio

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

--10.Tạo view đếm số nhân viên nữ
create view vw_cntwomen as

select count(MaNV) as [Số lượng] from tblNhanvien
where Gioitinh = N'Nữ'
select *from vw_cntwomen

--Tạo view xem nhân viên đi trên xe với biển số nhập vào
select tblXe.BienSo, tblNhanVien.MaNV, TenNV from tblXe, tblChiTietLaixe,
tblNhanvien
where tblXe.Bienso = tblChiTietLaixe.Bienso
and tblChiTietLaixe.MaNV = tblNhanvien.MaNV
and tblXe.Bienso = '02-T9-1945'

3. Tạo các PROCDUCE
/*--20 câu procduce--*/

/*--1.Tạo thủ tục lưu truyền vào trạm dừng, xem tuyen nào đi qua trạm dừng đó
create proc td_tuyen
@ten nvarchar(50)
as
begin

select tblTuyen.Matuyen,tblTuyen.Tentuyen from tblChiTietTramdung,
tblTuyen, tblTramdung
where tblChiTietTramdung.Matuyen = tblTuyen.Matuyen
and tblChiTietTramdung.Matramdung = tblTramdung.Matramdung
and Tentramdung = @ten
end
exec td_tuyen N'Ô Quan Chưởng'
/*--2.Truyền vào thời gian, tăng lương cơ bản thêm 2000 cho nhân viên lái nhiều
hơn thời gian truyền vào
create proc up_nv

@tg int

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

as
begin

update tblNhanvien
set Luongcoban = Luongcoban + 2000
where MaNV = (select MaNV from tblChiTietLaixe where sogio>@tg)
end
exec up_nv 12

/*--3.Tạo thủ tục xem số xe đã đi của mỗi nhân viên
create proc xe_di
@manv nchar(10)
as
begin

select tblNhanVien.MaNV, count(MaTuyen) as[Số lần đi] from
tblNhanvien, tblChiTietLaixe

where tblNhanVien.MaNV = tblChiTietLaixe.MaNV
and tblNhanvien.MaNV = @manv
group by tblNhanVien.MaNV
end
exec xe_di 'NV01'


/*--4.Tạo thủ tục truyền vào năm, xem những xe nào sản xuất trong năm đó
create proc xe_sx
@yr int
as
begin

select * from tblXe
where year(Ngaysanxuat) = @yr
end
exec xe_sx 1905

/*--5.Tạo thủ tục truyền vào LCB, xem những nhân viên nào có LCB lớn hơn
create proc lcb_nv
@lcb int
as
begin

select MaNV, TenNV, Luongcoban from tblNhanvien
where Luongcoban>@lcb
end
exec lcb_nv 2000000

/*--6.Tạo thủ tục lấy ra nhân viên theo độ tuổi, tuổi là tham số truyền vào
create proc tuoi_nv

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

@tuoi int

as
begin

select MaNV, TenNV from tblNhanvien
where datediff(day,Ngaysinh,getdate())/365 >= @tuoi
end
exec tuoi_nv 30

/*--7.Tạo thủ tục tăng lương cho nhân viên có mã số truyền vào
create proc up_mnv
@mnv nchar(10)
as
begin

update tblNhanvien
set Luongcoban = Luongcoban *2
where MaNV = @mnv
end
exec up_mnv 'NV01'

/*--8.Tạo thủ tục thêm 1 bản ghi mới cho bảng Tram Dung
create proc ins_td
@mtd nchar(10),@ten nvarchar(30)
as
begin

if not exists(select * from tblTramdung where Matramdung = @mtd)
begin

insert into tblTramdung

values(@mtd,@ten)
end
else
begin
print N'Trạm dừng đã có'
return
end
end
exec ins_td 'TD06','Bệnh viện Bạch Mai'

/*--9.Tạo thủ tục thêm nhân viên với điều kiện ngày vào làm nhỏ hơn ngày hiện
tại
create proc ins_nv
@mnv nchar(10),@ten nvarchar(30),@gt nchar(3),@Ngaysinh date, @dc
nvarchar(30),@nvl date, @lcb int, @pc int, @cv nvarchar(20)
as

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

begin if (@nvlend begin
INSERT INTO tblNhanvien
VALUES (@mnv,@ten,@gt,@Ngaysinh,@dc,@nvl,@lcb,@pc,@cv)
end
else
begin

print N'Ngày vào làm phải nhỏ hơn ngày hiện tại'

return
end

EXECUTE ins_nv 'NV07', N'Bùi Ngọc Hà',N'Nữ','19961004','Hà
nội','20171028',7500000,300,'Phụ xe'

/*--10.Tạo thủ tục thêm tuyến với tham số truyền vào
create proc ins_tuyen
@mt nchar(10),@ten nvarchar(30), @lt text
as
begin

if not exists(select * from tblTuyen where Matuyen = @mt)
begin

insert into tblTuyen
values(@mt,@ten,@lt)
end
else
begin
print N'Tuyến đã có'
return
end
end

/*--11.Tạo thủ tục thêm xe với tham số truyền vào
create proc ins_xe
@bs nchar(10),@loai nvarchar(30), @soghe int, @nsx date
as
begin


if not exists(select * from tblXe where Bienso = @bs)
begin

insert into tblXe
values(@bs,@loai,@soghe,@nsx)
end

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

else
begin

print N'Xe đã có'
return
end
end
exec ins_xe '11-11-2020',N'Xe thường',26,'11-11-2020'

/*--12.Tạo thủ tục xem nhân viên với địa chỉ truyền vào
create proc sel_dc
@dc nvarchar(30)
as
begin

select * from tblNhanvien
where Diachi>@dc
end

exec sel_dc N'Hà Nội'

/*--13.Lấy ra nhân viên nam hoặc nữ với độ tuổi tăng dần, truyền vào giới tính
create proc sel_gt
@gt nchar(3)
as
begin

select MaNV,TenNV,Diachi, datediff(day,Ngaysinh,getdate())/365 as [tuổi]
from tblNhanvien

where Gioitinh = @gt
order by [tuổi] desc
end
exec sel_gt 'Nam'

/*--14.Tạo thủ tục xem xe nào cũ nhất với tham số truyền vào là loại xe

create proc sel_gt
@loai nvarchar(50)
as
begin
select top 1 Bienso, datediff(day,Ngaysanxuat,getdate())/365 as [Thời gian sd]
from tblXe

where Loaixe = @loai
order by [Thời gian sd] desc
end
exec sel_xe @loai=N'Xe thường'


Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

/*--15.Tạo thủ tục đếm nhân viên theo giới tính
CREATE PROC sp_DemGioiTinh
@Nam int OUTPUT,
@Nu int OUTPUT
AS
BEGIN

SET @Nam = 0
SET @Nu = 0
SELECT @Nam = COUNT (*) FROM dbo.tblNhanvien WHERE Gioitinh
=N'Nam'
SELECT @Nu = COUNT (*) FROM dbo.tblNhanvien WHERE Gioitinh =
N'Nữ'
RETURN @Nam + @Nu
END

DECLARE @TongGTNam INT, @TongGTNu INT, @TongSo INT
EXEC @TongSo = sp_DemGioiTinh @Nam=@TongGTNam OUTPUT, @Nu =
@TongGTNu OUTPUT
SELECT @TongGTNam AS N'Nam', @TongGTNu AS N'Nữ', @TongSo AS
N'Tổng số'

/*--16. Tạo thủ tục xem nhân viên già nhất
create proc old_nv
as
begin


select top 1 MaNV,TenNV, datediff(day,Ngaysinh,getdate())/365 as [Tuổi]
from tblNhanvien
order by [Tuổi] desc
end

/*--17. Tạo thủ tục xem lứa tuổi nhân viên
create proc lua_tuoi
as
begin

SELECT TenNV, LuaTuoi = CASE
WHEN YEAR(GETDATE())-YEAR([Ngaysinh])>=40
AND YEAR(GETDATE())-YEAR([Ngaysinh])<60
THEN 'Trung niên'
WHEN YEAR(GETDATE())-YEAR([Ngaysinh])<40
THEN 'Thanh niên'
ELSE ''

Downloaded by Uy vu Nguyen ()

lOMoARcPSD|38544120

END
FROM tblNhanvien
End

/*--18.Tăng lương cho nhân viên có thâm niên hơn 5 năm với năm là tham số
truyền vào
CREATE PROC sp_tangluongcb

@nam INT
AS
BEGIN

UPDATE tblNhanvien
SET Luongcoban=1.5*Luongcoban
WHERE( @nam-YEAR(Ngayvaolam))>=5
END

EXEC sp_tangluongcb @nam=2019

/*--19.Đếm số nhân viên sinh trong tháng với tháng là số truyền vào
CREATE PROC birth_month
@m int
AS
BEGIN

Select count(MaNV) as SoNV
from tblNhanvien
where month(Ngaysinh) =@m
end
exec birth_month 3

/*--20.Tạo thủ tục thêm chi tiết trạm dừng
CREATE PROC ins_cttd
@mtd nchar(10), @mt int
AS
BEGIN

if not exists(select * from tblTuyen where Matuyen = @mt)

begin

print N'Không tồn tại mã tuyến'
return
end
else
if not exists(select * from tblTramdung where Matramdung = @mtd)
begin

print N'Khơng có trạm dừng này'
return

Downloaded by Uy vu Nguyen ()


×