Xây dựng Database và khai thác cơ sở dữ liệu cho bài toán quản lý cấp thẻ xe bus I. Đề tài đã chọn 3 II. Phát biểu bài toán 3 III. Thiết kế CSDL mức khái niệmMô hình liên kết thực thể 4 1. Xác định các thực thể và thuộc tính 4 2. Mô hình ER 5 3. Thiết kế CSDL mức logicmô hình quan hệ 6 4. Thiết kế vật lý 7 5. Code chương trình 7
Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm Phân công công việc Thành viên 1.member1 Viết truy vấn liệu : -Đặt yêu cầu xóa liệu có điều kiện viết truy vấn thực -Tạo View tương ứng với truy vấn SELECT viết -Viết stored procedure lấy liệu từ bảng theo PK ứng với Parameter truyền vào -Viết stored procedure lấy liệu từ bảng theo FK ứng với Parameter truyền vào -Viết stored procedure lấy liệu từ bảng theo CK ứng với Parameter truyền vào 2.member2 Viết truy vấn liệu : -Cập nhật thông tin cho bảng truy vấn -Thêm trường, xóa trường -Đặt yêu cầu lấy liệu (từ nhiều bảng; có kết hợp toán tử học biểu thức điều kiện, biểu thức tính toán; có sử dụng hàm tổng hợp liệu; dùng đủ câc mệnh đề truy vấn SELECT) Viết truy vấn thực yêu cầu -Truy vấn liệu từ bảng -Truy vấn liệu từ nhiều bảng 3.member3 Viết truy vấn liệu : -Phát biểu toán -Phân tích, thiết kế sở liệu -Tạo bảng truy vấn -Nhập liệu -Tạo khoá khoá ngoại , ràng buộc Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm Mục Lục I Đề tài chọn .3 II Phát biểu toán III Thiết kế CSDL mức khái niệm-Mô hình liên kết thực thể.4 Xác định thực thể thuộc tính Mô hình ER Thiết kế CSDL mức logic-mô hình quan hệ Thiết kế vật lý Code chương trình .7 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm BÀI TOÁN QUẢN LÝ CẤP THẺ XE BUS I Đề tài chọn Xây dựng Database khai thác sở liệu cho toán quản lý cấp thẻ xe bus II Phát biểu toán Bài toán quản lý cấp thẻ xe bus bao gồm : Khách hàng đến mua vé xe bus cần có thông tin cụ thể - Khách hàng: bao gồm mã khách hang ,tên khách hang ,ngày sinh ,địa ,giới tính ,số điện thoại đến nơi cấp vé có nhân viên bán vé tháng có thông tin sau - Nhân viên:mã nhân viên,tên nhân viên,địa chỉ,giới tính,số điện thoại Nhân viên xuất phiếu thu tiền sau nhận tiền khách hang - Phiếu thu tiền:mã phiếu , ngày lập , tổng tiền Vé tháng có nhiều loại vé khác gồm thông tin cụ thể loại vé - Loại vé: mã loại vé , loại vé Mỗi loại vé có mệnh giá tương ứng với vé - Gía vé: mã giá, đơn giá Khách hàng nhận vé tháng,vé tháng bao gồm thông tin - Vé tháng: mã vé ,ngày bắt đầu , ngày kết thúc Ngôn ngữ truy vấn liệu III Giảng viên: Nguyễn Thị Tâm Thiết kế CSDL mức khái niệm-Mô hình liên kết thực thể Xác định thực thể thuộc tính 1.KHACHHANG (MaKH, TenKH, sinh, dia chi, gioi tinh, SDT) 2.NHANVIEN ( MaNV, TenNV, sinh, dia chi, gioi tinh, SDT) 3.VETHANG (MaV, ngayBD, ngayKT) PHIEUTHU(MaP, ngaythu, TTien) 5.LOAIVE(MaLV ,TenLV) 6.GIAVE(MaG, dongia) Biểu diễn mối lien kết: KHACHHANG mua VE THANG:1-n NHANVIEN lập PHIEUTHU:1-n KHACHHANG nhận PHIEUTHU:1-n PHIEUTHU có VETHANG : 1-1 VETHANG có LOAIVE:1-1 LOAIVE có GIAVE:1-1 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm Mô hình ER Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm Thiết kế CSDL mức logic-mô hình quan hệ Áp dụng thực thể mạnh: (1) KHACHHANG (MaKH ,TenKH ,ngay sinh ,dia chi ,gioi tinh ,SDT) (2) NHANVIEN ( MaNV ,TenNV ,ngay sinh ,dia chi ,gioi tinh ,SDT) (3) VETHANG (MaV ,ngayBD ,ngayKT) (4) PHIEUTHU(MaP ,ngaythu , TTien) (5) LOAIVE(MaLV , TenLV) (6) GIAVE(MaG ,dongia) Áp dụng với quan hệ 1-n: (3’) VETHANG (MaV ,MaKH ,ngayBD ,ngayKT) (4’) PHIEUTHU(MaP, MaNV ,ngaythu, TTien) (4’’) PHIEUTHU(MaP, MaNV , MaKH ,ngaythu , TTien) Áp dụng quan hệ 1-1: (3’’)VETHANG (MaV , MaLV, MaKH, ngayBD, ngayKT) (4’’’) PHIEUTHU(MaP ,MaV , MaNV , MaKH ,ngaythu , TTien) (6’) GIAVE(MaG ,dongia , MaLV) CDSL cuối cùng: (1) KHACHHANG (MaKH , TenKH, sinh, dia chi, gioi tinh ,SDT) (2)NHANVIEN ,SDT) (MaNV, TenNV, sinh, dia chi, gioi tinh (3’’)VETHANG (MaV , MaLV, MaKH, ngayBD, ngayKT) (4’’’) PHIEUTHU(MaP ,MaV , MaNV , MaKH ,ngaythu , TTien) Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm (5) LOAIVE(MaLV , TenLV) (6’) GIAVE(MaG ,dongia , MaLV) Thiết kế vật lý Code chương trình create database BTL use BTL drop database BTL -tạo bảng Người mua vé create table KHACHHANG ( sMakh varchar(10) primary key, sTenkh nvarchar(30), sNgaysinh date, sDiachi nvarchar(30), sGtinh varchar(5), sSdt varchar(20), ); Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm -tạo bảng nhân viên phát vé create table NHANVIEN ( sManv varchar(10) primary key, sTennv nvarchar(30), sNgaysinh date, sDiachi nvarchar(30), sGtinh varchar(5), sSdt varchar(30), ); -tạo bảng loại vé tháng create table LOAIVE ( sMaloaive varchar(10) primary key, sLoaive varchar(10), ); -tạo đơn giá loại vé tháng create table GIAVE ( sMagiave varchar(10) primary key, fDongia float, sMaloaive varchar(10), foreign key (sMaloaive) references LOAIVE(sMaloaive), ); -tạo bảng vé tháng create table VETHANG ( sMave varchar(10) primary key, sNgayketthuc date, sMakh varchar(10), sMaloaive varchar(10), sNgaybatdau date, foreign key (sMaloaive) references LOAIVE(sMaloaive), foreign key (sMakh) references KHACHHANG(sMakh), ); Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm -tạo bảng phiếu thu tiền create table PHIEUTHUTIEN ( sMaphieu varchar(10) primary key, sNgaylap date, sMave varchar(10), sManv varchar(10), sMakh varchar(10), sTongtien float, foreign key (sMave) references VETHANG(sMave), foreign key (sManv) references NHANVIEN(sManv), foreign key (sMakh) references KHACHHANG(sMakh), ); Tạo index create index id_TTkhach on KHACHHANG(sMaKH); create index id_TTGia on GIAVE(sMaloaive); create index id_TTLV on LOAIVE(sMaloaive); create index id_TTPhieu on PHIEUTHUTIEN(sMave); create index id_TTVe on VETHANG(sNgaybatdau); create index id_TTNvien on NHANVIEN(sManv); Tạo rang buoc alter table KHACHHANG add constraint CK_GT CHECK (sGtinh in('Nam','Nu')); alter table NHANVIEN add constraint GT_NV CHECK (sGtinh in('Nam','Nu')); alter table NHANVIEN drop GT_NV Xóa trường thứ bảng alter table KHACHHANG drop column sTenkh; alter table NHANVIEN drop column sTennv; alter table LOAIVE drop column sLoaive; alter table GIAVE drop column fDongia; alter table VETHANG drop column sNgayketthuc; alter table PHIEUTHUTIEN drop column sNgaylap; Thêm trường vừa xóa vào bảng Alter table KHACHHANG add sTenkh nvarchar(30); Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm Alter table NHANVIEN add sTennv nvarchar(30); Alter table LOAIVE add sLoaive varchar(10); Alter table GIAVE add fDongia float; Alter table VETHANG add sNgayketthuc date; Alter table PHIEUTHUTIEN add sNgaylap date; -Nhập liệu cho bảng Bảng khách hàng Insert into KHACHHANG values ('KH01','09/06/1986',N'Hà Nội','Nu','0123456789',N'Nguyễn Thị Hà'); Insert into KHACHHANG values ('KH02','09/06/1996',N'Hà Nam','Nu','0125498696',N'Đinh Thu Trâm'); Insert into KHACHHANG values ('KH03','09/06/1995',N'Hải Dương','Nam','0786786782',N'Trần Văn Long'); Insert into KHACHHANG values ('KH04','09/06/1994',N'Nam Định','Nam','0846521869',N'Phạm Hồng Tiến'); Insert into KHACHHANG values ('KH05','09/06/1996',N'Hà Nội','Nu','0648566215',N'vũ Thu Trang'); Insert into KHACHHANG values ('KH06','09/06/1992',N'Hà Nội','Nam','0157956346',N'Mai Tiến Sơn'); select * from KHACHHANG Bảng Nhân viên Insert into NHANVIEN values ('NV01','09/06/1988',N'Hà Nội','Nu','0987654321',N'Nguyễn Thị Thanh Hà'); Insert into NHANVIEN values ('NV02','09/06/1988',N'lạng Sơn','Nu','0946658861',N'Trần Thu Hà'); Insert into NHANVIEN values ('NV03','09/06/1998',N'Gia Lai','Nam','0984656564',N'Nguyễn Văn Quyết'); Insert into NHANVIEN values 10 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm ('NV04','09/06/1988',N'Hà Nam','Nu','0179455753',N'Trần Thị Bưởi'); Insert into NHANVIEN values ('NV05','09/06/1988',N'Bến Tre','Nam','0618486966',N'Nguyễn Thị Thanh Tâm'); Insert into NHANVIEN values ('NV06','09/06/1993',N'Hồ Chí Minh','Nu','0123584866',N'Nguyễn Trà My'); select * from NHANVIEN Bảng Loại vé Insert into LOAIVE values('M01','L1'); Insert into LOAIVE values('M02','L2'); Insert into LOAIVE values('M03','L3'); Insert into LOAIVE values('M04','L4'); Insert into LOAIVE values('M05','L5'); Insert into LOAIVE values('M06','L6'); select * from LOAIVE Bảng giá loại vé Insert into GIAVE values('MM01','M01','30000'); Insert into GIAVE values('MM02','M02','40000'); Insert into GIAVE values('MM03','M03','50000'); Insert into GIAVE values('MM04','M04','60000'); Insert into GIAVE values('MM05','M05','70000'); select * from GIAVE 11 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm Bảng vé tháng Insert into VETHANG values('MV01','KH01','M02','01/01/2017','01/02/2017'); Insert into VETHANG values('MV02','KH02','M03','01/03/2017','01/04/2017'); Insert into VETHANG values('MV03','KH03','M05','01/05/2017','01/06/2017'); Insert into VETHANG values('MV04','KH04','M06','01/07/2017','01/08/2017'); Insert into VETHANG values('MV05','KH05','M01','01/08/2017','01/09/2017'); Insert into VETHANG values('MV06','KH06','M04','01/09/2017','01/10/2017'); select * from VETHANG Bảng phiếu thu tiền Insert into PHIEUTHUTIEN values('MP01','MV01','NV01','KH01','50000','01/02/2017'); Insert into PHIEUTHUTIEN values('MP02','MV02','NV02','KH02','60000','02/03/2017'); Insert into PHIEUTHUTIEN values('MP03','MV03','NV03','KH03','60000','03/04/2017'); Insert into PHIEUTHUTIEN values('MP04','MV04','NV04','KH04','70000','04/05/2017'); Insert into PHIEUTHUTIEN values('MP05','MV05','NV05','KH05','80000','05/06/2017'); 12 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm Insert into PHIEUTHUTIEN values('MP06','MV06','NV06','KH06','90000','06/07/2017'); select * from PHIEUTHUTIEN Cập nhật lại giá cho vé update GIAVE set fDongia ='90000' where sMaloaive = 'M06' select *from GIAVE Cập nhật lại sđt khách hàng update KHACHHANG set sSdt='0155626648' where sMakh='KH01' select *from KHACHHANG Cập nhật lại giới tính cho nhân viên update NHANVIEN set sGtinh='Nu' 13 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm where sManv='NV05' select *from NHANVIEN Xoá nhân viên có mã delete from NHANVIEN where sManv='NV07' select * from NHANVIEN viết thủ tục thêm khách hàng với tham số truyền vào phù hợp create procedure KHACHHANG_Themkh @Makh varchar(10), @Ngaysinh date, @Điachi nvarchar(30), @Gtinh nvarchar(5), @Sdt varchar(20), @Tenkh nvarchar(30) as begin insert into KHACHHANG values (@Makh,@Ngaysinh,@Điachi,@Gtinh,@Sdt,@Tenkh) end exec KHACHHANG_Themkh @Makh='KH15',@Tenkh=N'Đặng Ngọc Long', @Ngaysinh='01/04/1996', @Điachi=N'Hà Nội' , @Gtinh=N'Nam', @Sdt='0649496666' select *from KHACHHANG 14 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm -TRUY VẤN liệu từ bảng Tìm khách hàng có năm sinh select *from KHACHHANG where year(sNgaysinh) = 1996 Thông tin nhân viên có chữ N select *from NHANVIEN where sTennv like 'N%' Tìm phiếu thu tiền có ngày lập 06/07/2017 select *from PHIEUTHUTIEN where sNgaylap='06/07/2017' Số khách hàng có gtính nam select count(sMakh) as SoKH from KHACHHANG where sGtinh='nam' 15 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm -TRUY VẤN liệu từ nhiều bảng Danh sách nhân viên ngày lập phiếu select NHANVIEN.sManv,PHIEUTHUTIEN.sNgaylap from NHANVIEN inner join PHIEUTHUTIEN on NHANVIEN.sManv=PHIEUTHUTIEN.sManv Danh sách Mã loại vé tương ứng mã khách hàng select LOAIVE.sMaloaive,VETHANG.sMakh from LOAIVE inner join VETHANG on LOAIVE.sMaloaive=VETHANG.sMaloaive Danh sách Mã loại vé tương ứng đơn giá select LOAIVe.sMaloaive,GIAVE.fDongia from LOAIVE inner join GIAVE on LOAIVE.sMaloaive=GIAVE.sMaloaive -Tạo view tương ứng với select có Select từ bảng Tạo view gồm ( tên khách hàng năm sinh ) create view view_ngsinh 16 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm as select sTenkh,sNgaysinh from KHACHHANG where year(sNgaysinh) = 1996 select *from view_ngsinh Tạo view gồm ( mã nhân viên tên nhân viên ) create view view_ttin as select sManv,sTennv from NHANVIEN where sTennv like 'N%' select *from view_ttin Tạo view gồm ( phiếu thu tiền lập ngày 06/07/2017) create view view_ngay as select sMaphieu,sNgaylap from PHIEUTHUTIEN where sNgaylap='06/07/2017' select *from view_ngay Tạo view gồm ( số nhân viên nam ) create view view_soKh as select count(sMakh) as SoKH from KHACHHANG where sGtinh='nam' select *from view_soKh 17 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm Select từ nhiều bảng Tạo view gồm mã nhân viên ngày lập phiếu thu tiền create view view_tt1 as select NHANVIEN.sManv,PHIEUTHUTIEN.sNgaylap from NHANVIEN inner join PHIEUTHUTIEN on NHANVIEN.sManv=PHIEUTHUTIEN.sManv select *from view_tt1 Tạo view gồm mã loại vé mã khách hàng create view view_tt2 as select LOAIVE.sMaloaive,VETHANG.sMakh from LOAIVE inner join VETHANG on LOAIVE.sMaloaive=VETHANG.sMaloaive select *from view_tt2 Tạo view gồm mã loại vé đơn giá create view view_tt3 as select LOAIVe.sMaloaive,GIAVE.fDongia from LOAIVE inner join GIAVE on LOAIVE.sMaloaive=GIAVE.sMaloaive select *from view_tt3 18 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm -Tạo procedure lấy liệu theo PK Bảng khách hàng create proc sp_pk_khachhang ( @sMakh varchar(50) ) as begin select * from KHACHHANG where sMakh=@sMakh end exec sp_pk_khachhang 'KH01'; select *from KHACHHANG Bảng nhân viên create proc sp_pk_nhanvien ( @sManv varchar(50) ) as begin select * from NHANVIEN where sManv=@sManv end exec sp_pk_nhanvien 'NV01'; Bảng loại vé create proc sp_pk_loaive ( @sMaloaive varchar(50) ) as begin select * from LOAIVE 19 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm where sMaloaive=@sMaloaive end exec sp_pk_loaive 'M01'; Bảng Giá vé create proc sp_pk_giave ( @sMagiave varchar(50) ) as begin select *from GIAVE where sMagiave=@sMagiave end exec sp_pk_giave 'MM01' Bảng Vé tháng create proc sp_pk_vethang ( @sMave varchar(50) ) as begin select *from VETHANG end exec sp_pk_vethang 'MV01' Bảng Phiếu thu tiền create proc sp_pk_phieuthu ( @sMaphieu varchar(50) ) as begin select *from PHIEUTHUTIEN end exec sp_pk_phieuthu 'MP01' -Tạo procedure lấy liệu theo FK bảng giá vé create proc sp_fk_gv ( @sMaloaive varchar(20) 20 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm ) as begin select * from GIAVE where sMaloaive=@sMaloaive end exec sp_fk_gv 'M04' bảng vé tháng create proc sp_fk_vt1 ( @sMaloaive varchar(20) ) as begin select * from VETHANG where sMaloaive=@sMaloaive end exec sp_fk_vt1 'M02' -create proc sp_fk_vt2 ( @sMakh varchar(20) ) as begin select * from VETHANG where sMakh=@sMakh end exec sp_fk_vt2 'KH02' bảng phiếu thu create proc sp_fk_pt1 ( @sMakh varchar(20) ) as begin select * from PHIEUTHUTIEN where sMakh=@sMakh end exec sp_fk_pt1 'KH06' -21 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm create proc sp_fk_pt2 ( @sManv varchar(10) ) as begin select * from PHIEUTHUTIEN where sManv=@sManv end exec sp_fk_pt2 'NV06' -create proc sp_fk_pt3 ( @sMave varchar(10) ) as begin select * from PHIEUTHUTIEN where sMave=@sMave end exec sp_fk_pt3 'MV06' -Tạo procedure lấy liệu theo CK create proc sp_ck_gt ( @sGtinh varchar(5) ) as begin select *from KHACHHANG where sGtinh=@sGtinh end exec sp_ck_gt 'nam'; 22 ... 1-1 VETHANG có LOAIVE:1-1 LOAIVE có GIAVE:1-1 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm Mô hình ER Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm Thiết kế CSDL mức logic-mô hình quan... @Makh='KH15',@Tenkh=N'Đặng Ngọc Long', @Ngaysinh='01/04/1996', @Điachi=N'Hà Nội' , @Gtinh=N'Nam', @Sdt='0649496666' select *from KHACHHANG 14 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm -TRUY VẤN liệu từ... ('NV03','09/06/1998',N'Gia Lai','Nam','0984656564',N'Nguyễn Văn Quyết'); Insert into NHANVIEN values 10 Ngôn ngữ truy vấn liệu Giảng viên: Nguyễn Thị Tâm ('NV04','09/06/1988',N'Hà Nam','Nu','0179455753',N'Trần