XÂY DỰNG VÀ QUẢN TRỊ HỆ THỐNG CSDL TRÊN SQL SEVER --Câu 1: tạo View đưa ra danh sách nhân viên có ngày vào làm từ năm 2015 trở' đi create view Cau1 as Select TenNV As N'Họ Tên Nhân viên
Trang 1TRƯỜNG ĐẠI HỌC GIAO THÔNG VÂN TẢI
KHOA CÔNG NGHỆ THÔNG TIN -o0o -
Bài tập lớn môn học
Thiết Kế Cơ Sở Dữ Liệu
Giảng viên hướng dẫn: Nguyễn Kim Sao
Nhóm thực hiện: Nhóm 12
Lớp: CNTT2
Sinh viên thực hiện:
Trang 2Lời nói đầu
Công nghệ thông tin là một ngành đang phát triển rất mạnh trên đất nước ta hiện nay Việc ứng dụng công nghệ thông tin trong các lĩnh vực của đời sống còn nhiều hạn chế.
Để nâng cao tính ứng dụng của công nghệ thông tin trong lĩnh vực kinh doanh và dịch
vụ, chúng em đã quyết định chọn đề tài “Xây dựng hệ thống quản lý siêu thị mini” Mục tiêu của bài tập này là phân tích, thiết kế để xây dựng được chương trình quản lý siêu thị với nhiều tính năng phục vụ cho việc quản lý bán các sản phẩm dễ dàng hơn.
Mục lục
I KHẢO SÁT
II PHÂN TÍCH THIẾT KẾ
1 Các kiểu thực thể liên kết
2 Mô hình thực thể liên kết
III XÂY DỰNG VÀ QUẢN TRỊ HỆ THỐNG CSDL TRÊN SQL SEVER 1 View
2 Trigger
3 Thủ tục
4 Hàm
5 Câu lệnh điều khiển dữ liệu
IV XÂY DỰNG CHƯƠNG TRÌNH KẾT NỐI
Trang 3I KHẢO SÁT
1 Cơ sở thực tế bài toán quản lý siêu thị mini
a) Siêu thị là mô hình kinh doanh khá phổ biến.
b) Nguồn hàng chủ yếu do các nhà cung cấp, nhà sản xuất.
c) Khách hàng của siêu thị chủ yếu là người tiêu dùng
+ Xuất hiện: Có khách hàng đến mua hàng.
+ Cách thực hiện: Tính tiền cho khách, lập hóa đơn và cập nhật vào CSDL.
- Nghiệp vụ quản lý nhập hàng
+ Xuất hiện: Khi nhập hàng hóa từ nhà cung cấp.
+ Cách thực hiện: Lập phiếu nhập, lưu thông tin hàng hóa vào CSDL.
- Nghiệp vụ quản lý bảo hành:
+ Xuất hiện: Khi khách hàng mua sản phẩm có bảo hành từ siêu thị.
+ Cách thực hiện: Lập phiếu bảo hành sản phẩm và cập nhật CSDL.
- Nghiệp vụ thống kê tổng hợp:
+ Xuất hiện: Khi cần thống kê kinh doanh siêu thị.
+ Cách thực hiện: Tính tổng đơn giá nhập và bán sản phẩm và cập nhật CSDL.
3 Khảo sát chung https://forms.gle/cAaqXZVEwKHz9C4e8
Trang 5Tổng hợp khảo sát:
Trang 74 Khảo sát nhân viên https://forms.gle/e8bJyEhpTUBXgXX47
Trang 8Tổng hợp khảo sát:
Trang 105 Khảo sát khách hàng https://forms.gle/cDRpMft6qUExT6va6
Trang 12Tổng hợp khảo sát:
Trang 14II PHÂN TÍCH THIẾT KẾ
1 Chức năng
2 Mô hình thực thể
Trang 153 Cách chuyển đổi
4 Chuyển đổi các kiểu thực thể, mối liên kết Mô tả cấu trúc dữ liệu bảng:
Trang 165 Mô hình Diagram
III XÂY DỰNG VÀ QUẢN TRỊ HỆ THỐNG CSDL TRÊN SQL SEVER
Câu 1: tạo View đưa ra danh sách nhân viên có ngày vào làm từ năm 2015
trở' đi create view Cau1
as
Select TenNV As N'Họ Tên Nhân viên ',MaNV As N'Mã Nhân viên ',DiaChi As
N'Địa chỉ' ' NgayVaoLam As N'Ngày vào làm '
From tNhanVien
Where NgayVaoLam>=2015
select * from Cau1
Câu 2: Tạo view đưa ra khách hang mua trong ngày ………
create view Cau2
as
Select tKhachHang.* from tKhachHang join tHoaDonBan on tKhachHang.MaKH
=tHoaDonBan.MaKH Where tHoaDonBan.NgayBan = N'2019-04-12T00:00:00.000'
select * from Cau2
Câu 3: Tạo view đưa ra hang hóa nhập trong tháng
4/2019 create view Cau3
as
select tHangHoa.* from tPhieuNhap join tChiTietPN on tPhieuNhap.MaPN =
tChiTietPN.MaPN join tHangHoa on tHangHoa.MaHH = tChiTietPN.MaHH
where month(tPhieuNhap.NgayNhap) = 4 and year(tPhieuNhap.NgayNhap)
= 2019 select * from Cau3
Câu 4: tạo view đưa ra danh sách hang hóa hêLt HSD ###
create view Cau4
as
Select TenHH As N'Tên hàng hóa ',MaHH As N'Mã hàng hóa ',NSX As N'Ngày sa'n xuâLt ' From tHangHoa
Where HSD <= getdate()
select * from Cau4
Câu 5: Tạo view đưa ra khách hang có sốL hóa đởn lớn
hởn 3 create view Cau5
as
select tHoaDonBan.MaKH, TenKH, DiaChi, DienThoai, GioiTinh, count(MaHDB) as SoLuongHD from tKhachHang join tHoaDonBan on tKhachHang.MaKH = tHoaDonBan.MaKHgroup by tHoaDonBan.MaKH, TenKH, DiaChi, DienThoai,
GioiTinh having count(MaHDB) > 3
Trang 17select *from Cau5
Câu 6: Tạo view đưa ra nhân viên có sốL lượng xuâLt lớn
hởn 2 create view Cau6
as
Select tNhanVien.MaNV, TenNV, DiaChi, DienThoai , count(MaPX) as
SoLuongXuat from tNhanVien join tPhieuXuat on tNhanVien.MaNV
=tPhieuXuat.MaNV
group by tNhanVien.MaNV, TenNV, DiaChi,
DienThoai having Count(MaPX) > 2
select * from Cau6
Câu 7: tạo view danh sách hang hóa có cùng nhà cung câLp
“Thái Ba'o” create view Cau7
as
Select tHangHoa.* from tHangHoa join tNhaCungCap on tHangHoa.MaNCC
=tNhaCungCap.MaNCC Where tNhaCungCap.TenNCC = N'Thái Ba'o'
select * from Cau7
Câu 8: Tạo view đưa ra danh sách hàng hóa có cùng nhóm hàng "thực
phâ'm" create view Cau8
as
Select tHangHoa.* from tHangHoa join tNhomHang on tHangHoa.MaNH
=tNhomHang.MaNH Where tNhomHang.TenNH = N'thực phâ'm'
select * from Cau8
declare @makh nvarchar(20)
select @makh = deleted.MaKH from deleted
delete from tChiTietHDB
from tChiTietHDB join tHoaDonBan on tChiTietHDB.MaHDB =
tHoaDonBan.MaHDB where tHoaDonBan.MaKH = @makh
delete from tHoaDonBan
where tHoaDonBan.MaKH = @makh
end
đang lố̃i
Câu 2: Thêm trường đởn giá cho ba'ng Chi tiêLt HDB ,ViêLt trigger cho cập nhập tự động cho ba'ng này
alter table tchitietHDB
add Dongia int
go
create or alter trigger Cau2_trigger on tchitiethdb for
insert,update as begin
declare @mahdb1 nvarchar(20),@mahdb2 nvarchar(20),@mah
nvarchar(20),@mah2 nvarchar(20),@dongia1 int,@dongia2 int
select @mahdb1 = inserted.MaHDB,
@mah = inserted.MaHH from inserted
Trang 18select @mahdb2 = deleted.MaHDB,
@mah2 = deleted.MaHH from deletedselect @dongia1 = tHangHoa.DonGiaBan from tHangHoa join inserted on inserted.MaHH
= tHangHoa.MaHH
where inserted.MaHDB = @mahdb1
select @dongia2 = tHangHoa.DonGiaBan from tHangHoa join deleted on deleted.MaHH = tHangHoa.MaHH
where deleted.MaHDB = @mahdb2
update tChiTietHDB
set Dongia = isnull(Dongia ,0
)-isnull(@dongia2, )+isnull(@dongia1, ) where tChiTietHDB.MaHDB =
isnull(@mahdb1,@mahdb2) and tChiTietHDB.MaHH =
isnull(@mah,@mah2)
end
UPDATE tChiTietHDB
SET Dongia = '27800'
WHERE MaHH ='H01'
insert into tChiTietHDB values(N'HDB01',N'H03', ,NULL,NULL)
select * from tchitiethdb
Câu 3 Thêm trường tố'ng tiê_n cho ba'ng chi tiêt HDB ,ViêLt trigger tự động tính tố'ng tiê_n và cập nhập Tố'ng tiê_n = sốL lượng * đởn giá
alter table tchitiethdb
add Tongtien int
go
create trigger Cau3_trigger on tchitiethdb for
insert,update as begin
declare @mah nvarchar(20),@shdb nvarchar(20)
select @mah = inserted.MaHH,
@shdb = inserted.MaHDB from inserted
declare @tt int
select @tt = inserted.SLBan*tHangHoa.DonGiaBan from inserted join
tHangHoa on tHangHoa.MaHH = inserted.MaHH
where inserted.MaHDB = @shdb
update tChiTietHDB
set Tongtien = @tt
end
Câu 4: ViêLt trigger găLn với ba'ng hàng hóa dựa trên sự kiện Insert, Update đê'
tự động xêLp loại Nhiê_u hay ít vê_ sốL lượng hàng hóa , cách thức xêLp loại như SốLlượng >100 là nhiê_u, ngược lại là ít
alter table thanghoa
add tinhtrang nvarchar(20)
create trigger Cau4_trigger on thanghoa for
insert,update as begin
declare @mah nvarchar(20),@tt nvarchar(20)
select @mah = inserted.MaHH from inserted
Trang 19where tHangHoa.MaHH = @mah
end
Câu 5: ViêLt một Trigger găLn với ba'ng hàng hóa dựa trên sự kiện Insert, Update đê' tự động cập nhật Ngày còn sư' dụng cu'a hàng hóa khi thêm mới hay cập nhật hàng hóaNgày còn sư' dụng= HSD – ngày SX
alter table thanghoa
add Ngayconhsd int
create or alter trigger Cau5_trigger on thanghoa for
insert,update as begin
declare @mah nvarchar(20)
select @mah = inserted.MaHH from inserted
declare @sn int
select @sn = datediff(day,inserted.NSX,inserted.HSD) from
inserted update tHangHoa
alter table tnhanvien
add Thamnien int
create trigger Cau6_trigger on tnhanvien for
insert,update as begin
declare @mnv nvarchar(20)
select @mnv = inserted.MaNV from inserted
declare @sn int
select @sn = datediff(year,inserted.NgayVaoLam,getdate()) from
inserted update tNhanVien
select @slban = count(tChiTietHDB.MaHDB)
from tChiTietHDB join tHoaDonBan on tChiTietHDB.MaHDB =
tHoaDonBan.MaHDB where NgayBan = @ngayban
end
declare @slhdban int
exec Cau1_tt '2020-01-01', @slhdban output
print @slhdban
Câu 2: Tạo thu' tục đâ_u vào là mã hàng đâ_u ra là tên hàng hóa ,nhà sa'n xuâLt
create procedure Cau2_tt @mah nvarchar(20),@tenh nvarchar(20) output,@tnsx
nvarchar(20) output as
begin
Trang 20select @tenh = TenHH,
@tnsx = tNhaSanXuat.TenNSX from tHangHoa join tNhaSanXuat on
tHangHoa.MaNSX = tNhaSanXuat.MaNSX
where tHangHoa.MaHH = @mah
end
declare @tenh nvarchar( 20),@tnsx
nvarchar(20) exec Cau2_tt'H02',@tenh
output,@tnsx output print @tenh
select @slnhap = count(tPhieuNhap.MaPN)
from tNhanVien join tPhieuNhap on tNhanVien.MaNV =
tPhieuNhap.MaNV where tNhanVien.MaNV = @manv
end
declare @slnhapvao nvarchar(20)
exec Cau3_tt N'NV06', @slnhapvao output
create or alter procedure Cau5_tt @mahh nvarchar(20),@maph nvarchar(20),
@tenhh nvarchar(20) output, @ngaynhap datetime output as
begin
select @tenhh = tHangHoa.TenHH,
@ngaynhap = tPhieuNhap.NgayNhap
from tHangHoa join tNhaCungCap on tHangHoa.MaNCC =
tNhaCungCap.MaNCC join tPhieuNhap on tNhaCungCap.MaNCC =
tPhieuNhap.MaNCC
where tPhieuNhap.MaPN = @maph and tHangHoa.MaHH =
@mahh end
declare @tenhh nvarchar(20),@ngaynhap datetime
exec Cau5_tt N'H01',N'PN01',@tenhh output,@ngaynhap
output print N'Tên hàng hóa: '+cast(@tenhh as
nvarchar(20)) print N'Ngày nhập: '+cast(@ngaynhap as
tHoaDonBan.MaKH where tHoaDonBan.MaHDB = @mahd
Trang 21end
Trang 22declare @tenkh nvarchar(20),@sdt nvarchar(20)
exec Cau6_tt N'HDB01',@tenkh output,@sdt output
print N'Tên khách hàng: '+cast(@tenkh as nvarchar(20))
print N'SĐT: ' + cast(@sdt as nvarchar(20))
4 Hàm
Câu 1: Tạo hàm với đâ_u vào là năm, đâ_u ra là danh sách nhân viên vào làm vào năm đó create function Cau1_h(@nam int) returns table as
return(
select tNhanVien.* from tNhanVien
where year(tNhanVien.NgayVaoLam) = @nam
)
select * from Cau1_h(2018)
Câu 2 Tạo hàm với đâ_u vào là sốL thâm niên (sốL năm làm việc) đâ_u ra là danh sách nhân viên có thâm niên đó
create function Cau2_h (@tl int)
returns table
as return(
select MaNV, MaCV, TenNV, GioiTinh, NgayVaoLam, DiaChi, DienThoai,
DATEDIFF(Year, NgayVaoLam, GetDate()) as ThamLien
from tNhanVien
where DATEDIFF(Year, NgayVaoLam, GetDate()) = @tl
)
select * from Cau2_h('4')
Câu 3 Tạo hàm đâ_u vào là chức vụ đâ_u ra là những nhân viên cùng
chức vụ đó create function Cau3_h (@tl nvarchar(20))
returns table
as return(
select MaNV, tNhanVien.MaCV , TenNV, GioiTinh, NgayVaoLam, DiaChi,
DienThoai from tNhanVien join tChucVu on tNhanVien.MaCV =
tChucVu.MaCV
where TenCV = @tl
)
select * from Cau3_h(N'Nhân viên thu ngân')
Câu 4: Tạo hàm đâ_u vào là mã khách hàng đâ_u ra là sốL lượng hóa đởn cu'a kháchhàng đó create function Cau4_h(@tl nvarchar(20))
returns int as
begin
declare @shd int
select @shd= count(tHoaDonBan.MaHDB) from tHoaDonBan where
tHoaDonBan.MaKH = @tl return @shd
end
print dbo.Cau4_h('KH03')
Câu 5: tạo hàm đưa ra danh sách hàng hóa tố_n kho quá 1 tháng (bán nhưng khống hêLt trong 1 tháng)
Câu 6: Tạo hàm đâ_u vào là mã nhóm hàng đâ_u ra là thống tin hàng hóa ,ngày
sa'n xuâLt create or alter function Cau6_h(@tl nvarchar(20))
returns table
Trang 23as return(
select TenHH, NSX, TenNH,tNhomHang.MaNH
from tHangHoa join tNhomHang on tHangHoa.MaNH =
tNhomHang.MaNH Where tNhomHang.MaNH = @tl
)
select * from Cau6_h(N'NH04')
5 Câu lệnh điều khiển dữ liệu
IV XÂY DỰNG CHƯƠNG TRÌNH KẾT NỐI
Chương trình gồm các form
KẾT LUẬN
Tài liệu thao khảo