Đang tải... (xem toàn văn)
Chủ cửa hàng muốn cắt giảm nhân công để giảm chi phí quản lí nhưng do có quá nhiều sản phẩm nên không thể quản lí được hết thường xuyên xảy ra tình trạng không kịp thời - Các đối tượng s
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
HỌC PHẦN: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆUĐỀ TÀI: THIẾT KẾ VÀ QUẢN TRỊ CƠ SỞ DỮ LIỆU
CHO CỬA HÀNG TẠP HÓA
Nhóm sinh viên thực hiện:
Cán bộ coi thi, chấm thi 1 Cán bộ coi thi, chấm thi 2
HÀ NỘI - 2021
Trang 2NHẬN XÉT CỦA GIÁO VIÊN
Trang 3MỤC LỤC
BẢNG PHÂN CÔNG NHIỆM VỤ 5
DANH MỤC BẢNG 6
PHẦN 1: GIỚI THIỆU BÀI TOÁN 7
PHẦN 2: THIẾT KẾ VÀ QUẢN TRỊ CƠ SỞ DỮ LIỆU 7
A-Thiết kế cơ sở dữ liệu 7
7.Tạo bảng Chi Tiết Phiếu Nhập 14
8.Tạo bảng Phiếu Xuất 14
9.Tạo bảng Chi tiết Phiếu Xuất 15
Trang 5BẢNG PHÂN CÔNG NHIỆM VỤ
Họ tênMã sinh viên
1 Khảo sát yêu cầu, thiết kế CSDL (các bảng, mô hình quan hệ), viết báo cáo 2 Thiết kế Trigger
3 Thiết kế Procedure 4 Thiết kế View 5 Thiết kế Function
Trang 6Bảng 1 11: Ràng buộc khóa ngoại 11
YBảng 2 1: Mô hình quan hệ quản lí bán hàng 11
Trang 7PHẦN 1: GIỚI THIỆU BÀI TOÁN
- Giới thiệu đơn vị khảo sát: Cửa hàng tạp hóa Nghiệm Thu có ba nhân viên nhưng sau khi dịch Covid bùng phát thì doanh thu cửa hàng sụt giảm Chủ cửa hàng muốn cắt giảm nhân công để giảm chi phí quản lí nhưng do có quá nhiều sản phẩm nên không thể quản lí được hết thường xuyên xảy ra tình trạng không kịp thời
- Các đối tượng sử dụng cơ sở dữ liệu: chủ cửa hàng tạp hóa
- Các đối tượng cần lưu trữ: hàng hóa, khách hàng, nhà cung cấp, hóa đơn xuất nhập hàng hóa.
- Các yêu cầu thiết kế và quản trị cơ sở dữ liệu:
+ Lưu trữ các khách mua hàng thân thiết để có chương trình khuyến mãi thích hợp để kích cầu thị trường, nhà cung cấp, các hóa đơn xuất nhập hàng hóa
+ Có thông báo khi mặt hàng tồn kho đạt số lượng báo động + Thông báo để điều chỉnh giá bán kịp thời tránh tình trạng lỗ
PHẦN 2: THIẾT KẾ VÀ QUẢN TRỊ CƠ SỞ DỮ LIỆUA-Thiết kế cơ sở dữ liệu
I.Các bảng dữ liệu
PhanTram Tỷ lệ phần trăm Real Bảng 1 1: HANGHOA
Trang 8TênÝ nghĩaKiểuĐộ rộng
Bảng 1 2: NCC
Bảng 1 3: DONDH
Bảng 1 4: CTDONDH
Ngaynhap Ngày nhập hàng Datetime
Bảng 1 5: PNHAP
Trang 9TênÝ nghĩaKiểuĐộ rộng
SlNhap Số lượng nhập hàng Int DgNhap Đơn giá nhập hàng Money
Bảng 1 6: CTPNHAP
Ngayxuat Ngày xuất hàng Datetime
Bảng 1 7: PXUAT
SlXuat Số lượng xuất hàng Int DgXuat Đơn giá xuất hàng Money
Bảng 1 8: CTPXUAT
Trang 10MaHH Mã hàng hóa Char 4 SlDau Số lượng tồn đầu kỳ Int
Bảng 1 10: KHACHHANG
Trang 114 PNHAP SoDH DONDH
Bảng 1 11: Ràng buộc khóa ngoại
II.Mô hình quan hệ
Bảng 2 1: Mô hình quan hệ quản lí bán hàng
B-Cài đặt cơ sở dữ liệuI-Tạo bảng
1.Tạo CSDL của cửa hàng
CREATE DATABASE QLCuaHang ON PRIMARY
FILENAME='D:\QLCuahang_Data.mdf',
Trang 12MaHH char(4) not null, TenHH nvarchar(100) not null, DvTinh nvarchar(10) null, PhanTram real default 20,
MaNCC char(3) not null, TenNCC nvarchar(100) not null, Diachi nvarchar(100) not null, Dienthoai varchar(20) default 'chưa có',
Trang 13SoDH char(4) not null,
NgayDH datetime default getdate(), MaNCC char(3) null,
primary key(SoDH), foreign key(MaNCC) references NCC(MaNCC) )
5.Tạo bảng Chi Tiết Đơn Đặt Hàng
create table CTDONDH (
SoDH char(4) not null, MaHH char(4) not null, SlDat int null,
Trang 14SoPN char(4) not null,
Ngaynhap datetime default getdate(), SoDH char(4) null,
primary key(SoPN), foreign key(SoDH) references DONDH(SoDH) )
7.Tạo bảng Chi Tiết Phiếu Nhập
create table CTPNHAP (
SoPN char(4) not null, MaHH char(4) not null, SlNhap int null, DgNhap money null,
8.Tạo bảng Phiếu Xuất
create table PXUAT (
SoPX char(4) not null,
Ngayxuat datetime default getdate(), MaKH char(3) null,
Trang 15primary key(SoPX) )
9.Tạo bảng Chi tiết Phiếu Xuất
create table CTPXUAT (
SoPX char(4) not null, MaHH char(4) not null, SlXuat int null, DgXuat money null,
check(SlXuat>0 and DgXuat>0),
Namthang char(6) not null, MaHH char(4) not null, SlDau int default 0, TongSLN int default 0, TongSLX int default 0,
SlCuoi as SlDau+TongSLN-TongSLX,
check(SlDau>=0 and TongSLN>=0 and TongSLX>=0), primary key(Namthang,MaHH),
foreign key(MaHH)
Trang 16MaKH char(3) not null, TenKH nvarchar(100) not null, Diachi nvarchar(100) not null, Dienthoai varchar(20) default 'chưa có',
Trang 172.Bảng Nhà Cung Cấp
3.Bảng Đơn Đặt Hàng
4.Bảng Chi Tiết Đơn Đặt Hàng
Trang 199.Bảng Khách Hàng
III-Các lệnh T_SQL
1.Thiết kế view
hàng hóa ,các thông tin hiển thị gồm : Mã hàng hóa,Tên hàng hóa,Tổng số lượng nhập,Tổng số lượng xuất của mặt hàng.
1.2 Thiết kế view vw_CtietPXuatX003 Hiển thị thông tin chi tiết của
giá xuất, ngày xuất, tên khách hàng.
Trang 201.3.Thống kê tình hình nhập hàng và đặt hàng của hàng hóa chi tiết với: Số đơn hàng, Mã hàng hóa, Tên hàng hóa,Tổng toàn bộ số lượng đặt và nhập hàng hóa
1.4.Hiển thị thông tin giá bán của các mặt hàng hóa chi tiết với: Mã hàng hóa, Tên hàng hóa, đơn vị tính , giá bán
1.5 Hiển thị thông tin giá mua của các mặt hàng hóa chi tiết với: Mã hàng hóa,Tên hàng hóa,đơn vị tính và giá mua
Trang 211.6 Hiển thị các thông tin chi tiết phiếu nhâ Np trong ngày 02/11/2021,
1.7.Hiển thị danh sách mã hàng hóa, tên hàng hóa của các hàng hóa
Trang 221.8 Tìm phWn trăm số lượng đã đặt hàng của từng vật tư trên tổng cộng các số lượng đã đặt hàng của toàn bộ vật tư Dữ liệu hiển thị gồm tên vật tư, tổng số lượng đặt theo vật tư, tổng toàn bộ số lượng đặt, phWn trăm.
1.9.Thống kê số lượng nhập của các mặt hàng hóa trong từng năm tháng tương ứng(không sử dụng tồn kho),thông tin hiển thị gồm: Mã hàng hóa,Tên hàng hóa,Tổng số lượng nhập,thời gian nhập hàng.
Trang 231.10.Thống kê số lượng xuất của các mặt hàng hóa trong từng năm tháng tương ứng(không sử dụng tồn kho),thông tin hiển thị gồm: Mã hàng hóa,Tên hàng hóa,Tổng số lượng xuất,thời gian xuất hàng.
1.11.Hiển thị thông tin nhà cung cấp có số đơn đặt hàng cao nhất , thông tin hiển thị gồm: Mã nhà cung cấp,Tên nhà cung cấp,Số lWn đã đặt hàng.
1.12 Thống kê số lWn mua hàng của khách,thông tin hiển thị :Mã khách hàng,Tên khách hàng,Địa chỉ,Số điện thoại và số lWn đã mua ở cửa hàng.
Trang 241.13 Hiển thị danh sách các khách hàng gồm các thông tin mã khách hàng, tên khách hàng, địa chỉ của những khách hàng chưa có số điện thoại.
1.14.Thống kê số phiếu xuất theo tháng ,thông tin hiển thị gồm năm xuất, tháng xuất và tổng số phiếu xuất theo tháng
Trang 251.15.Thống kê số phiếu nhập theo tháng ,thông tin hiển thị gồm năm xuất, tháng xuất và tổng số phiếu nhập theo tháng
1.16 In ra danh sách các hàng hóa (MaHH,TenHH) không bán được trong năm 2021
1.17 In ra doanh thu của cửa hàng bán được trong năm 2021
Trang 261.18 Hiển thị hàng hóa (MaHH, TenHH) có tổng số lượng bán ra thấpnhất trong năm 2021.
Bảng HANGHOA:
_ Xây dựng trigger thêm mới dữ liệu vào bảng HANGHOA với têntg_HANGHOA_Them Trong đó cWn kiểm tra ràng buộc dữ liệu hợp lệ: Dữliệu thêm vào phải là duy nhất
Create trigger tg_HANGHOA_Them on HANGHOA for insert
as begin
declare @TenHH nvarchar(100), @dem int select @TenHH=TenHH from inserted
select @dem=COUNT(TenHH) from HANGHOA where TenHH=@TenHH
if @dem>=2
Trang 27_ Xây dựng trigger xóa dữ liệu trong bảng HANGHOA với têntg_HANGHOA_Xoa Trong đó cWn kiểm tra ràng buộc dữ liệu: Mã hàng hóanày không tồn tại trong bảng CTPXUAT hoặc CTPNHAP, CTDONDH
Create trigger tg_HANGHOA_Xoa on HANGHOA for delete
as begin
declare @MaHH char(4), @dem int select @MaHH=MaHH from deleted
select @dem=COUNT(MaHH) from CTPXUAT where
Trang 28_ Xây dựng trigger sửa dữ liệu trong bảng HANGHOA với têntg_HANGHOA_Sua Trong đó cWn kiểm tra điều kiện ràng buộc dữ liệu hợp
declare @TenHH nvarchar(100), @dem int select @TenHH=TenHH from inserted
select @dem=COUNT(TenHH) from HANGHOA where
Trang 29Bảng NCC
_ Xây dựng trigger sửa dữ liệu trong bảng NCC với tên tg_NCC_Them.Trong đó cWn kiểm tra điều kiện ràng buộc dữ liệu hợp lệ: Dữ liệu đó là duy
declare @TenNCC nvarchar(100), @dem int select @TenNCC=TenNCC from inserted
select @dem=COUNT(TenNCC) from NCC where
_ Xây dựng trigger xóa dữ liệu trong bảng NCC với tên tg_NCC_Xoa.Trong đó cWn kiểm tra điều kiện ràng buộc dữ liệu hợp lệ: Mã nhà cung cấpnày không tồn tại trong bảng DONDH
Create trigger tg_NCC_Xoa on NCC for delete
as begin
declare @MaNCC char(4), @dem int select @MaNCC=MaNCC from deleted
select @dem=COUNT(MaNCC) from DONDH where MaNCC=@MaNCC
Trang 30_ Xây dựng trigger sửa dữ liệu trong bảng NCC với tên tg_NCC_Sua.Trong đó cWn kiểm tra điều kiện ràng buộc dữ liệu hợp lệ: Dữ liệu đó là duy
declare @TenNCC nvarchar(100), @dem int select @TenNCC=TenNCC from inserted
select @dem=COUNT(TenNCC) from NCC where
_ Xây dựng trigger sửa dữ liệu trong bảng KHACHANG với têntg_KHACHHANG_Them Trong đó cWn kiểm tra điều kiện ràng buộc dữ liệuhợp lệ: Dữ liệu đó là duy nhất
Trang 31Create trigger tg_KHACHHANG_Them on KHACHHANG for insert
as begin
declare @TenKH nvarchar(100), @dem int select @TenKH=TenKH from inserted
select @dem=COUNT(TenKH) from KHACHHANG where
_ Xây dựng trigger xóa dữ liệu trong bảng KHACHHANG với têntg_KHACHHANG_Xoa Trong đó cWn kiểm tra điều kiện ràng buộc dữ liệuhợp lệ: Mã khách hàng này không tồn tại trong bảng PXUAT
Create trigger tg_KHACHHANG_Xoa on KHACHHANG for delete
as begin
declare @MaKH char(4), @dem int select @MaKH=MaKH from deleted
select @dem=COUNT(MaKH) from PXUAT where
Trang 32rollback tran end
end go
_ Xây dựng trigger sửa dữ liệu trong bảng KHACHANG với têntg_KHACHHANG_Sua Trong đó cWn kiểm tra điều kiện ràng buộc dữ liệu
declare @TenKH nvarchar(100), @dem int select @TenKH=TenKH from inserted
select @dem=COUNT(TenKH) from KHACHHANG where
_ Xây dựng trigger sửa dữ liệu trong bảng DONDH với têntg_DONDH_Them Trong đó cWn kiểm tra điều kiện ràng buộc dữ liệu hợp
Trang 33declare @SoDH char(4), @dem int select @SoDH=SoDH from inserted
select @dem=COUNT(SoDH) from DONDH where
_ Tạo Trigger kiểm tra việc xóa dữ liệu cho bảng DONDH với têntg_DONDH_Xoa Trong đó cWn kiểm tra các ràng buộc dữ liệu hợp lệ:
+Nếu đã có ít nhất một phiếu nhập hàng cho đơn đặt hàng đó thì thôngbáo không thể xóa đơn đặt hàng
+Nếu chưa có phiếu nhập nào thì tự động xóa các dữ liệu liên quan
declare @SoPN char(4), @Loi char(200)
if exists(select SoPN from PNHAP where SoDH in (select SoDH from deleted))
begin
select @SoPN=min(SoPN) from PNHAP where SoDH in (select SoDH from deleted)
set @Loi=N'Đơn đặt hàng đã được nhập theo phiếu nhập' +@SoPN+ 'không thể hủy đơn đặt hàng!'
rollback tran
Trang 34_ Tạo trigger sửa dữ liệu cho bảng DONDH với tên tg_DONDH_Sua.Trong đó cWn kiểm tra các ràng buộc dữ liệu hợp lệ: Không được sửa các dữliệu SoDH hoặc MaNCC vì nó liên quan tới nhiều bảng khác
Create trigger tg_DONDH_Sua on DONDH
_ Xây dựng trigger thêm dữ liệu trong bảng CTDONDH với têntg_DONDH_Them Trong đó cWn kiểm tra các ràng buộc dữ liệu hợp lệ:SoDH có tồn tại trong bảng DONDH
Create trigger tg_CTDONDH_Them on CTDONDH for insert
as
Trang 35declare @SoDH char(4),@Loi char(200)
if not exists (select *from inserted,DONDH where
_ Xây dựng trigger xóa dữ liệu trong bảng CTDONDH với têntg_DONDH_Xóa Trong đó cWn kiểm tra các ràng buộc dữ liệu hợp lệ:Không được xóa SoDH nếu SoDH đã tồn tại trong bảng DONDH
Create trigger tg_CTDONDH_Xoa on CTDONDH for delete
as begin
declare @Loi char(200)
select SoDH from DONDH where SoDH in (select SoDH
_Xây dựng trigger sửa dữ liệu trong bảng CTDONDH với têntg_DONDH_Sua Trong đó cWn kiểm tra các ràng buộc dữ liệu hợp lệ:Không được sửa SoDH vì liên quan đến nhiều bảng
Create trigger tg_CTDONDH_Sua on CTDONDH for update
Trang 36_ Xây dựng trigger khi thêm mới dữ liệu vào bảng PNHAP với têntg_PNHAP_Them Trong đó cWn kiểm tra các ràng buộc dữ liệu phải hợp lệ:Ngày nhập hàng phải sau ngày đặt hàng
Create trigger tg_PNHAP_Them on PNHAP
Trang 37rollback tran end
end go
_ Xây dựng trigger khi xoá dữ liệu trong bảng PNHAP với têntg_PNHAP_XOA Trong đó cWn thực hiện hành động: Tự động xoá các dòngdữ liệu liên quan bên bảng CTPNHAP
Create trigger tg_PNHAP_Xoa on PNHAP for delete
as begin
declare @SoPN char(4)
select @SoPN =SoPN from deleted
if exists(select SoPN from CTPNHAP where SoPN=@SoPN)
delete from CTPNHAP where SoPN=@SoPN end
_ Xây dựng trigger khi sửa dữ liệu trong bảng PNHAP với têntg_PNHAP_SUA Trong đó cWn kiểm tra các ràng buộc dữ liệu phải hợp lệ:
+ Không cho phép sửa đổi giá trị của các cột: số nhập hàng, số đặthàng
+ Kiểm tra giá trị mới của cột ngày nhập hàng phải sau ngày đặt hàng
Create trigger tg_PNHAP_Sua on PNHAP for update
as begin
declare @ngaynhap datetime,@ngaydathang datetime if (update (SoPN) or update(SoDH))
Trang 38_ Xây dựng trigger khi thêm mới dữ liệu vào bảng CTPNHAP với têntg_CTPNHAP_Them Trong đó cWn kiểm tra các ràng buộc dữ liệu: Số lượngnhập hàng <= (Số lượng đặt – Tổng số lượng đã nhập vào trước đó)tg
Create trigger tg_CTPNHAP_Them on CTPNHAP for insert
as begin
declare @SoPN char(4), @MaHH char(4), @Tongnhap int, @SoDH char(4), @SlDat int
select @SoPN=SoPN, @MaHH=MaHH from inserted select @SoDH=SoDH from PNHAP where SoPN=@SoPN select @SlDat=SlDat from CTDONDH where SoDH=@SoDH and MaHH=@MaHH
select @Tongnhap=sum(SlNhap) from CTPNHAP,PNHAP
PNHAP.SoPN=CTPNHAP.SoPN
Trang 39if (@Tongnhap>(select SlDat from CTDONDH where SoDH=@SoDH and MaHH=@MaHH))
_ Tạo thêm cột Thanhtien cho bảng CTPNHAP, sau đó tạo trigger cậpnhật giá trị tự động cho cột Thanhtien
Alter table CTPNHAP add Thanhtien money Create Trigger Capnhat_Thanhtien on CTPNHAP
For Insert, Update As
Declare @MaHH char(4), @SoPn char(4)
Select @MaHH=MaHH, @SoPN=SoPN from Inserted Update CTPNHAP set ThanhTien = SlNhap*DgNhap where (MaHH=@MaHH) and (SoPN=@SoPN)
end go
_ Xây dựng trigger khi xoá dữ liệu trong bảng CTPNHAP với têntg_CTPNHAP_Xoa Trong đó cWn kiểm tra các ràng buộc dữ liệu hợp lệ:Không thể xóa nếu số phiếu nhập có tồn tại trong bảng phiếu nhập
Create trigger tg_CTPNHAP_Xoa on CTPNHAP
Trang 40select @SoPN=SoPN from deleted
select @dem=COUNT(SoPN) from PNHAP where
_ Sửa Trigger để giá trị cột ThanhTien = SlNhap*DgNhap*2:
Alter Trigger Capnhat_Thanhtien on CTPNHAP For Insert, Update
As begin
Declare @MaHH char(4), @SoPN char(4)
Select @MaHH=MaHH, @SoPN=SoPN from Inserted Update CTPNHAP
(MaHH=@MaHH) and (SoPN=@SoPN) end
go h.
Bảng PXUAT
_ Xây dựng trigger khi thêm dữ liệu trong bảng PXUAT với têntg_PXUAT_Them Trong đó cWn kiểm tra các ràng buộc dữ liệu hợp lệ:MaKH phải tồn tại trong bảng khách hàng
Create trigger tg_PXUAT_Them on PXUAT for insert
as
Trang 41declare @MaKH char(3), @Loi char(200)
if not exists(select *from inserted,KHACHHANG where
_ Xây dựng trigger khi xoá dữ liệu trong bảng PXUAT với têntg_PXUAT_XOA Trong đó cWn thực hiện hành động: Tự động xoá các dòngdữ liệu liên quan bên bảng CTPXUAT
Create trigger tg_PXUAT_Xoa on PXUAT for delete
as begin
declare @SoPX char(4)
select @SoPX=SoPX from deleted
if exists(select SoPX from CTPXUAT where SoPX=@SoPX)
delete from CTPXUAT where SoPX=@SoPX end
_ Xây dựng trigger khi sửa dữ liệu trong bảng PXUAT với têntg_PXUAT_Sua Trong đó cWn thực hiện hành động: Không cho phép sửagiá trị của cột SoPX
Create trigger tg_PXUAT_Sua on PXUAT for update
as
Trang 42_ Xây dựng trigger khi thêm dữ liệu trong bảng CTPXUAT với têntg_CTPXUAT_Them Trong đó cWn kiểm tra các ràng buộc dữ liệu hợp lệ:SoPX phải tồn tại trong bảng phiếu xuất
Create trigger tg_CTPXUAT_Them on CTPXUAT for insert
as begin
declare @SoPX char(4), @Loi char(200)
if not exists(select *from inserted,PXUAT where
_ Xây dựng trigger khi thêm dữ liệu trong bảng CTPXUAT với têntg_CTPXUAT_Them Trong đó cWn kiểm tra các ràng buộc dữ liệu hợp lệ: Sốlượng xuất < Số lượng cuối trong bảng tồn kho
Create trigger tg_CTPXUAT_Them2 on CTPXUAT for insert
as begin