Bên phía nhà cung cấp sẽ gửi đơn chào hàng trong đó có chi tiết các thiết bịbao gồm các thông tin như: tên, loại thiết bị, số lượng, nguồn gốc..... Qua đơnchào hàng của nhà cung cấp thì
Trang 1HỌC VIỆN NÔNG NGHIỆP VIỆT NAM
Khoa Công Nghệ Thông Tin
BÁO CÁO MÔN HỆ QUẢN TRỊ CƠ SỞ DỮ
LIỆU SQL
TÊN ĐỀ TÀI : Tạo một bài toán quản lý kinh doanh cho một doanh nghiệp kinh doanh máy
tính phụ kiện trên chương trình SQL
Giảng viên hướng dẫn Nguyễn Thị Nhâm
Bộ môn Quản trị cơ sở dữ liệu Trương Tuấn Việt Hùng 678046 – L67CNTT
Trần Đức Dũng 678045 – L67CNTT Nguyễn Việt Hoàng 671460 – K67HTTTB
NHÓM 2
Trang 2I Phát biểu bài toán
Khi có yêu cầu nhập thiết bị, hàng hoá: nhân viên tiến hành ghi phiếu yêu
cầu gồm các thông tin chi tiết về thiết bị, hàng hoá và gửi đến cho nhà cung cấp
Bên phía nhà cung cấp sẽ gửi đơn chào hàng trong đó có chi tiết các thiết bị bao
gồm các thông tin như: tên, loại thiết bị, số lượng, nguồn gốc Qua đơn chào
hàng của nhà cung cấp thì cửa hàng sẽ xem xét và đưa ra đơn đặt hàng rồi gửi
đến cho nhà cung cấp, để đáp ứng nhu cầu nhập thiết bị của cửa hàng nhà cung
cấp sẽ vận chuyển thiết bị cho cửa hàng theo hợp đồng mua,bán hàng hóa
lại bàn giao thiết bị (kiêm hóa đơn thanh toán tiền thiết bị) Trước khi nhập hàng
vào kho thì cửa hàng sẽ kiểm tra xem đã đủ thiết bị chưa theo biên bản bàn giao
thiết bị mà nhà cung cấp gửi đến, đồng thời cửa hàng sẽ ghi các thông tin cần
thiết vào số chi và sổ kho Nếu thiết bị nào không đạt yêu cầu thì cửa hàng
lại nhà cung cấp, và yêu cầu nhà cung cấp cấp lại những thiết bị như hợp
Khi khách có nhu cầu mua thiết bị, khách hàng xem thông tin hàng hóa,
tìm kiếm sản phẩm, hàng hoá cần mua Nếu khách hàng chọn được thiết bị cần
mua thì cửa hàng sẽ kiểm tra trong kho, nếu trong kho còn hàng thì nhân
viết phiếu bán hàng Sau đó cửa hàng sẽ tiến hành bàn giao thiết bị cho
gửi đến khách hàng hóa đơn thanh toán, phiếu bảo hành và các giấy tờ liên quan,
Khi khách đã thanh toán tiền thiết bị thì cửa hàng sẽ lập biên lai thu tiền
Trang 3cho khách đồng thời sẽ ghi các thông tin cần thiết vào số thu và số kho Để tiện
cho việc quản lý hệ thống sẽ lưu trữ và quản lý thông tin về nhà cung cấp và thông
tin khách hàng Có thể sửa hoặc xóa khi cần thiết Sau một khoảng thời gian nhất
định nhân viên các bộ phận sẽ tổng hợp thông tin mua, bán, và các thông tin khác
II.Mô hình CSDL
⚫ LoaiHang (MaLoaiHang,TenLoaiHang);
• tblNhaCungCap (MaNCC, TenNhaCC, TenGiaoDich, DiaChi,
DienThoai);
⚫ tblMatHang (MaHang, TenHang, MaNCC, MaLoaiHang,
SoLuong, GiaHang);
⚫ tblKhachHang(MaKH,TenKH,DiaChi,DienThoai);
⚫ tblNhanVien (MaNV, TenNV, DiaChi, DienThoai NgaySinh,GioiTinh, NgayVaoLam, LuongCoBan, PhuCap);
⚫tblNhanVien(MaNV,TenNV,DiaChi,DienThoai,NgaySInh,GIoiTinh,N gayGiaoHang,DiaChiGiaoHang,TongTienHD);
SoLuongMua,MucGiamGia);
⚫ tblDonNhapKho (SoNK, MaNV, NgayNhapHang,TongSoLuong);
⚫ tblChiTietNhapKho (SoNK MaHang GiaNhap, SoLuongNhap)
* tblLoaiHang : Lưu trữ thông tin của MẶT HÀNG
TT Tên Thuộc Tính Kiểu Dữ
Trang 4TT Tên Thuộc Tính Kiểu dữ liệu Ràng Buộc Ghi chú
cấp
cấp
dịch
*tblMATHANG
TT Tên Thuộc Tính Kiểu dữ liệu Ràng Buộc Ghi chú
cấp
hàng đã bán
*tblKhachHang
TT Tên Thuộc Tính Kiểu dữ liệu Ràng buộc Ghi chú
hàng
hàng
*tblĐonDatHang
TT Tên Thuộc
Tính
Kiểu dữ liệu Ràng Buộc Ghi chú
Trang 5hàng
5 NgayGiaoHang Datetime DNgayGiao
Hàng DNgayDatHa ng
Ngày giao hàng lớn hơn hoặc bằng ngày đặt hàng
6 DiaChiGiaoHang Nvarchar(50) Địa chỉ giao
hàng
>0 Tổng tiền củahóa đơn
*tblNhanVien
TT Tên Thuộc
Tính
Kiểu dữ liệu Ràng buộc Ghi chú
viên
>= 18 Ngày sinh , tuổi từ 18 trở
lên
6 GioiTinh Nvarchar(5) ‘Nam; hoặc ‘
Nữ ‘ Giới tính
làm
*tblChiTietDatHang
TT Tên Thuộc Tính Kiểu dữ liệu Ràng buộc Ghi chú
mua
giá
Trang 6TT Tên Thuộc Tính Kiểu dữ liệu Ràng buộc Ghi chú
nhập kho
hàng
g>0 Tổng số lượng hàng
nhập kho
*tblChiTietNhapKho
TT Tên Thuộc Tính Kiểu dữ liệu Ràng buộc Ghi chú
nhập kho
p > 0 Số lượng nhập
Sơ đồ liên kết bảng của sql sever
Trang 7CREATE DATABASE BTLQuanLyKinh DoanhMayTinh
ON
Tạo Các Bảng
tblLoaiHang
CREATE TABLE tblLoaiHang
(
MaLoaiHang VARCHAR(20) PRIMARY KEY,
TenLoaiHang NVARCHAR(30)
NhaCungCap
CREATE TABLE NhaCungCap
(
MaNCC INT PRIMARY KEY,
TenNhaCC NVARCHAR(30),
TenGiaoDich NVARCHAR(50),
DiaChi NVARCHAR(50),
DienThoai CHAR(10)
tblMatHang
CREATE TABLE MatHang
(
MaHang VARCHAR(20) PRIMARY KEY,
TenHang NVARCHAR(30),
MaNCC INT REFERENCES dbo.NhaCungCap(MaNCC),
MaLoaiHang VARCHAR(20) REFERENCES dbo.LoaiHang(MaLoaiHang), SoLuong FLOAT,
GiaHang FLOAT,
tblKhachHang
CREATE TABLE KhachHang
(
MaKH INT PRIMARYKEY,
enKH NVARCHAR(30),
DiaChi NVARCHAR(50),
DienThoai CHAR(10)
tblNhanVien
CREATE TABLE tblNhanVien
(
MaNV INT PRIMARY KEY,
TenNV NVARCHAR(30),
Trang 8DiaChi NVARCHAR(50),
DienThoai CHAR(10),
NgaySinh DATETIME
CHECK (DATEDIFF(YEAR,NgaySinh,GETDATE()) >=18),
GioiTinh NVARCHAR(5) CHECK(GioiTinh=N'Nam' OR
GioiTinh=N'Nữ),
NgayVaoLam DATETIME,
LuongCoBan FLOAT,
PhuCap FLOAT
tblDonDatHang
CREATE TABLE DonDatHang
(
SoHD INT PRIMARY KEY,
MaNV INT REFERENCES dbo.NhanVien(iMaNV),
MaKH INT REFERENCES dbo.KhachHang(iMaKH),
NgayDatHang DATETIME,
NgayGiaoHang DATETIME,
TongTienHD FLOAT CHECK (TongTienHD >0),
CONSTRAINT ck_ngaydathang
CHECK (DATEDIFF (DAY,NgayDatHang,NgayGiaoHang)>=0) )
tblChiTietDatHang
CREATE TABLE ChiTietDatHang
(
SoHD INT REFERENCES dbo.DonDatHang(iSoHD),
MaHang VARCHAR(20) REFERENCES dbo.MatHang(MaHang), GiaBan FLOAT,
SoLuongMua INT,
MucGiamGia FLOAT,
CONSTRAINT pk_chitietdathang PRIMARYKEY (SoHD,MaHang)
tblDonNhapKho
CREATE TABLE DonNhapKho
SONK INT PRIMARYKEY,
MaNV INT REFERENCES dbo.NhanVien(MaNV),
NgayNhapHang DATETIME ,
TongSoLuong FLOAT CHECK (TongSoLuong >0)
ChiTietNhapKho
CREATE TABLE ChiTietNhapKho
Trang 9SONK INT REFERENCES dbo.DonNhapKho(SoNK),
MaHang VARCHAR(20 ) REFERENCES dbo.MatHang(MaHang),
GiaNhap FLOAT,
SoLuongNhap FLOAT CHECK (SoLuongNhap >0),
CONSTRAINT pk_chitietnhapkho PRIMARY KEY(SoNK,MaHang)
2 Chèn Dữ Liệu
THEM DU LIEU
tblLoaiHang
INSERT INTO dbo.LoaiHang VALUES
(LH01', N'LapTop').
('LH02', N'PC'),
(LH03', N'Phụ Kiện)
-tblNhaCungCap
INSERT INTO dbo.NhaCungCap VALUES
(101, N'ASUS, NNhập Hàng Asus', N'Hà Nội', '0334455667).
(102, N'DELL', N' Nhập Hàng Dell', NĐà Nẵng', '0334455668').
(103, N'APPLE', NNhập Hàng Apple', N'Hải Phòng', '0334455669),
(104, N'LENOVO, NNhập Hàng Lenovo, NTP Hồ Chí Minh',
'0334455670')
tblKhachHang
INSERT INTO dbo.KhachHang VALUES
(111,N'TrầnAnhVũ,N'GiápNhị,HàNội','0112233445'),
(112,N'TrầnThanhTâm',NHoàngMai,HàNội','0112233446')
(113,NNguyễnMinhTú',N'MinhKhai,HàNội','0112233447)
(114,N'ĐỗThuPhương'.N'GiápBát,HàNội,'0112233448),
(115,N'LêVănTráng'.N'ĐịnhCông,HàNội','0112233449)
tblNhanVien
INSERT INTO dbo.NhanVien VALUES
(1010,N'ĐỗThịBích',N'GiápBát,HàNội,'0123456781','1997/01/01',
|NNữ','2019/02/26',7050000,1000000)
(1011,NNguyễnCôngChính',
'1989/12/21',N'Nam','2016/11/22',
N'PhápVân,HàNội','0123456782'
12100000,2000000),
(1012,N'VươngQuangHuy,N'GiảiPhóng,HàNội,'0123456783',
'1999/03/12',N'Nam','2020/04/02',
5500000, 450000),
(1013, N'Phạm Tiến Đạt', N'Cầu Giấy, Hà Nội, '0123456784','2000/07/15',
Trang 10N'Nam', '2020/07/03',
5000000, 250000)
tblMatHang
INSERT INTO dbo.MatHang VALUES
(MH01', N'ASUS VivoBook 15 A512DA', 101, 'LH01', 400, 12290000), (MH02', N'ASUS Laptop 15 X509UA', 101, 'LH01', 350, 10700000), (MH03', N'Laptop Dell XPS 13', 102, 'LH01', 100, 40400000),
('MH04', N'Laptop Dell Gaming G3', 102, 'LH01', 200, 21000000), (MH05', N'Laptop Lenovo Thinkpad X13', 104, 'LH01', 150, 34500000), ('MH06', N'Apple MacBook Pro', 103, 'LH01', 250, 35500000),
(MH07, N'PC Dell Vostro', 102, 'LH02', 300, 7050000),
(MH08', N'PC Lenovo V50t', 104, 'LH02', 200, 9190000)
(MH09', N'PC Lenovo Ideacentre AIO', 104, 'LH02', 500, 12000000), (MH10', N'PC Asus Pro D340MC', 101, 'LH02', 650, 7000000),
(MH11', N'PC Apple iMac 2019', 103, 'LH02', 250, 47800000),
(MH12', N'Tai nghe AirPods 2', 103, LH03', 200, 3990000)
('MH13', N'Apple Magic Mouse 2', 103, 'LH03', 200, 2490000)
(MH14', N'CPU AMD Ryzen 9', 101, 'LH03', 150, 19299000),
('MH15', N'Card đồ họa RTX3060TI, 101, LH03', 200, 13149000)
tblDonNhapKho
INSERT INTO dbo.DonNhapKho VALUES
(511,1010,2019/01/23',2110),
(512,1011,2017/11/12',1800),
(513,1012,'2020/04/25',1660),
(514,1013,'2020/07/07',800)
tblChiTietNhapKho
INSERT INTO dbo.ChiTietNhapKho VALUES
(511,'MH01',10790000,450),
(511,'MH12',2490000,400),
(511,'MH03',38900000,250),
(511,'MH11',46300000,560),
(511,'MH05',33000000,450),
(512,'MH06',34000000,350),
(512,'MH07',5550000,600),
(512,'MH15',11649000,500),
(512,'MH09',10500000,350),
(513,'MH10',5500000,450),
(513,'MH04',19500000,400),
(513,'MH02',9200000,250),
Trang 11(514,'MH14',17799000,450),
(514,'MH08',7690000,350)
tblDonDatHang
INSERT INTO dbo.DonDatHang VALUES
(510, 1010, 111, '2020/01/14', '2020/01/17', 59690000),
(520, 1011, 112, '2020/03/15', '2020/03/18', 74900000),
(530, 1012, 113, 2019/05/16', '2019/05/19', 47800000),
(540, 1013, 114, '2020/06/17', '2020/06/20', 48688000),
(550, 1011, 115, '2017/11/18', '2017/11/21', 35500000)
tblChiTietDatHang
INSERT INTO dbo.ChiTietDatHang VALUES
(510, 'MH01', 12290000, 1, 0),
(510, 'MH03', 40400000, 1, 0),
(510, 'MH10', 7000000, 1, 0),
(520, 'MH05', 34500000, 2, 0),
(520, 'MH03', 40400000, 1, 0),
(530, 'MH11, 47800000, 1, 0),
(540, 'MH15', 13149000, 3, 0),
(540, 'MH07', 7050000, 2, 0),
(540, 'MH08', 9190000, 4, 0),
(540, 'MH14', 19299000, 3, 0),
(550, 'MH06', 35500000, 2, 0)
tạo ViEW cho CSDL
Tạo View
1 Tạo view chứa danh sách nhân viên với các thông tin: Mã Nhân Viên, Tên Nhân Viên, Lương Cơ Ba )n, Phụ Câ, p
CREATE VIEW vv_dsnhanvien
AS SELECT MaNV AS [Mã Nhân Viên] , TenNV AS [Họ & Tên] , Luong-CoBan AS [Lương Cơ Ba )n] , PhuCap AS [Phụ Câ, p]
FROM dbo NhanVien
SELECT * FROM vv_dsnhanvien
GO
2 Tạo view cho biê, t danh sách tên hàng đã bán trong tháng 6 năm 2010
CREATE VIEW vv_dshangban2020
AS
SELECT dbo MatHang MaHang , TenHang , NgayDatHang , NgayGiaoHang
FROM MatHang , DonDatHang , ChiTietDatHang
WHERE MatHang MaHang = ChiTietDatHang MaHang
AND DonDatHang SoHD = ChiTietDatHang SoHD
AND YEAR( dbo DonDatHang NgayDatHang ) = 2020
Trang 12AND MONTH( dbo DonDatHang NgayDatHang ) = 06
SELECT * FROM vv_dshangban2020
GO
3 Tạo view cho biê, t mặt hàng có sô, lượng lớn hơn 200
CREATE VIEW vv_dshangbansoluong200
AS
SELECT MaHang , TenHang , SoLuong
FROM MatHang
WHERE SoLuong > 200
SELECT * FROM vv_dshangbansoluong200
GO
4 Tạo view chứa danh sách nhân viên nam
CREATE VIEW vv_dsnhanviennam
AS
SELECT *
FROM NhanVien
WHERE GioiTinh = N'Nam'
SELECT * FROM vv_dsnhanviennam
GO
5 Tạo view chứa danh sách mặt hàng với các thông tin: Mã Hàng, Tên Hàng, Sô, Lượng, Giá Hàng
CREATE VIEW vv_dsmathang
AS
SELECT MaHang AS [Mã Hàng] , TenHang AS [Tên Hàng] , SoLuong AS [Sô, Lượng] , GiaHang AS [Giá Hàng]
FROM MatHang
SELECT * FROM vv_dsmathang
GO
6 Tạo view cho biê, t thông tin mặt hàng có mã hàng là MH11
CREATE VIEW vv_dsmathangmahangmh11
AS
SELECT *
FROM MatHang
WHERE MaHang = 'MH11'
SELECT * FROM vv_dsmathangmahangmh11
Go
7 Tạo view cho biê, t thông tin sa )n phâ) m đã mua cu )a khách hàng có sô, hóa đơn là 510
CREATE VIEW vv_dsthongtinsphd510
AS
SELECT DonDatHang SoHD , KhachHang TenKH , MatHang TenHang , ChiTiet-DatHang SoLuongMua
Trang 13FROM MatHang , DonDatHang , ChiTietDatHang , KhachHang
WHERE DonDatHang SoHD = 510
AND DonDatHang SoHD = ChiTietDatHang SoHD
AND DonDatHang MaKH = KhachHang MaKH
AND ChiTietDatHang MaHang = MatHang MaHang
SELECT * FROM vv_dsthongtinsphd510
GO
IV ham trigger
bài tập lớn CSDL QL_BanMayTinh
tạo một sô, hàm trigger
tạo hàm trigger sao cho giá bán pha)i lướn hơn hoặc bằng giá hàng
CREATE TRIGGER tg_kiemTraGiaBan
ON ChiTietDatHang
AFTER INSERT , UPDATE
AS
BEGIN DECLARE @giaBan FLOAT , @giaHang FLOAT , @maHang VARCHAR ( 20 )
SELECT @giaBan = GiaBan , @maHang = MaHang FROM inserted
SELECT @giaHang = GiaHang FROM dbo MatHang WHERE @maHang =
MaHang
IF ( @giaBan < @giaHang )
BEGIN
PRINT N'Giá Bán Pha )i Lớn Hơn Hoăc Bằng Giá Hàng'
ROLLBACK TRAN END
END GO
hàm trigger kiê) m tra giới tính
CREATE TRIGGER tg_kiemTraGioiTinh
ON dbo NhanVien AFTER INSERT , UPDATE
AS BEGIN
DECLARE @gioitinh NVARCHAR ( 5 )
SELECT @gioitinh = GioiTinh FROM inserted
IF ( @gioitinh != N'Nam' AND @gioitinh != N'Nữ' )
Begin
RAISERROR ( N'Giới Tính Không Hợp Lệ!' , 16 , 10 )
ROLLBACK TRAN END
END GO
tạo hàm trigger kiê) m tra ngày nhập
CREATE TRIGGER tg_kiemTraNgayNhapHang
Trang 14ON DonNhapKho
AFTER INSERT , UPDATE
AS BEGIN DECLARE @ngayNhapHang DATETIME SELECT @ngayNhapHang = NgayNhapHang FROM inserted
IF ( @ngayNhapHang > GETDATE())
BEGIN PRINT N'Ngày Nhập Hàng Không được Lớn Hơn Ngày Hiện Tại'
ROLLBACK TRAN END
END GO
tạo hàm trigger nhằm kiê) m tra ngày vào làm xem có hợp lý không
CREATE TRIGGER tg_kiemTraNgayVaoLam
ON NhanVien
AFTER INSERT , UPDATE
AS BEGIN DECLARE @ngayVaoLam DATETIME
SELECT @ngayVaoLam = NgayVaoLam FROM inserted
IF ( @ngayVaoLam > GETDATE())
BEGIN PRINT N'NGày Vào Làm Không Được Lớn Hơn ngày hiện tại'
ROLLBACK TRAN
END END
GO
Đa )m ba )o sô, lượng hàng bán không vượt sô, hiện có và nê, u bán thì sô, lượng hàng trong kho sẽ gia )m CREATE TRIGGER tg_kiemtrahangban
CREATE TRIGGER tg_kiemtrahangban
ON dbo ChiTietDatHang
INSTEAD OF INSERT ,UPDATE
AS
Trang 15DECLARE @soluongmua FLOAT DECLARE @mahang VARCHAR ( 20 )
DECLARE @soluongkho FLOAT SELECT @soluongmua = SoLuongMua , @mahang = MaHang FROM In-serted
SELECT @soluongkho = ( SELECT SoLuong FROM dbo MatHang WHERE @mahang =
MaHang
)
IF ( @soluongmua > @soluongkho )
BEGIN PRINT ( 'So Luong Mua Vuot Qua So Luong Trong Kho' )
ROLLBACK TRAN END
ELSE
BEGIN
UPDATE dbo MatHang
SET SoLuong = SoLuong - @soluongmua
WHERE MaHang = @mahang
END END
GO
6.Cập nhật lại sô, lượng hàng tôf n kho khi khách hàng hu )y đặt một mặt hàng
CREATE TRIGGER tg_xoachitietdathang
ON dbo ChiTietDatHang
AFTER DELETE
AS BEGIN
DECLARE @soluongmua FLOAT DECLARE @mahang VARCHAR ( 20 )
DECLARE @soluongkho FLOAT SELECT @soluongmua = SoLuongMua , @mahang = MaHang FROM
Deleted
SELECT @soluongkho = ( SELECT SoLuong
FROM dbo MatHang
WHERE @mahang = Ma-Hang
)
BEGIN
UPDATE dbo MatHang
SET SoLuong = SoLuong + @soluongmua
WHERE MaHang = @mahang
END END
GO
Trang 167 Cập nhật sô, lượng hàng tôf n kho khi nhập thêm mặt hàng
CREATE TRIGGER tg_themChiTietDatHang
ON dbo ChiTietDatHang
AFTER INSERT AS
BEGIN DECLARE @soLuongMua FLOAT , @maHang VARCHAR ( 20 ), @soLuongKho FLOAT SELECT @soLuongMua = SoLuongMua , @maHang = MaHang FROM Inserted
SELECT @soLuongKho = SoLuong FROM dbo MatHang WHERE @maHang=Ma-Hang
BEGIN
UPDATE dbo MatHang
SET SoLuong = SoLuong - @soLuongMua
WHERE MaHang = @maHang
END END
Go
8 Cập nhật tô) ng tiêf n cu )a hóa đơn khi đặt thêm hàng
CREATE TRIGGER tg_tongTienHoaDon_insert
ON ChiTietDatHang
AFTER INSERT
AS
BEGIN
DECLARE @soHD INT , @giaMuaHang FLOAT SELECT
@giaMuaHang = ( GiaBan * SoLuongMua * ( 1 - Muc-GiamGia )),
@soHD = SoHD FROM Inserted
BEGIN
UPDATE dbo DonDatHang
SET TongTienHD = TongTienHD + @giaMuaHang
WHERE @soHD = SoHD
END END
GO
9.Cập nhật tô) ng tiêf n cu )a hóa đơn khi khách hàng hu )y đặt mặt hàng
CREATE TRIGGER tg_tongtienhoadon_delete
ON dbo ChiTietDatHang
AFTER DELETE
AS
BEGIN
DECLARE @Sohd INT DECLARE @giahangmua FLOAT SELECT @giahangmua = ( GiaBan * SoLuongMua - GiaBan *
SoLuongMua * MucGiamGia ), @Sohd = SoHD FROM Deleted
BEGIN
UPDATE dbo DonDatHang
SET TongTienHD = TongTienHD - @giahangmua