1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

31 11 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Quản Lý Xe Bus
Tác giả Nguyễn Quang Huy-2010A05, Nguyễn Duy Hân-2010A01
Người hướng dẫn Th.S Nguyễn Thị Tâm
Trường học Trường Đại Học Mở Hà Nội
Chuyên ngành Công Nghệ Thông Tin
Thể loại Báo Cáo Bài Tập Lớn
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 31
Dung lượng 590,57 KB

Nội dung

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 địn

Trang 1

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

Trang 2

Mục Lục

I Phát biểu bài toá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

Trang 3

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 toán ta có mô hình thực thể liên kết

Trang 4

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)

Trang 5

Chuẩn hóa CSDL bài toá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 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à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ú

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ú

Trang 6

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ú

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 Ghi chú

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 Ghi chú

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 Ghi chú

Trang 7

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

Select *from tblTuyen

Select * from tblTramdung

Select * from tblChiTietTramdung

Trang 8

Select * from tblXe

Select * from tblNhanvien

Select * from tblChiTietLaixe

Trang 9

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

Trang 10

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

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

Trang 11

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

Trang 12

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

Trang 13

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

Trang 14

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

tblNhanvien

and tblChiTietLaixe.MaNV = tblNhanvien.MaNV

and tblXe.Bienso ='02-T9-1945'

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

Trang 15

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

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

/* 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

Trang 16

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

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

Trang 17

begin

if (@nvl<getdate()) 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 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

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

Trang 18

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

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

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

exec sel_xe @loai=N'Xe thường'

Trang 19

/* 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

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

/* 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 ''

Trang 20

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

exec birth_month 3

/* 20.Tạo thủ tục thêm chi tiết trạm dừng

CREATE PROC ins_cttd

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

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

Trang 21

end else

begin

insert into tblChiTietTramdung values(@mtd, @mt)

end end

GO

insert into tblNhanvien

values ('NV07',N'Nguyễn Đức G','Nam','2000-10-11',N'Hà 5',2000000,150,N'Phụ xe')

Nội','2020-10-insert into tblNhanvien

values ('NV08',N'Nguyễn Duy H','Na','2000-10-11',N'Hà 5',2000000,150,N'Phụ xe')

Trang 22

Nội','2020-10-/* 2 Tạo trigger kiểm soát số tuổi nhân viên mới không vượt quá 50 CREATE TRIGGER trg_tuoinv ON tblNhanVien

IF (@Tuoinvmoi>50) BEGIN

PRINT N'Nhân viên không được quá 50 tuổi' ROLLBACK TRAN

END END

GO

insert into tblNhanvien

values ('NV08',N'Nguyễn Đức h','Nam','1950-10-11',N'Hà 5',2000000,150,N'Phụ xe')

Nội','2020-10-/* 3 Tạo trigger kiểm soát số giờ tuyến chạy không dưới 12 tiếng

IF (@sg < 12) BEGIN

PRINT N'Số giờ tuyến chạy không dưới 12 tiếng'

Trang 23

ROLLBACK TRAN END

END END

update tblChiTietLaixe

set sogio=11 where Matuyen=3

/* 4 Tạo trigger kiểm soát ngày vào làm phải sau ngày sinh

DECLARE @Ngayvaolam DATETIME, @Ngaysinh DATETIME

SELECT @Ngayvaolam = Ngayvaolam FROM inserted SELECT @Ngaysinh = Ngaysinh FROM inserted

END

GO

insert into tblNhanvien

values ('NV08',N'Nguyễn Đức h','Nam','2020-10-11',N'Hà 5',2000000,150,N'Phụ xe')

Trang 24

Nội','2020-10-/* 5 Tạo trigger không cho sửa tên tuyến trong bảng tblTuyen

CREATE TRIGGER trg_updateTentuyen

GO

update tblTuyen

set Tentuyen =N'Ngã tư sở' where Tentuyen=N'Long Biên-Nội Bài'

/* 6 Tạo trigger cập nhật mã trạm dừng thì bảng tblChiTietTramdung cập nhật theo

create TRIGGER trg_updateMatramdung

DECLARE @Macu nchar(10), @Mamoi nchar(10) SELECT @Macu = Matramdung FROM DELETED SELECT @Mamoi = Matramdung FROM INSERTED

If ( EXISTS (select Matramdung from tblTramdung Where Matramdung= @Macu) )

BEGIN

UPDATE tblChiTietTramdung SET Matramdung =

@Mamoi WHERE Matramdung = @Macu END

Trang 25

END END

GO

insert into tblNhanvien

values ('NV08',N'Nguyễn Đức h','Nam','2020-10-11',N'Hà 5',2000000,150,N'Phụ')

Nội','2020-10-/* 8 Tạo trigger kiểm soát số ghế phải phù hợp với loại xe

ALTER TRIGGER trg_sgxe

BEGIN

DECLARE @soghe int

Trang 26

SELECT @soghe = soghe FROM inserted

IF (@loaixe = N'Xe thường' and @soghe != 26) BEGIN

PRINT N'Loại xe thường chỉ nhận số ghế là 26' ROLLBACK TRAN

END ELSE IF (@loaixe = N'Xe 2 tầng' and @soghe != 43) BEGIN

PRINT N'Loại xe 2 tầng chỉ nhận số ghế là 43' ROLLBACK TRAN

END

ELSE IF (@loaixe = N'Xe đường dài' and

@soghe != 41) BEGIN

PRINT N'Loại xe đường dài chỉ nhận số ghế là 41'

ROLLBACK TRAN END

END ELSE BEGIN

PRINT N'Loại xe chỉ có Xe thường, Xe 2 tầng, Xe đường dài' ROLLBACK TRAN

END END

GO

insert into tblXe

values(3,N'Xe thườ',26,null)

values( , N'Xe thường' ,43,null)

/* 9 Tạo trigger kiểm soát tuổi đi làm của nhân viên

Trang 27

CREATE TRIGGER trg_tuoidilam

END

insert into tblNhanvien

values ('NV08',N'Nguyễn Đức h','Nam','2009-10-11',N'Hà

PRINT N'Lương của nhân viên mới không dưới 2 triệu'

ROLLBACK TRAN

Trang 28

END END

END

insert into tblNhanvien

values ('NV08',N'Nguyễn Đức h','Nam','2000-10-11',N'Hà 5',1000000,150,N'Phụ xe')

Nội','2020-10-5 Phân quyền cho các thành viên

Tạo tài khoản người dùng cho mỗi thành viên trong nhóm

CREATE LOGIN Quanghuy WITH PASSWORD = '123456',

DEFAULT_DATABASE = Quanlyxebus;

CREATE USER Huy FOR LOGIN Quanghuy;

CREATE LOGIN Duyhan WITH PASSWORD = '123456',

DEFAULT_DATABASE = Quanlyxebus;

CREATE USER Han FOR LOGIN Duyhan;

Cấp phát cho người dùng có tên Huy quyền thực thi all trên bảng tblNhanvien

GRANT ALL PRIVILEGES

ON tblNhanVien

TO Huy;

Cấp phát cho người dùng Han quyền SELECT, INSERT, UPDATE, DELETE VÀ REFERENCES

trên bảng tblXe và được chuyển tiếp quyền cho người dùng khác

GRANT SELECT, UPDATE, DELETE, REFERENCES

ON tblXe

TO Han

WITH GRANT OPTION;

Cấp phát quyền tạo bảng, khung nhìn cho người dùng có tên là Han GRANT CREATE TABLE, CREATE VIEW

Ngày đăng: 12/03/2024, 16:34

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w