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.
Môn: Công nghệ phần mềm (HVNN)
Trường: Học viện Nông nghiệp Việt Nam
Thông tin:
Tác giả:
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Ị 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: STT Họ tên Mã SV Mã lớp Điểm
Cán bộ coi thi, chấm thi 1
Cán bộ coi thi, chấm thi 2
(Ký và ghi rõ họ tên)
(Ký và ghi rõ họ tên)
HÀ 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Ế VÀ QUẢN TRỊ CƠ SỞ DỮ LIỆU ................................................................ 7
A-Thiết kế cơ 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 cơ 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 VÀ ĐỀ 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
Mã 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Ế VÀ QUẢN TRỊ CƠ SỞ DỮ LIỆU
A-Thiết kế cơ 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 cơ 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 : 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: 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 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 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, mã 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 mã 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 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 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. 22
1.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ố lần đã đặt hàng.
1.12. Thống kê 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 và 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 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 24
1.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 25
1.18. Hiển thị hàng hóa (MaHH, TenHH) có 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 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 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: Mã 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 đó là 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 đó là 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ệ: Mã 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 đó là 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 đó là 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ệ: 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 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 đó là 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 đó là 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 đã có í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 có 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 vì nó 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 có 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 vì 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 có 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 có 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 VÀ ĐỀ 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