Bài tập lớn - Thiết kế và quản trị cơ sở dữ liệu cho cửa hàng tạp hóa | Học viện Nông nghiệp Việt Nam

Thiết kế và quản trị cơ sở dữ liệu cho cửa hàng tạp hóa nó bao gồm việc thiết kế các bảng dữ liệu, mô hình quan hệ, và lệnh T-SQL để tạo cơ sở dữ liệu và quản lý dữ liệu trong cửa hàng.

Cán bộ coi thi, chấm thi 1
(Ký ghi họ tên)
Cán bộ coi thi, chấm thi 2
(Ký ghi họ n)
KHOA CÔNG NGH THÔNG TIN
BỘ MÔN NG NGHỆ PHẦN MM
BÀI TẬP LN
HỌC PHẦN: HỆ QUẢN TRỊ SỞ DỮ LIỆU
ĐỀ TÀI: THIẾT KẾ QUẢN TRỊ SỞ DỮ LIỆU
CHO CỬA HÀNG TẠP HÓA
Nhóm sinh viên thực hin:
STT
Họ tên
SV
lớp
Điểm
NỘI - 2021
1
NHẬN XÉT CỦA GIÁO VIÊN
2
MỤC LC
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 TN ................................................................................................ 7
PHẦN 2: THIẾT KẾ QUẢN TRỊ SỞ DỮ LIỆU ................................................................ 7
A-Thiết kế sở dữ liệu ............................................................................................................... 7
I.
Các bảng dữ liu .................................................................................................................... 7
II.
hình quan hệ ................................................................................................................ 11
B-C ài đặt sở dữ liệu ............................................................................................................... 11
I-
Tạo bảng .............................................................................................................................. 11
1.
Tạo CSDL của cửa hàng .................................................................................................. 11
2.
Tạo bảng Hàng Hóa ......................................................................................................... 12
3.
Tạo bảng Nhà Cung Cp ................................................................................................. 12
4.
Tạo bảng Đơn Đặt Hàng .................................................................................................. 13
5.
Tạo bảng Chi Tiết Đơn Đặt Hàng ................................................................................... 13
6.
Tạo bảng Phiếu Nhập ...................................................................................................... 14
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
10.
Tạo bảng Tồn Kho ......................................................................................................... 15
11.
Tạo bảng Khách Hàng ................................................................................................... 16
II-
Chèn dữ liệu vào bng ....................................................................................................... 16
1.
Bảng Hàng Hóa................................................................................................................ 16
2.
Bảng Nhà Cung Cp ........................................................................................................ 17
3.
Bảng Đơn Đặt Hàng......................................................................................................... 17
4.
Bảng Chi Tiết Đơn Đặt Hàng .......................................................................................... 17
5.
Bảng Phiếu Nhập ............................................................................................................. 18
6.
Bảng Chi Tiết Phiếu Nhập ............................................................................................... 18
7.
Bảng Phiếu Xuất .............................................................................................................. 18
8.
Bảng Chi Tiết Phiếu Xuất ................................................................................................ 18
9.
Bảng Khách Hàng............................................................................................................ 19
III-
Các lệnh T_SQL ............................................................................................................... 19
3
1.
Thiết kế view .................................................................................................................... 19
2.
Trigger ............................................................................................................................. 26
a.
Bảng HANGHOA .......................................................................................................... 26
b.
Bảng NCC ..................................................................................................................... 29
c.
Bảng KHACHHANG .................................................................................................... 30
d.
Bảng DONDH ............................................................................................................... 32
e.
Bảng CTDONDH .......................................................................................................... 34
f.
Bảng PNHAP ................................................................................................................. 36
g.
Bảng CTPNHAP ........................................................................................................... 38
h.
Bảng PXUAT ................................................................................................................ 40
i.
Bảng CTPXUAT ............................................................................................................ 42
k.Bảng TONKHO............................................................................................................. 44
PHẦN 3: KẾT LUẬN ĐỀ XUẤT ............................................................................................ 47
1.
Trình bày tóm tắt nhng nội dung nhóm đã m đưc ................................................................ 47
2.
Ưu điểm .................................................................................................................................... 47
3.
Khuyết điểm ............................................................................................................................. 47
4.
Hướng phát triển ....................................................................................................................... 47
TÀI LIỆU THAM KHO ............................................................................................................. 48
4
BẢNG PHÂN CÔNG NHIỆM VỤ
STT
Sinh viên thực hiện
Họ tên
sinh viên
1
2
3
4
5
5
DANH MỤC BẢ
Bảng 1. 1: HANGHOA ............................................................................ 7
Bảng 1. 2: NCC ........................................................................................ 8
Bảng 1. 3: DONDH .................................................................................. 8
Bảng 1. 4: CTDONDH ............................................................................. 8
Bảng 1. 5: PNHAP ................................................................................... 8
Bảng 1. 6: CTPNHAP .............................................................................. 9
Bảng 1. 7: PXUAT ................................................................................... 9
Bảng 1. 8: CTPXUAT .............................................................................. 9
Bảng 1. 9: TONKHO ............................................................................. 10
Bảng 1. 10: KHACHHANG ................................................................... 10
Bảng 1. 11: Ràng buộc ka ngoi ......................................................... 11
YBảng 2. 1: Mô hình quan hệ quản n hàng ...................................... 11
6
PHẦN 1: GIỚI THIỆU BÀI TOÁN
- Giới thiệu đơn vkhảo sát: Cửa hàng tạp a Nghiệm Thu 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 nhưng do q
nhiều sản phẩm nên không thể quản được hết thường xuyên xảy ra tình trạng
không kịp thời
- Các đối ợng sử dụng 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ế quản trị sở dữ liu:
+ Lưu trữ các khách mua hàng thân thiết đ chương trình
khuyến mãi thích hợp để kích cầu thtrường, n cung cấp, các hóa đơn xuất
nhậpng hóa
+ Có thông báo khi mặt hàng tồn kho đạt số lượngo độ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Ế QUẢN TRỊ SỞ DỮ LIỆU
A-Thiết kế sở dữ liệu
I.Các bng dữ liệu
Tên
Ý nghĩa
Kiểu
Độ rộng
MaHH
Mã hàng hóa
Char
4
TenHH
Tên hàng hóa
nVarchar
100
DvTinh
Đơn vị tính
nVarchar
10
PhanTram
Tỷ lệ phần trăm
Real
Bảng 1. 1: HANGHOA
7
Tên
Ý nghĩa
Kiểu
Độ rộng
SoDH
Số đơn ng
Char
4
NgayDH
Ngày đặtng
Datetime
MaNCC
Mã nhà cung cấp
Char
3
Bảng 1. 2: NCC
Tên
Ý nghĩa
Kiểu
Độ rộng
SoDH
Số đơn ng
Char
4
NgayDH
Ngày đặtng
Datetime
MaNCC
Mã nhà cung cấp
Char
3
Bảng 1. 3: DONDH
Tên
Ý nghĩa
Kiểu
Độ rộng
SoDH
Số đơn ng
Char
4
MaHH
ng hóa
Char
4
SlDat
Số lượng đặt
Int
Bảng 1. 4: CTDONDH
Tên
Ý nghĩa
Kiểu
Độ rộng
SoPN
Số phiếu nhập ng
Char
4
Ngaynhap
Ngày nhậpng
Datetime
SoDH
Số đơn đặt ng
Char
4
Bảng 1. 5: PNHAP
8
Tên
Ý nghĩa
Kiểu
Độ rộng
SoPN
Số phiếu nhập ng
Char
4
MaHH
Mã hàng hóa
Char
4
SlNhap
Số lượng nhập ng
Int
DgNhap
Đơn giá nhập ng
Money
Bảng 1. 6: CTPNHAP
Tên
Ý nghĩa
Kiểu
Độ rộng
SoPX
Số phiếu xuất ng
Char
4
Ngayxuat
Ngày xuất hàng
Datetime
MaKH
khách hàng
char
3
Bảng 1. 7: PXUAT
Tên
Ý nghĩa
Kiểu
Độ rộng
SoPX
Số phiếu xuất ng
Char
4
MaHH
ng hóa
Char
4
SlXuat
Số ợng xuất hàng
Int
DgXuat
Đơn giá xuấtng
Money
Bảng 1. 8: CTPXUAT
Tên
Ý nghĩa
Kiểu
Độ rộng
Namthang
Năm tháng
Char
6
9
MaHH
ng hóa
Char
4
SlDau
Số lượng tồn đầu kỳ
Int
TongSLN
Tổng số lượng nhập
trong kỳ
Int
TongSLX
Tống số lượng xuất
trong kỳ
Int
SlCuoi
Số lượng tồn cuối kỳ
Int
Bảng 1. 9: TONKHO
Tên
Ý nghĩa
Kiểu
Độ rộng
MaKH
khách hàng
Char
3
TenKH
Tên khách hàng
nVarchar
100
Diachi
Địa chỉ
nVarchar
100
Dienthoai
Điện thoại
Varchar
20
Bảng 1. 10: KHACHHANG
STT
Bảng
Cột
Bảng tham chiếu
1
DONDH
MaNCC
NHACC
2
CTDONDH
MaHH
HANGHOA
3
CTDONDH
SoDH
DONDH
10
4
PNHAP
SoDH
DONDH
5
CTPNHAP
MaHH
HANGHOA
6
CTPNHAP
SoPN
PNHAP
7
CTPXUAT
MaHH
HANGHOA
8
CTPXUAT
SoPX
PXUAT
9
TONKHO
MaHH
HANGHOA
10
PXUAT
MaKH
KHACHHANG
Bảng 1. 11: Ràng buộc khóa ngoại
II. hình quan hệ
Bảng 2. 1: hình quan hệ quản lí bán hàng
B-Cài đặt sở dữ liệu
I-Tạo bảng
1.
Tạo CSDL của cửa hàng
CREATE DATABASE QLCuaHang
ON PRIMARY
(NAME=QLCuaHang_Data,
FILENAME='D:\QLCuahang_Data.mdf',
11
SIZE=100MB,
MAXSIZE=200MB,
FILEGROWTH=10MB)
LOG ON
(NAME=QLCuaHang_Log,
FILENAME='D:\QLCuahang_Log.ldf',
SIZE=30MB,
MAXSIZE=UNLIMITED,
FILEGROWTH=5MB)
2.
Tạo bảng Hàng Hóa
create table HANGHOA
(
MaHH char(4) not null,
TenHH nvarchar(100) not null,
DvTinh nvarchar(10) null,
PhanTram real default 20,
unique(TenHH),
check(Phantram>=0 and PhanTram<=100),
primary key(MaHH)
)
3.
Tạo bng Nhà Cung Cấp
create table NCC
(
MaNCC char(3) not null,
TenNCC nvarchar(100) not null,
Diachi nvarchar(100) not null,
Dienthoai varchar(20) default 'chưa có',
12
primary key(MaNCC),
unique(TenNCC,Diachi),
)
4.
Tạo bảng Đơn Đặt Hàng
create table DONDH
(
SoDH 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,
primary key(SoDH,MaHH),
check(SlDat>0),
foreign key(MaHH)
references HANGHOA(MaHH),
foreign key(SoDH)
references DONDH(SoDH)
)
6.
Tạo bng Phiếu Nhập
create table PNHAP
13
(
SoPN char(4) not null,
Ngaynhap datetime default getdate(),
SoDH char(4) null,
primary key(SoPN),
foreign key(SoDH)
references DONDH(SoDH)
)
7.
Tạo bng 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,
primary key(SoPN,MaHH),
check(SlNhap>0 and DgNhap>0),
foreign key(MaHH)
references HANGHOA(MaHH),
foreign key(SoPN)
references PNHAP(SoPN)
)
8.
Tạo bng Phiếu Xuất
create table PXUAT
(
SoPX char(4) not null,
Ngayxuat datetime default getdate(),
MaKH char(3) null,
14
primary 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),
primary key(SoPX,MaHH),
foreign key(MaHH)
references HANGHOA(MaHH),
foreign key(SoPX)
references PXUAT(SoPX)
)
10.
Tạo bảng Tồn Kho
create table TONKHO
(
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)
15
references HANGHOA(MaHH)
)
11.
Tạo bng Khách Hàng
create table KHACHHANG
(
MaKH char(3) not null,
TenKH nvarchar(100) not null,
Diachi nvarchar(100) not null,
Dienthoai varchar(20) default 'chưa có',
primary key(MaKH),
unique(TenKH,Diachi),
)
II- Chèn dữ liệu vào bảng
1.
Bảng Hàng Hóa
16
2.
Bảng Nhà Cung Cấp
3.
Bảng Đơn Đặt Hàng
4.
Bảng Chi Tiết Đơn Đặt Hàng
17
5.
Bảng Phiếu Nhập
6.
Bảng Chi Tiết Phiếu Nhập
7.
Bảng Phiếu Xuất
8.
Bảng Chi Tiết Phiếu Xuất
18
9.
Bảng Khách Hàng
III- c lệnh T_SQL
1.
Thiết kế view
1.1.
Thiết kế view vw_CtietNhapXuat. Hiển th chi tiết nhập xuất của
ng hóa ,các thông tin hiển thị gồ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 ca
phiếu xuất X003, các thông tin hiển thị gồm: vâ
tư, số lượng xuất, đơn
giá xuất, ngày xuất, tên khách hàng.
19
1.3.
Thống tình hình nhập hàng đặt hàng của hàng hóa chi tiết
với: Số đơn hàng, hàng hóa, Tên hàng hóa,Tổng toàn bộ số lượng đặt
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:
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:
ng hóa,Tên hàng hóa,đơn vị nh giá mua
20
1.6.
Hiển thị các thông tin chi tiết phiếu nhâp
trong ngày 02/11/2021,
các thông tin hiển thị gồm: Số phiếu nhâp, ng hóa, tên hàng hóa, số
lượng nhâp, đơn giá nhâp,ny nhập.
1.7.
Hiển thị danh sách hàng a, tên hàng hóa của các hàng hóa
được nhâp
vào kho nhưng chưa được xuất lần o.
21
1.8.
Tìm phần trăm số lượng đã đặt hàng của từng vậ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ư, tng số lượng đặt theo vật tư, tổng toàn bộ số lượng đặt, phn trăm.
1.9.
Thống số lượng nhập của c mặt ng hóa trong từng năm
tháng tương ứng(không sử dng tồn kho),thông tin hiển thị gồm: hàng
a,Tên hàng hóa,Tổng số lượng nhập,thời gian nhập hàng.
22
1.10.
Thống số lượng xuất của c mặt hàng hóa trong từng năm
tháng tương ứng(không sử dng tồn kho),thông tin hiển thị gồm: hàng
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 số đơn đặt hàng cao nhất ,
thông tin hiển thị gồm: nhà cung cấp,Tên nhà cung cấp,Số lần đã đặt
hàng.
1.12.
Thống số lần mua hàng của khách,thông tin hiển thị :Mã
khách hàng,Tên khách hànga chỉ,Số điện thoại số lần đã mua cửa
hàng.
23
1.13.
Hiển thị danh sách các khách hàng gồm các thông tin khách
ng, tên khách hàng, địa ch của những khách hàng chưa số điện thoại.
1.14.
Thống số phiếu xuất theo tháng ,thông tin hiển th gồm năm
xut, tháng xuất tổng số phiếu xuất theo tháng
24
1.15.
Thống số phiếu nhập theo tng ,thông tin hiển th gồm năm
xut, tháng xuất tổng số phiếu nhập theo tháng
1.16.
In ra danh sách các hàng 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
25
1.18.
Hiển thị hàng hóa (MaHH, TenHH) tổng số lượng bán ra thấp
nhất trong năm 2021.
2.
Trigger
a.
Bảng HANGHOA:
_ Xây dựng trigger thêm mới dữ liệu vào bảng HANGHOA với n
tg_HANGHOA_Them. Trong đó cần kiểm tra ràng buộc dữ liệu hợp lệ: Dữ
liệu thêm vào phải 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
26
end
go
begin
end
print N'Lỗi trùng tên hàng hóa!'
rollback tran
_ Xây dựng trigger xóa dữ liệu trong bảng HANGHOA với tên
tg_HANGHOA_Xoa. Trong đó cần kiểm tra ng buộc dữ liệu: hàng hóa
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
MaHH=@MaHH
if @dem>=2
begin
print N'Dữ liệu về hàng hóa này đang được sử
dụng. Không thể xóa!'
end
rollback tran
MaHH=@MaHH
select @dem=COUNT(MaHH) from CTPNHAP where
if @dem>=2
begin
dụng. Không thể xóa!'
print N'Dữ liệu về hàng hóa này đang được sử
rollback tran
27
MaHH=@MaHH
end
select @dem=COUNT(MaHH) from CTDONDH where
if @dem>=2
begin
dụng. Không thể xóa!'
end
go
end
print N'Dữ liệu về hàng hóa này đang được sử
rollback tran
_ Xây dựng trigger sửa dữ liệu trong bảng HANGHOA với tên
tg_HANGHOA_Sua. Trong đó cần kiểm tra điều kiện ràng buộc dữ liệu hợp
lệ: Dữ liệu đó duy nhất
Create trigger tg_HANGHOA_Sua on HANGHOA
for update
as
begin
declare @TenHH nvarchar(100), @dem int
select @TenHH=TenHH from inserted
select
@dem=COUNT(TenHH)
from
HANGHOA
where
TenHH=@TenHH
end
go
if @dem>=2
begin
end
print N'Lỗi trùng tên hàng hóa!'
rollback tran
28
b.
Bảng NCC
_ Xây dựng trigger sửa dữ liệu trong bảng NCC với tên tg_NCC_Them.
Trong đó cn kiểm tra điều kiện ràng buộc dữ liệu hp lệ: Dữ liệu đó duy
nhất
Create trigger tg_NCC_Them on NCC
for insert
as
begin
declare @TenNCC nvarchar(100), @dem int
select @TenNCC=TenNCC from inserted
select @dem=COUNT(TenNCC) from NCC where
TenNCC=@TenNCC
if @dem>=2
begin
end
print N'Lỗi trùng tên nhà cung cấp!'
rollback tran
end
go
_ Xây dựng trigger xóa dữ liệu trong bảng NCC với tên tg_NCC_Xoa.
Trong đó cần kiểm tra điu kiện ràng buộc dữ liệu hợp lệ: nhà cung cấp
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
29
if @dem>=2
begin
print N'Dữ liệu về nhà cung cấp này đang được
sử dụng. Kng thể xóa!'
end
go
end
rollback tran
_ Xây dựng trigger sửa dữ liệu trong bảng NCC với tên tg_NCC_Sua.
Trong đó cần kiểm tra điều kiện ràng buộc dữ liệu hợp lệ: Dữ liệu đó duy
nhất
Create trigger tg_NCC_Sua on NCC
for update
as
begin
declare @TenNCC nvarchar(100), @dem int
select @TenNCC=TenNCC from inserted
select @dem=COUNT(TenNCC) from NCC where
TenNCC=@TenNCC
if @dem>=2
begin
end
print N'Lỗi trùng tên nhà cung cấp!'
rollback tran
end
go
c.
Bảng KHACHHANG
_ Xây dựng trigger sửa dữ liệu trong bảng KHACHANG với tên
tg_KHACHHANG_Them. Trong đó cần kiểm tra điều kiện ràng buộc dữ liệu
hợp lệ: Dữ liệu đó duy nhất
30
Create 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
TenKH=@TenKH
end
go
if @dem>=2
begin
end
print N'Lỗi trùng tên khách hàng!'
rollback tran
_ Xây dựng trigger xóa dữ liu trong bảng KHACHHANG với tên
tg_KHACHHANG_Xoa. Trong đó cần kiểm tra điều kiện ràng buộc dữ liệu
hợp lệ: 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
MaKH=@MaKH
if @dem>=2
begin
print N'Dữ liệu về khách ng này đang đưc
sử dụng. Kng thể xóa!'
31
end
go
end
rollback tran
_ Xây dựng trigger sửa dữ liệu trong bảng KHACHANG với tên
tg_KHACHHANG_Sua. Trong đó cần kiểm tra điều kiện ràng buộc dữ liệu
hợp lệ: Dữ liệu đó duy nhất
Create trigger tg_KHACHHANG_Sua on KHACHHANG
for update
as
begin
declare @TenKH nvarchar(100), @dem int
select @TenKH=TenKH from inserted
select @dem=COUNT(TenKH) from KHACHHANG where
TenKH=@TenKH
end
go
if @dem>=2
begin
end
print N'Lỗi trùng tên khách hàng!'
rollback tran
d.
Bảng DONDH
_ Xây dựng trigger sửa dữ liệu trong bảng DONDH với tên
tg_DONDH_Them. Trong đó cần kiểm tra điều kiện ràng buộc dữ liệu hợp
lệ: Dữ liệu đó duy nhất
Create trigger tg_DONDH_Them on KHACHHANG
for insert
as
begin
32
SoDH=@SoDH
declare @SoDH char(4), @dem int
select @SoDH=SoDH from inserted
select @dem=COUNT(SoDH) from DONDH where
if @dem>=2
begin
end
go
end
print N'Lỗi trùng số đơn hàng!'
rollback tran
_ Tạo Trigger kiểm tra việc xóa dữ liệu cho bảng DONDH với tên
tg_DONDH_Xoa. Trong đó cần kiểm tra các ràng buộc dữ liệu hợp lệ:
+Nếu đã ít nhất một phiếu nhập hàng cho đơn đt hàng đó thì thông
báo không thể xóa đơn đặt hàng
+Nếu chưa phiếu nhập nào thì tự đng xóa các dữ liệu liên quan
bên bảng CTDONDH
Create trigger tg_DONDH_Xoa on DONDH
for delete
as
begin
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
33
Deleted)
end
go
else
end
delete CTDONDH where SoDH in (select SoDH from
_ Tạo trigger sửa dữ liệu cho bảng DONDH với tên tg_DONDH_Sua.
Trong đó cần 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 liên quan tới nhiều bảng khác
Create trigger tg_DONDH_Sua on DONDH
for update
as
begin
declare @Loi char(200)
if update(SoDH) or update(MaNCC)
begin
end
go
end
rollback tran
set @Loi= N'Không được sửa SoDH/MaNCC'
return
e.
Bảng CTDONDH
_ Xây dựng trigger thêm dữ liệu trong bảng CTDONDH với tên
tg_DONDH_Them. Trong đó cần kiểm tra các ràng buộc dữ liệu hợp lệ:
SoDH tồn tại trong bảng DONDH
Create trigger tg_CTDONDH_Them on CTDONDH
for insert
as
34
begin
declare @SoDH char(4),@Loi char(200)
if not exists (select *from inserted,DONDH where
inserted.SoDH=DONDh.SoDH)
begin
end
go
end
rollback tran
set @Loi= N'S đơn đặt hàng không tồn tại!'
_ Xây dựng trigger xóa dữ liệu trong bảng CTDONDH với tên
tg_DONDH_Xóa. Trong đó cần 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 ti 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
from deleted)
thể xóa!'
end
go
set @Loi=N'Số đơn hàng này đang được dử dng. Kng
rollback tran
_Xây dựng trigger sửa dữ liệu trong bảng CTDONDH với n
tg_DONDH_Sua. Trong đó cần kiểm tra các ràng buộc dữ liệu hợp lệ:
Không được sửa SoDH liên quan đến nhiều bảng
Create trigger tg_CTDONDH_Sua on CTDONDH
for update
35
as
begin
declare @Loi char(200)
if update(SoDH)
begin
quan đến nhiều bảng khác!'
end
end
go
f.
Bảng PNHAP
rollback tran
set @Loi= N'Kng được sửa SoDH liên
return
_ y dựng trigger khi thêm mới dữ liệu vào bảng PNHAP với tên
tg_PNHAP_Them. Trong đó cần kiểm tra c ràng buộc dữ liệu phải hợp lệ:
Ngày nhập ng phải sau ngày đặt hàng
Create trigger tg_PNHAP_Them on PNHAP
for insert
as
datetime
inserted
begin
declare @Ngaynhap datetime, @SoDH char(4), @NgayDH
select
@Ngaynhap=Ngaynhap,@SoDH=SoDH
from
select
@NgayDH=NgayDH
from
DONDDH
where
SoDH=@SoDH
if @Ngaynhap<=@NgayDH
begin
print N'Lỗi: Ngày nhập hàng phải sau ngày
'+convert(char(10),@NgayDH,103)
36
end
go
end
rollback tran
_ Xây dng trigger khi x dữ liệu trong bảng PNHAP với tên
tg_PNHAP_XOA. Trong đó cần thực hiện hành động: Tự động x các dòng
dữ 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
go
_ Xây dựng trigger khi sửa dữ liệu trong bng PNHAP với tên
tg_PNHAP_SUA. Trong đó cn 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ố đặt
hàng
+ Kiểm tra giá trị mới của cột ny nhập hàng phải sau ny đặt ng
Create trigger tg_PNHAP_Sua on PNHAP
for update
as
begin
declare @ngaynhap datetime,@ngaydathang datetime
if (update (SoPN) or update(SoDH))
37
nhap',16,1)
rollback tran
Raiserror('Khong duoc sua So don dat hang hoac So phieu
return
select @ngaydathang=NgayDH from deleted,DonDH where
deleted.SoDH=DonDH.SoDH
select @ngaynhap=Ngaynhap from inserted
if @ngaynhap<@ngaydathang
rollback tran
Raiserror('Ngay nhap hang khong duoc nho hon ngay dat
hang',16,1)
return
end
go
g.
Bảng CTPNHAP
_ Xây dựng trigger khi thêm mới dữ liệu o bảng CTPNHAP với tên
tg_CTPNHAP_Them. Trong đó cần kiểm tra các ràng buộc dữ liệu: Số lượng
nhậ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
where MaHH=@MaHH and SoDH=@SoDH and
PNHAP.SoPN=CTPNHAP.SoPN
38
if (@Tongnhap>(select SlDat from CTDONDH where
SoDH=@SoDH and MaHH=@MaHH))
begin
lượng đặt ng!'
end
go
end
print N'Lỗi: Tổng số lượng đã nhập vượt quá số
rollback tran
_ To thêm cột Thanhtien cho bảng CTPNHAP, sau đó tạo trigger cập
nhậ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
begin
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ên
tg_CTPNHAP_Xoa. Trong đó cần 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 tồn tại trong bảng phiếu nhập
Create trigger tg_CTPNHAP_Xoa on CTPNHAP
for delete
as
begin
declare @SoPN char(4), @dem int
39
@SoPN=SoPN
select @SoPN=SoPN from deleted
select @dem=COUNT(SoPN) from PNHAP where
if @dem>=2
begin
xóa!'
end
go
end
print N'Dữ liệu đang được sử dụng. Không thể
rollback tran
_ Sửa Trigger để g 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
set ThanhTien=SlNhap*DgNhap*2 where
(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 n
tg_PXUAT_Them. Trong đó cần 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
40
begin
declare @MaKH char(3), @Loi char(200)
if
not
exists(select
*from
inserted,KHACHHANG
where
inserted.MaKH=KHACHHANG.MaKH)
begin
end
go
end
rollback tran
set @Loi=N'Mã khách hàng này không tồn tại!'
_ Xây dựng trigger khi xoá dữ liệu trong bảng PXUAT với n
tg_PXUAT_XOA. Trong đó cn thực hiện hành động: Tự động x các dòng
dữ 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
go
_ Xây dựng trigger khi sửa dữ liệu trong bảng PXUAT với tên
tg_PXUAT_Sua. Trong đó cn thực hiện hành động: Không cho phép sửa
giá trị của cột SoPX
Create trigger tg_PXUAT_Sua on PXUAT
for update
as
41
begin
if (update (SoPX))
rollback tran
Raiserror('Khong duoc sua so phieu xuat',16,1)
end
go
i.
Bảng CTPXUAT
_ Xây dựng trigger khi thêm dữ liệu trong bảng CTPXUAT với n
tg_CTPXUAT_Them. Trong đó cần kiểm tra các 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
inserted.SoPX=PXUAT.SoPX)
begin
end
rollback tran
set @Loi=N'S phiếu xuất này không tồn tại!'
end
go
_ Xây dng trigger khi thêm dữ liệu trong bảng CTPXUAT với n
tg_CTPXUAT_Them. Trong đó cần 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
42
@MaHH=MaHH
declare @SlXuat int, @SlCuoi int, @MaHH char(4)
select @SlXuat=SlXuat, @MaHH=MaHH from inserted
select @SlCuoi=SlCuoi from TONKHO where
if @SlXuat>@SlCuoi
begin
print N'Lỗi: ng trong kho không đủ đthực
hiện giao dịch đơn hàng này. Yêu cầu nhập thêm hàng hóa hàng hóa
'+convert(char(10),@MaHH,103)
rollback tran
end
end
go
_ Xây dựng trigger khi xoá dữ liệu trong bảng CTPNHAP với tên
tg_CTPNHAP_Xoa. Trong đó cần 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 tồn tại trong bảng phiếu nhập
Create trigger tg_CTPXUAT_Xoa on CTPXUAT
for delete
as
begin
declare @SoPX char(4), @dem int
select @SoPX=SoPX from deleted
select @dem=COUNT(SoPX) from PXUAT where
@SoPX=SoPX
xóa!'
if @dem>=2
begin
end
print N'Dữ liệu đang được sử dụng. Không thể
rollback tran
43
end
go
_ Xây dựng trigger khi sửa dữ liệu trong bảng CTPNHAP với tên
tg_CTPNHAP_Sua. Trong đó cần kiểm tra các ràng buộc dữ liệu hợp lệ:
Không cho sửa SoPX
Create trigger tg_CTPXUAT_Sua on CTPXUAT
for update
as
begin
declare @SoPX char(4), @dem int
select @SoPX=SoPX from inserted
select @dem=COUNT(SoPX) from PXUAT where
@SoPX=SoPX
Không thể sa!'
end
go
if @dem>=2
begin
end
print N'D liệu liên quan đến nhiều bảng.
rollback tran
k.Bảng TONKHO
_ Xây dng trigger khi thêm dữ liệu trong bảng TONKHO với n
tg_TONKHO_Them. Trong đó cần kiểm tra các ràng buộc dữ liệu hợp lệ:
MaHH phải tồn tại trong bảng hàng hóa
Create trigger tg_TONKHO_Them on TONKHO
for insert
as
begin
44
declare @MaHH char(4), @Loi char(200)
if not exists(select *from inserted,HANGHOA where
inserted.MaHH=HANGHOA.MaHH)
begin
end
go
end
rollback tran
set @Loi=N'Mã hàng hóa này không tồn ti!'
_ To thêm cột Thanhtien cho bảng TONKHO, sau đó tạo trigger cập
nhật giá trị tự động cho cột Thanhtien
Alter table TONKHO add Thanhtien money
Create Trigger Thanhtien on TONKHO
For Insert, Update
As
begin
Declare @MaHH char(4), @DgNhap money, @SlCuoi int
Select @MaHH=MaHH from Inserted
select @DgNhap=DgNhap from CTPNHAP where
@MaHH=MaHH
@MaHH=MaHH
end
go
select @SlCuoi=SlCuoi from TONKHO where
Update TONKHO set ThanhTien = @SlCuoi*@DgNhap
_ y dựng trigger xóa dữ liệu trong bảng TONKHO với tên
tg_TONKHO_Xoa. Trong đó cần kiểm tra các ràng buộc dữ liệu hp lệ:
MaHH không tồn tại trong bảng HANGHOA
Create trigger tg_TONKHO_Xoa on TONKHO
for delete
45
as
begin
declare @MaHH char(4), @dem int
select @MaHH=MaHH from deleted
select @dem=COUNT(MaHH) from HANGHOA
where
@MaHH=MaHH
xóa!'
if @dem>=2
begin
end
print N'Dữ liệu đang được sử dụng. Không thể
rollback tran
end
go
_ Sửa Trigger để g trị cột ThanhTien = SlNhap*DgNhap*0.5:
Alter Trigger Thanhtien on TONKHO
For Insert, Update
As
begin
Declare @MaHH char(4), @DgNhap money, @SlCuoi int
Select @MaHH=MaHH from Inserted
select @DgNhap=DgNhap from CTPNHAP where
@MaHH=MaHH
@MaHH=MaHH
select @SlCuoi=SlCuoi from TONKHO where
Update TONKHO set ThanhTien =
@SlCuoi*@DgNhap*0.5
end
go
46
PHẦN 3: KẾT LUẬN ĐỀ XUT
1.
Trình bàym tắt những nội dung nhóm đã làm được.
- Giới thiệu bài toán
- Trình bày thiết kế sở dữ liệu
+ Các bảng dữ liệu
+ hình quan hệ dữ liu
- Tạo view
- Tạo trigger
2.
Ưu điểm
H thống quản lý tương đi đầy đủ về các chức năng quản lý
về các khâu xuất nhập hàng,bán hàng, thống được doanh thu và lợi
nhuận
Quản đưc việc xuất nhập kho.
Dễ dàng sử dụng.
3.
Khuyết điểm
Hệ cơ sở dữ liệu chưa triệt để
Bảo mật dữ liệu chưa cao
4.
Hướng phát triển
Tiếp tục nghiên cứu và trau dồi kiến thức để giải quyết các
khuyết điểm trên
Xây dựng bảo mật dữ liệu cao hơn
Đề ra những phương án sao lưu dữ liệu để tránh những
trường hợp sự cố đáng tiếc xảy ra
47
| 1/48

Preview text:

KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
BÀI TẬP LỚN
HỌC PHẦN: HỆ QUẢN TRỊ SỞ DỮ LIỆU
ĐỀ TÀI: THIẾT KẾ QUẢN TRỊ SỞ DỮ LIỆU
CHO CỬA HÀNG TẠP HÓA
Nhóm sinh viên thực hiện: STT Họ tên SV lớp Điểm
Cán bộ coi thi, chấm thi 1
Cán bộ coi thi, chấm thi 2
(Ký ghi họ tên)
(Ký ghi họ tên)
NỘI - 2021 1
NHẬN XÉT CỦA GIÁO VIÊN 2 MỤ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Ế QUẢN TRỊ SỞ DỮ LIỆU ................................................................ 7
A-Thiết kế sở dữ liệu ............................................................................................................... 7
I. Các bảng dữ liệu .................................................................................................................... 7
II. Mô hình quan hệ ................................................................................................................ 11
B-C ài đặt sở dữ liệu ............................................................................................................... 11
I- Tạo bảng .............................................................................................................................. 11
1. Tạo CSDL của cửa hàng .................................................................................................. 11
2. Tạo bảng Hàng Hóa ......................................................................................................... 12
3. Tạo bảng Nhà Cung Cấp ................................................................................................. 12
4. Tạo bảng Đơn Đặt Hàng .................................................................................................. 13
5. Tạo bảng Chi Tiết Đơn Đặt Hàng ................................................................................... 13
6. Tạo bảng Phiếu Nhập ...................................................................................................... 14
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
10. Tạo bảng Tồn Kho ......................................................................................................... 15
11. Tạo bảng Khách Hàng ................................................................................................... 16
II- Chèn dữ liệu vào bảng ....................................................................................................... 16
1. Bảng Hàng Hóa................................................................................................................ 16
2. Bảng Nhà Cung Cấp ........................................................................................................ 17
3. Bảng Đơn Đặt Hàng......................................................................................................... 17
4. Bảng Chi Tiết Đơn Đặt Hàng .......................................................................................... 17
5. Bảng Phiếu Nhập ............................................................................................................. 18
6. Bảng Chi Tiết Phiếu Nhập ............................................................................................... 18
7. Bảng Phiếu Xuất .............................................................................................................. 18
8. Bảng Chi Tiết Phiếu Xuất ................................................................................................ 18
9. Bảng Khách Hàng............................................................................................................ 19
III- Các lệnh T_SQL ............................................................................................................... 19 3
1. Thiết kế view .................................................................................................................... 19
2. Trigger ............................................................................................................................. 26
a. Bảng HANGHOA .......................................................................................................... 26
b. Bảng NCC ..................................................................................................................... 29
c. Bảng KHACHHANG .................................................................................................... 30
d. Bảng DONDH ............................................................................................................... 32
e. Bảng CTDONDH .......................................................................................................... 34
f. Bảng PNHAP ................................................................................................................. 36
g. Bảng CTPNHAP ........................................................................................................... 38
h. Bảng PXUAT ................................................................................................................ 40
i. Bảng CTPXUAT ............................................................................................................ 42
k.Bảng TONKHO............................................................................................................. 44
PHẦN 3: KẾT LUẬN ĐỀ XUẤT ............................................................................................ 47
1. Trình bày tóm tắt những nội dung nhóm đã làm được ................................................................ 47
2. Ưu điểm .................................................................................................................................... 47
3. Khuyết điểm ............................................................................................................................. 47
4. Hướng phát triển ....................................................................................................................... 47
TÀI LIỆU THAM KHẢO ............................................................................................................. 48 4
BẢNG PHÂN CÔNG NHIỆM VỤ
Sinh viên thực hiện STT Nhiệm vụ Họ tên
sinh viên
Khảo sát yêu cầu, thiết kế CSDL (các 1
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 5
DANH MỤC BẢ
Bảng 1. 1: HANGHOA ............................................................................ 7
Bảng 1. 2: NCC ........................................................................................ 8
Bảng 1. 3: DONDH .................................................................................. 8
Bảng 1. 4: CTDONDH ............................................................................. 8
Bảng 1. 5: PNHAP ................................................................................... 8
Bảng 1. 6: CTPNHAP .............................................................................. 9
Bảng 1. 7: PXUAT ................................................................................... 9
Bảng 1. 8: CTPXUAT .............................................................................. 9
Bảng 1. 9: TONKHO ............................................................................. 10
Bảng 1. 10: KHACHHANG ................................................................... 10
Bả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 6
PHẦ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Ế QUẢN TRỊ SỞ DỮ LIỆU
A-Thiết kế sở dữ liệu
I.Các bảng dữ liệu Tên Ý nghĩa Kiểu Độ rộng MaHH Mã hàng hóa Char 4 TenHH Tên hàng hóa nVarchar 100 DvTinh Đơn vị tính nVarchar 10 PhanTram Tỷ lệ phần trăm Real Bảng 1. 1: HANGHOA 7 Tên Ý nghĩa Kiểu Độ rộng SoDH Số đơn hàng Char 4 NgayDH Ngày đặt hàng Datetime MaNCC Mã nhà cung cấp Char 3 Bảng 1. 2: NCC Tên Ý nghĩa Kiểu Độ rộng SoDH Số đơn hàng Char 4 NgayDH Ngày đặt hàng Datetime MaNCC Mã nhà cung cấp Char 3 Bảng 1. 3: DONDH Tên Ý nghĩa Kiểu Độ rộng SoDH Số đơn hàng Char 4 MaHH Mã hàng hóa Char 4 SlDat Số lượng đặt Int Bảng 1. 4: CTDONDH Tên Ý nghĩa Kiểu Độ rộng SoPN Số phiếu nhập hàng Char 4 Ngaynhap Ngày nhập hàng Datetime SoDH Số đơn đặt hàng Char 4 Bảng 1. 5: PNHAP 8 Tên Ý nghĩa Kiểu Độ rộng SoPN Số phiếu nhập hàng Char 4 MaHH Mã hàng hóa Char 4 SlNhap Số lượng nhập hàng Int DgNhap Đơn giá nhập hàng Money Bảng 1. 6: CTPNHAP Tên Ý nghĩa Kiểu Độ rộng SoPX Số phiếu xuất hàng Char 4 Ngayxuat Ngày xuất hàng Datetime MaKH Mã khách hàng char 3 Bảng 1. 7: PXUAT Tên Ý nghĩa Kiểu Độ rộng SoPX Số phiếu xuất hàng Char 4 MaHH Mã hàng hóa Char 4 SlXuat Số lượng xuất hàng Int DgXuat Đơn giá xuất hàng Money Bảng 1. 8: CTPXUAT Tên Ý nghĩa Kiểu Độ rộng Namthang Năm tháng Char 6 9 MaHH Mã hàng hóa Char 4 SlDau
Số lượng tồn đầu kỳ Int TongSLN Tổng số lượng nhập Int trong kỳ TongSLX Tống số lượng xuất Int trong kỳ SlCuoi
Số lượng tồn cuối kỳ Int Bảng 1. 9: TONKHO Tên Ý nghĩa Kiểu Độ rộng MaKH Mã khách hàng Char 3 TenKH Tên khách hàng nVarchar 100 Diachi Địa chỉ nVarchar 100 Dienthoai Điện thoại Varchar 20 Bảng 1. 10: KHACHHANG STT Bảng Cột
Bảng tham chiếu 1 DONDH MaNCC NHACC 2 CTDONDH MaHH HANGHOA 3 CTDONDH SoDH DONDH 10 4 PNHAP SoDH DONDH 5 CTPNHAP MaHH HANGHOA 6 CTPNHAP SoPN PNHAP 7 CTPXUAT MaHH HANGHOA 8 CTPXUAT SoPX PXUAT 9 TONKHO MaHH HANGHOA 10 PXUAT MaKH KHACHHANG
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 sở dữ liệu I-Tạo bảng
1. Tạo CSDL của cửa hàng CREATE DATABASE QLCuaHang ON PRIMARY (NAME=QLCuaHang_Data,
FILENAME='D:\QLCuahang_Data.mdf', 11 SIZE=100MB, MAXSIZE=200MB, FILEGROWTH=10MB) LOG ON (NAME=QLCuaHang_Log,
FILENAME='D:\QLCuahang_Log.ldf', SIZE=30MB, MAXSIZE=UNLIMITED, FILEGROWTH=5MB)
2. Tạo bảng Hàng Hóa create table HANGHOA ( MaHH char(4) not null, TenHH nvarchar(100) not null, DvTinh nvarchar(10) null, PhanTram real default 20, unique(TenHH),
check(Phantram>=0 and PhanTram<=100), primary key(MaHH) )
3. Tạo bảng Nhà Cung Cấp create table NCC ( MaNCC char(3) not null,
TenNCC nvarchar(100) not null,
Diachi nvarchar(100) not null,
Dienthoai varchar(20) default 'chưa có', 12 primary key(MaNCC), unique(TenNCC,Diachi), )
4. Tạo bảng Đơn Đặt Hàng create table DONDH ( SoDH 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, primary key(SoDH,MaHH), check(SlDat>0), foreign key(MaHH) references HANGHOA(MaHH), foreign key(SoDH) references DONDH(SoDH) )
6. Tạo bảng Phiếu Nhập create table PNHAP 13 ( SoPN 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, primary key(SoPN,MaHH),
check(SlNhap>0 and DgNhap>0), foreign key(MaHH) references HANGHOA(MaHH), foreign key(SoPN) references PNHAP(SoPN) )
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, 14 primary 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), primary key(SoPX,MaHH), foreign key(MaHH) references HANGHOA(MaHH), foreign key(SoPX) references PXUAT(SoPX) )
10. Tạo bảng Tồn Kho create table TONKHO ( 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) 15 references HANGHOA(MaHH) )
11. Tạo bảng Khách Hàng create table KHACHHANG ( MaKH char(3) not null, TenKH nvarchar(100) not null,
Diachi nvarchar(100) not null,
Dienthoai varchar(20) default 'chưa có', primary key(MaKH), unique(TenKH,Diachi), )
II- Chèn dữ liệu vào bảng
1. Bảng Hàng Hóa 16
2. Bảng Nhà Cung Cấp
3. Bảng Đơn Đặt Hàng
4. Bảng Chi Tiết Đơn Đặt Hàng 17
5. Bảng Phiếu Nhập
6. Bảng Chi Tiết Phiếu Nhập
7. Bảng Phiếu Xuất
8. Bảng Chi Tiết Phiếu Xuất 18
9. Bảng Khách Hàng
III- Các lệnh T_SQL
1. Thiết kế view
1.1. Thiết kế view vw_CtietNhapXuat. Hiển thị chi tiết nhập xuất của
hàng hóa ,các thông tin hiển thị gồ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
phiếu xuất X003, các thông tin hiển thị gồm: vâṭ tư, số lượng xuất, đơn
giá xuất, ngày xuất, tên khách hàng. 19
1.3. Thống tình hình nhập hàng đặt hàng của hàng hóa chi tiết
với: Số đơn hàng, hàng hóa, Tên hàng hóa,Tổng toàn bộ số lượng đặt
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:
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:
hàng hóa,Tên hàng hóa,đơn vị tính giá mua 20
1.6. Hiển thị các thông tin chi tiết phiếu nhâp ̣ trong ngày 02/11/2021,
các thông tin hiển thị gồm: Số phiếu nhâp, hàng hóa, tên hàng hóa, số
lượng nhâp, đơn giá nhâp,ngày nhập.
1.7. Hiển thị danh sách hàng hóa, tên hàng hóa của các hàng hóa
được nhâp̣ vào kho nhưng chưa được xuất lần nào. 21
1.8. Tìm phần trăm số lượng đã đặt hàng của từng vậ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, phần trăm.
1.9. Thống 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: hàng
hóa,Tên hàng hóa,Tổng số lượng nhập,thời gian nhập hàng. 22
1.10. Thống 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: 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 số đơn đặt hàng cao nhất ,
thông tin hiển thị gồm: nhà cung cấp,Tên nhà cung cấp,Số lần đã đặt hàng.
1.12. Thống số lần 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 số lần đã mua cửa hàng. 23
1.13. Hiển thị danh sách các khách hàng gồm các thông tin khách
hàng, tên khách hàng, địa chỉ của những khách hàng chưa số điện thoại.
1.14. Thống số phiếu xuất theo tháng ,thông tin hiển thị gồm năm
xuất, tháng xuất tổng số phiếu xuất theo tháng 24
1.15. Thống số phiếu nhập theo tháng ,thông tin hiển thị gồm năm
xuất, tháng xuất 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 25
1.18. Hiển thị hàng hóa (MaHH, TenHH) tổng số lượng bán ra thấp
nhất trong năm 2021. 2. Trigger a. Bảng HANGHOA:
_ Xây dựng trigger thêm mới dữ liệu vào bảng HANGHOA với tên
tg_HANGHOA_Them. Trong đó cần kiểm tra ràng buộc dữ liệu hợp lệ: Dữ
liệu thêm vào phải 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 26 begin
print N'Lỗi trùng tên hàng hóa!' rollback tran end end go
_ Xây dựng trigger xóa dữ liệu trong bảng HANGHOA với tên
tg_HANGHOA_Xoa. Trong đó cần kiểm tra ràng buộc dữ liệu: hàng hóa
nà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 MaHH=@MaHH if @dem>=2 begin
print N'Dữ liệu về hàng hóa này đang được sử dụng. Không thể xóa!' rollback tran end
select @dem=COUNT(MaHH) from CTPNHAP where MaHH=@MaHH if @dem>=2 begin
print N'Dữ liệu về hàng hóa này đang được sử dụng. Không thể xóa!' rollback tran 27 end
select @dem=COUNT(MaHH) from CTDONDH where MaHH=@MaHH if @dem>=2 begin
print N'Dữ liệu về hàng hóa này đang được sử dụng. Không thể xóa!' rollback tran end end go
_ Xây dựng trigger sửa dữ liệu trong bảng HANGHOA với tên
tg_HANGHOA_Sua. Trong đó cần kiểm tra điều kiện ràng buộc dữ liệu hợp
lệ: Dữ liệu đó duy nhất
Create trigger tg_HANGHOA_Sua on HANGHOA for update 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 begin
print N'Lỗi trùng tên hàng hóa!' rollback tran end end go 28 b. Bảng NCC
_ Xây dựng trigger sửa dữ liệu trong bảng NCC với tên tg_NCC_Them.
Trong đó cần kiểm tra điều kiện ràng buộc dữ liệu hợp lệ: Dữ liệu đó duy nhất
Create trigger tg_NCC_Them on NCC for insert as begin
declare @TenNCC nvarchar(100), @dem int
select @TenNCC=TenNCC from inserted select @dem=COUNT(TenNCC) from NCC where TenNCC=@TenNCC if @dem>=2 begin
print N'Lỗi trùng tên nhà cung cấp!' rollback tran end end go
_ Xây dựng trigger xóa dữ liệu trong bảng NCC với tên tg_NCC_Xoa.
Trong đó cần kiểm tra điều kiện ràng buộc dữ liệu hợp lệ: nhà cung cấp
nà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 29 if @dem>=2 begin
print N'Dữ liệu về nhà cung cấp này đang được
sử dụng. Không thể xóa!' rollback tran end end go
_ Xây dựng trigger sửa dữ liệu trong bảng NCC với tên tg_NCC_Sua.
Trong đó cần kiểm tra điều kiện ràng buộc dữ liệu hợp lệ: Dữ liệu đó duy nhất
Create trigger tg_NCC_Sua on NCC for update as begin
declare @TenNCC nvarchar(100), @dem int
select @TenNCC=TenNCC from inserted select @dem=COUNT(TenNCC) from NCC where TenNCC=@TenNCC if @dem>=2 begin
print N'Lỗi trùng tên nhà cung cấp!' rollback tran end end go c. Bảng KHACHHANG
_ Xây dựng trigger sửa dữ liệu trong bảng KHACHANG với tên
tg_KHACHHANG_Them. Trong đó cần kiểm tra điều kiện ràng buộc dữ liệu
hợp lệ: Dữ liệu đó duy nhất 30
Create 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 TenKH=@TenKH if @dem>=2 begin
print N'Lỗi trùng tên khách hàng!' rollback tran end end go
_ Xây dựng trigger xóa dữ liệu trong bảng KHACHHANG với tên
tg_KHACHHANG_Xoa. Trong đó cần kiểm tra điều kiện ràng buộc dữ liệu
hợp lệ: 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 MaKH=@MaKH if @dem>=2 begin
print N'Dữ liệu về khách hàng này đang được
sử dụng. Không thể xóa!' 31 rollback tran end end go
_ Xây dựng trigger sửa dữ liệu trong bảng KHACHANG với tên
tg_KHACHHANG_Sua. Trong đó cần kiểm tra điều kiện ràng buộc dữ liệu
hợp lệ: Dữ liệu đó duy nhất
Create trigger tg_KHACHHANG_Sua on KHACHHANG for update as begin
declare @TenKH nvarchar(100), @dem int
select @TenKH=TenKH from inserted
select @dem=COUNT(TenKH) from KHACHHANG where TenKH=@TenKH if @dem>=2 begin
print N'Lỗi trùng tên khách hàng!' rollback tran end end go d. Bảng DONDH
_ Xây dựng trigger sửa dữ liệu trong bảng DONDH với tên
tg_DONDH_Them. Trong đó cần kiểm tra điều kiện ràng buộc dữ liệu hợp
lệ: Dữ liệu đó duy nhất
Create trigger tg_DONDH_Them on KHACHHANG for insert as begin 32
declare @SoDH char(4), @dem int
select @SoDH=SoDH from inserted select @dem=COUNT(SoDH) from DONDH where SoDH=@SoDH if @dem>=2 begin
print N'Lỗi trùng số đơn hàng!' rollback tran end end go
_ Tạo Trigger kiểm tra việc xóa dữ liệu cho bảng DONDH với tên
tg_DONDH_Xoa. Trong đó cần kiểm tra các ràng buộc dữ liệu hợp lệ:
+Nếu đã ít nhất một phiếu nhập hàng cho đơn đặt hàng đó thì thông
báo không thể xóa đơn đặt hàng
+Nếu chưa phiếu nhập nào thì tự động xóa các dữ liệu liên quan
bên bảng CTDONDH
Create trigger tg_DONDH_Xoa on DONDH for delete as begin
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 33 end else
delete CTDONDH where SoDH in (select SoDH from Deleted) end go
_ Tạo trigger sửa dữ liệu cho bảng DONDH với tên tg_DONDH_Sua.
Trong đó cần 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 liên quan tới nhiều bảng khác
Create trigger tg_DONDH_Sua on DONDH for update as begin declare @Loi char(200)
if update(SoDH) or update(MaNCC) begin rollback tran
set @Loi= N'Không được sửa SoDH/MaNCC' return end end go e. Bảng CTDONDH
_ Xây dựng trigger thêm dữ liệu trong bảng CTDONDH với tên
tg_DONDH_Them. Trong đó cần kiểm tra các ràng buộc dữ liệu hợp lệ:
SoDH tồn tại trong bảng DONDH
Create trigger tg_CTDONDH_Them on CTDONDH for insert as 34 begin
declare @SoDH char(4),@Loi char(200)
if not exists (select *from inserted,DONDH where inserted.SoDH=DONDh.SoDH) begin rollback tran
set @Loi= N'Số đơn đặt hàng không tồn tại!' end end go
_ Xây dựng trigger xóa dữ liệu trong bảng CTDONDH với tên
tg_DONDH_Xóa. Trong đó cần 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 from deleted)
set @Loi=N'Số đơn hàng này đang được dử dụng. Không thể xóa!' rollback tran end go
_Xây dựng trigger sửa dữ liệu trong bảng CTDONDH với tên
tg_DONDH_Sua. Trong đó cần kiểm tra các ràng buộc dữ liệu hợp lệ:
Không được sửa SoDH liên quan đến nhiều bảng
Create trigger tg_CTDONDH_Sua on CTDONDH for update 35 as begin declare @Loi char(200) if update(SoDH) begin rollback tran
set @Loi= N'Không được sửa SoDH vì liên
quan đến nhiều bảng khác!' return end end go f. Bảng PNHAP
_ Xây dựng trigger khi thêm mới dữ liệu vào bảng PNHAP với tên
tg_PNHAP_Them. Trong đó cần 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 for insert as begin
declare @Ngaynhap datetime, @SoDH char(4), @NgayDH datetime select @Ngaynhap=Ngaynhap,@SoDH=SoDH from inserted
select @NgayDH=NgayDH from DONDDH where SoDH=@SoDH if @Ngaynhap<=@NgayDH begin
print N'Lỗi: Ngày nhập hàng phải sau ngày
'+convert(char(10),@NgayDH,103) 36 rollback tran end end go
_ Xây dựng trigger khi xoá dữ liệu trong bảng PNHAP với tên
tg_PNHAP_XOA. Trong đó cần thực hiện hành động: Tự động xoá các dòng
dữ 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 go
_ Xây dựng trigger khi sửa dữ liệu trong bảng PNHAP với tên
tg_PNHAP_SUA. Trong đó cần 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ố đặt hà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)) 37 rollback tran
Raiserror('Khong duoc sua So don dat hang hoac So phieu nhap',16,1) return
select @ngaydathang=NgayDH from deleted,DonDH where deleted.SoDH=DonDH.SoDH
select @ngaynhap=Ngaynhap from inserted if @ngaynhap<@ngaydathang rollback tran
Raiserror('Ngay nhap hang khong duoc nho hon ngay dat hang',16,1) return end go g. Bảng CTPNHAP
_ Xây dựng trigger khi thêm mới dữ liệu vào bảng CTPNHAP với tên
tg_CTPNHAP_Them. Trong đó cần kiểm tra các ràng buộc dữ liệu: Số lượng
nhậ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 where MaHH=@MaHH and SoDH=@SoDH and PNHAP.SoPN=CTPNHAP.SoPN 38
if (@Tongnhap>(select SlDat from CTDONDH where SoDH=@SoDH and MaHH=@MaHH)) begin
print N'Lỗi: Tổng số lượng đã nhập vượt quá số lượng đặt hàng!' rollback tran end end go
_ Tạo thêm cột Thanhtien cho bảng CTPNHAP, sau đó tạo trigger cập
nhậ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 begin
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ên
tg_CTPNHAP_Xoa. Trong đó cần 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 tồn tại trong bảng phiếu nhập
Create trigger tg_CTPNHAP_Xoa on CTPNHAP for delete as begin
declare @SoPN char(4), @dem int 39
select @SoPN=SoPN from deleted select @dem=COUNT(SoPN) from PNHAP where @SoPN=SoPN if @dem>=2 begin
print N'Dữ liệu đang được sử dụng. Không thể xóa!' rollback tran end end go
_ 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 set ThanhTien=SlNhap*DgNhap*2 where (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ên
tg_PXUAT_Them. Trong đó cần 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 40 begin
declare @MaKH char(3), @Loi char(200)
if not exists(select *from inserted,KHACHHANG where inserted.MaKH=KHACHHANG.MaKH) begin rollback tran
set @Loi=N'Mã khách hàng này không tồn tại!' end end go
_ Xây dựng trigger khi xoá dữ liệu trong bảng PXUAT với tên
tg_PXUAT_XOA. Trong đó cần thực hiện hành động: Tự động xoá các dòng
dữ 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 go
_ Xây dựng trigger khi sửa dữ liệu trong bảng PXUAT với tên
tg_PXUAT_Sua. Trong đó cần thực hiện hành động: Không cho phép sửa
giá trị của cột SoPX
Create trigger tg_PXUAT_Sua on PXUAT for update as 41 begin if (update (SoPX)) rollback tran
Raiserror('Khong duoc sua so phieu xuat',16,1) end go i. Bảng CTPXUAT
_ Xây dựng trigger khi thêm dữ liệu trong bảng CTPXUAT với tên
tg_CTPXUAT_Them. Trong đó cần 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 inserted.SoPX=PXUAT.SoPX) begin rollback tran
set @Loi=N'Số phiếu xuất này không tồn tại!' end end go
_ Xây dựng trigger khi thêm dữ liệu trong bảng CTPXUAT với tên
tg_CTPXUAT_Them. Trong đó cần 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 42
declare @SlXuat int, @SlCuoi int, @MaHH char(4)
select @SlXuat=SlXuat, @MaHH=MaHH from inserted select @SlCuoi=SlCuoi from TONKHO where @MaHH=MaHH if @SlXuat>@SlCuoi begin
print N'Lỗi: Hàng trong kho không đủ để thực
hiện giao dịch đơn hàng này. Yêu cầu nhập thêm hàng hóa có mã hàng hóa là '+convert(char(10),@MaHH,103) rollback tran end end go
_ Xây dựng trigger khi xoá dữ liệu trong bảng CTPNHAP với tên
tg_CTPNHAP_Xoa. Trong đó cần 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 tồn tại trong bảng phiếu nhập
Create trigger tg_CTPXUAT_Xoa on CTPXUAT for delete as begin
declare @SoPX char(4), @dem int
select @SoPX=SoPX from deleted select @dem=COUNT(SoPX) from PXUAT where @SoPX=SoPX if @dem>=2 begin
print N'Dữ liệu đang được sử dụng. Không thể xóa!' rollback tran end 43 end go
_ Xây dựng trigger khi sửa dữ liệu trong bảng CTPNHAP với tên
tg_CTPNHAP_Sua. Trong đó cần kiểm tra các ràng buộc dữ liệu hợp lệ:
Không cho sửa SoPX
Create trigger tg_CTPXUAT_Sua on CTPXUAT for update as begin
declare @SoPX char(4), @dem int
select @SoPX=SoPX from inserted select @dem=COUNT(SoPX) from PXUAT where @SoPX=SoPX if @dem>=2 begin
print N'Dữ liệu liên quan đến nhiều bảng. Không thể sửa!' rollback tran end end go k.Bảng TONKHO
_ Xây dựng trigger khi thêm dữ liệu trong bảng TONKHO với tên
tg_TONKHO_Them. Trong đó cần kiểm tra các ràng buộc dữ liệu hợp lệ:
MaHH phải tồn tại trong bảng hàng hóa
Create trigger tg_TONKHO_Them on TONKHO for insert as begin 44
declare @MaHH char(4), @Loi char(200)
if not exists(select *from inserted,HANGHOA where inserted.MaHH=HANGHOA.MaHH) begin rollback tran
set @Loi=N'Mã hàng hóa này không tồn tại!' end end go
_ Tạo thêm cột Thanhtien cho bảng TONKHO, sau đó tạo trigger cập
nhật giá trị tự động cho cột Thanhtien
Alter table TONKHO add Thanhtien money
Create Trigger Thanhtien on TONKHO For Insert, Update As begin
Declare @MaHH char(4), @DgNhap money, @SlCuoi int
Select @MaHH=MaHH from Inserted select @DgNhap=DgNhap from CTPNHAP where @MaHH=MaHH select @SlCuoi=SlCuoi from TONKHO where @MaHH=MaHH
Update TONKHO set ThanhTien = @SlCuoi*@DgNhap end go
_ Xây dựng trigger xóa dữ liệu trong bảng TONKHO với tên
tg_TONKHO_Xoa. Trong đó cần kiểm tra các ràng buộc dữ liệu hợp lệ:
MaHH không tồn tại trong bảng HANGHOA
Create trigger tg_TONKHO_Xoa on TONKHO for delete 45 as begin
declare @MaHH char(4), @dem int
select @MaHH=MaHH from deleted
select @dem=COUNT(MaHH) from HANGHOA where @MaHH=MaHH if @dem>=2 begin
print N'Dữ liệu đang được sử dụng. Không thể xóa!' rollback tran end end go
_ Sửa Trigger để giá trị cột ThanhTien = SlNhap*DgNhap*0.5:
Alter Trigger Thanhtien on TONKHO For Insert, Update As begin
Declare @MaHH char(4), @DgNhap money, @SlCuoi int
Select @MaHH=MaHH from Inserted select @DgNhap=DgNhap from CTPNHAP where @MaHH=MaHH select @SlCuoi=SlCuoi from TONKHO where @MaHH=MaHH Update TONKHO set ThanhTien = @SlCuoi*@DgNhap*0.5 end go 46
PHẦN 3: KẾT LUẬN ĐỀ XUẤT
1. Trình bày tóm tắt những nội dung nhóm đã làm được. - Giới thiệu bài toán
- Trình bày thiết kế cơ sở dữ liệu + Các bảng dữ liệu
+ Mô hình quan hệ dữ liệu - Tạo view - Tạo trigger 2. Ưu điểm ✓
Hệ thống quản lý tương đối đầy đủ về các chức năng quản lý
về các khâu xuất nhập hàng,bán hàng, thống kê được doanh thu và lợi nhuận ✓
Quản lý được việc xuất nhập kho. ✓ Dễ dàng sử dụng. 3. Khuyết điểm
❖ Hệ cơ sở dữ liệu chưa triệt để
❖ Bảo mật dữ liệu chưa cao 4. Hướng phát triển ➢
Tiếp tục nghiên cứu và trau dồi kiến thức để giải quyết các khuyết điểm trên ➢
Xây dựng bảo mật dữ liệu cao hơn ➢
Đề ra những phương án sao lưu dữ liệu để tránh những
trường hợp sự cố đáng tiếc xảy ra 47