Đang tải... (xem toàn văn)
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
Trang 1I 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 và biên lai 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 sẽ trả 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 đồng đã thỏa thuận
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 sẽ 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 khách và 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, có kèm theo các khuyến mại (nếu có)
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 cho 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
● tblLoaiHang MaLoaiHang ( , TenLoaiHang);
● tblNhaCungCap (MaNCC, TenNhaCC, TenGiaoDich, DiaChi,
Trang 2● tblKhachHang (MaKH, TenKH, DiaChi, DienThoai); ● tblNhanVien MaNV ( , TenNV, DiaChi, DienThoai,
NgaySinh,GioiTinh, NgayVaoLam, LuongCoBan, PhuCap);
● tblDonDatHang (SoHD, MaNV MaKH, NgayDatHang, , NgayGiaoHang, DiaChiGiaoHang, TongTienHD);
● tblChiTietDatHang (SoHD, MaHang, GiaBan, SoLuongMua,
MucGiamGia);
● tblDonNhapKho (SoNK, MaNV, NgayNhapHang,
TongSoLuong);
● tblChiTietNhapKho (SoNK, MaHang, GiaNhap, SoLuongNhap)
TT Tên Thuộc Tính Kiểu Dữ Liệu Ràng Buộc Ghi Chú
1 sMaLoaiHang varchar(20) PK Mã loại hàng 2 sTenLoaiHang nvarchar(30) Tên loại hàng
*tblNhaCungCap
TT Tên Thuộc Tính Kiểu Dữ Liệu Ràng Buộc Ghi Chú
2 sTenNhaCC nvarchar(30) Tên nhà cung cấp 3 sTenGiaoDich nvarchar(50) Tên nhà giao dịch
*tblMatHang
TT Tên Thuộc Tính Kiểu Dữ Liệu Ràng Buộc Ghi Chú
Trang 34 sMaLoaiHang varchar(20) FK Mã loại hàng
*tblNhanVien
TT Tên Thuộc Tính Kiểu Dữ Liệu Ràng Buộc Ghi Chú
3 sDiaChi nvarchar(50) Địa chỉ
5 dNgaySinh Datetime dNgaysinh
*tblDonDatHang
TT Tên Thuộc Tính Kiểu Dữ Liệu Ràng Buộc Ghi Chú
4 dNgayDatHang Datetime Ngày đặt hàng 5 dNgayGiaoHang Datetime dNgayGiao
Hang >=
Ngày giao hàng lớn hơn hoặc bằng
ngày đặt hàng
Trang 4dNgayDatH ang
6 sDiaChiGiaoHang nvarchar(50) Địa chỉ giao hàng 7 fTongTienHD float fTongTienH
Tổng tiền của hóa đơn
*tblChiTietDatHang
TT Tên Thuộc Tính Kiểu Dữ Liệu Ràng Buộc Ghi Chú
2 sMaHang varchar(20) PK, FK Mã hàng
*tblDonNhapKho
TT Tên Thuộc Tính Kiểu Dữ Liệu Ràng
Buộc
Ghi Chú
3 dNgayNhapHang Datetime Ngày nhập hàng 4 fTongSoLuong float fTongSoL
uong >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ú
1 iSoNK Int PK, FK Số hóa đơn nhập kho 2 sMaHang varchar(20) PK, FK Mã hàng
4 fSoLuongNhap float fSoLuongN hap >0
Số lượng nhập
Trang 5III Tạo CSDL 1 Tạo Database
Hình 1: Database Diagram
Trang 6CREATE DATABASE BTLN09QuanLyKinhDoanhMayTinh
iMaNCC INT REFERENCES dbo.tblNhaCungCap(iMaNCC), sMaLoaiHang VARCHAR(20) REFERENCES
Trang 7iMaKH INT PRIMARY KEY,
iSoHD INT PRIMARY KEY,
iMaNV INT REFERENCES dbo.tblNhanVien(iMaNV), iMaKH INT REFERENCES dbo.tblKhachHang(iMaKH),
iSoHD INT REFERENCES dbo.tblDonDatHang(iSoHD),
sMaHang VARCHAR(20) REFERENCES dbo.tblMatHang(sMaHang), fGiaBan FLOAT,
iSoLuongMua INT,
Trang 8iSoNK INT PRIMARY KEY,
iMaNV INT REFERENCES dbo.tblNhanVien(iMaNV),
iSoNK INT REFERENCES dbo.tblDonNhapKho(iSoNK),
sMaHang VARCHAR(20) REFERENCES dbo.tblMatHang(sMaHang), fGiaNhap FLOAT,
fSoLuongNhap FLOAT CHECK (fSoLuongNhap >0),
CONSTRAINT pk_chitietnhapkho PRIMARY KEY(iSoNK,sMaHang)
INSERT INTO dbo.tblNhaCungCap VALUES
(101, N'ASUS', N'Nhậ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', N'Nhập Hàng Apple', N'Hải Phòng', '0334455669'), (104, N'LENOVO', N'Nhập Hàng Lenovo', N'TP Hồ Chí Minh', '0334455670' )
Trang 9tblKhachHang
INSERT INTO dbo.tblKhachHang VALUES
(111, N'Trần Anh Vũ', N'Giáp Nhị, Hà Nội', '0112233445'), (112, N'Trần Thanh Tâm', N'Hoàng Mai, Hà Nội', '0112233446'), (113, N'Nguyễn Minh Tú', N'Minh Khai, Hà Nội', '0112233447'), (114, N'Đỗ Thu Phương', N'Giáp Bát, Hà Nội', '0112233448'), (115, N'Lê Văn Tráng', N'Định Công, Hà Nội', '0112233449')
INSERT INTO dbo.tblMatHang 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), ('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
Trang 10INSERT INTO dbo.tblDonNhapKho VALUES
Trang 11SELECT * FROM dbo.tblLoaiHang
SELECT * FROM dbo.tblMatHang
Trang 12SELECT * FROM dbo.tblNhaCungCap
SELECT *FROM dbo.tblKhachHang
SELECT * FROM dbo.tblNhanVien
SELECT * FROM dbo.tblDonDatHang
Trang 13SELECT * FROM dbo.tblChiTietDatHang
SELECT * FROM dbo.tblDonNhapKho
SELECT * FROM dbo.tblChiTietNhapKho
Trang 14IV Xây dựng các view cho CSDL
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ơ Bản, Phụ Cấp
CREATE VIEW vv_dsnhanvien AS
SELECT iMaNV AS [Mã Nhân Viên],sTenNV AS [Họ & Tên], fLuongCoBan AS [Lương Cơ Bản], fPhuCap AS [Phụ Cấp] FROM dbo.tblNhanVien
SELECT * FROM vv_dsnhanvien
2 Tạo view cho biết danh sách tên hàng đã bán trong tháng 6 năm 2020 CREATE VIEW vv_dshangban2020
Trang 153 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 sMaHang,sTenHang,fSoLuong FROM dbo.tblMatHang
WHERE fSoLuong > 200
SELECT * FROM vv_dshangbansoluong200
4 Tạo view chứa danh sách nhân viên nam CREATE VIEW vv_dsnhanviennam AS
SELECT *
FROM dbo.tblNhanVien WHERE sGioiTinh = N'Nam' SELECT * FROM vv_dsnhanviennam
Trang 24SELECT * FROM vv_soluongvatongtiensp2020
20 Tạo view nhân viên làm việc trên 2 năm
CREATE VIEW vv_nhanvienlamtren2nam
Trang 25V Xây dựng các Procedure cho CSDL
1 Tìm nhân viên theo tên nhân viên
CREATE PROC sptimnhanvien_tennhanvien (@tennhanvien
EXEC sptimnhanvien_tennhanvien N'Vương Quang Huy'
2 Tổng tiền hàng bán ra trong một tháng trong 1 năm
CREATE PROC sptongtienhangban_thang (@thang int, @nam int) WHERE tblDonDatHang.iSoHD = tblDonDatHang.iSoHD
AND MONTH(dNgayGiaoHang) = @thang AND YEAR(dNgayGiaoHang) = @nam
Trang 26CREATE PROC spluongnhanvien_maNV (@maNV nvarchar(20))
EXEC spluongnhanvien_maNV @maNV=N'1010'
4 Mặt hàng không bán được trong năm
CREATE PROC dskhongduocban2020 (@nam INT) AS
BEGIN
SELECT tblmathang.smahang, tblmathang.stenhang FROM tblmathang where tblmathang.smahang NOT IN (SELECT tblmathang.smahang
EXEC dskhongduocban2020 @nam='2020'
5 Tạo thủ tục bổ sung thêm 1 bản ghi mới cho tblChiTietDatHang CREATE PROC spthemHD (@mahd nvarchar(10),@mahang
Trang 27nvarchar(10), @giaban float, @SLmua int, @mucgiamgia float) AS
BEGIN
INSERT INTO tblChiTietDatHang
VALUES (@mahd, @mahang, @giaban, @SLmua,
CREATE PROC sptangluongcoban_nhanvien (@chitieu int, @nam int, @phantram float)
Trang 287 Doanh số bán ra của một mặt hàng trong năm
CREATE PROC spdoanhso1mathang1nam (@mahang nvarchar(10),
EXEC spdoanhso1mathang1nam @mahang='MH11', @nam='2019'
8 Tổng số tiền hàng thu được của một năm
Trang 29CREATE PROC sptienhang1nam (@nam int)
EXEC sptienhang1nam @nam='2019'
9 Tổng tiền hàng nhập vào của một năm
CREATE PROC sp_tongtiennhaphang1nam (@Nam int)
Trang 3010 Giỏ hàng của khách hàng (sản phẩm đã mua + đã giao)
CREATE PROC spgiohang_khachhang (@makh int)
11 Thống kê hàng nhập từ một nhà cung cấp trong một năm
CREATE PROC spthongkesanpham_nhacungcap (@mancc
Trang 3112 Truy xuất nguồn gốc của một mặt hàng
CREATE PROC spchitiet_mathang (@mamathang nvarchar(20))
Trang 3213 Giảm giá với đơn đặt hàng chưa áp dụng giảm giá và được đặt hàng trong ngày hôm nay ( mức giảm giá x%)
CREATE PROC spmucgiamgia_dondathang (@sohd int, @ngaydat datetime, @mucgiamgia float )
AS BEGIN
UPDATE dbo.tblChiTietDatHang
SET fMucGiamGia = fMucGiamGia+ @mucgiamgia WHERE iSoHD IN ( SELECT tblDonDatHang.iSoHD
Trang 3314 Số tiền mà nhân viên sử dụng để nhập kho và số hóa đơn đã xử lí
CREATE PROC spthongkenhapkho_nhanvien ( @manv int )
Trang 3415 Số tiền mà nhân viên bán được và số hóa đơn đã xử lý
CREATE PROC spthongkebanhang_nhanvien ( @manv int )
VI Xây dựng các Trigger cho CSDL
1 Giá bán phải lớn hơn hoặc bằng giá hàng CREATE TRIGGER tg_kiemTraGiaBan
Trang 35SELECT @giaBan = fGiaBan, @maHang = sMaHang FROM Inserted
SELECT @giaHang = fGiaHang FROM dbo.tblMatHang WHERE @maHang = sMaHang
2 Kiểm tra giới tính xem đúng không
CREATE TRIGGER tg_kiemtragioitinh ON dbo.tblNhanVien
AFTER INSERT, UPDATE AS
BEGIN
DECLARE @gioitinh NVARCHAR(5) SELECT @gioitinh = sGioiTinh FROM inserted IF(@gioitinh != N'Nam' AND @gioitinh != N'Nữ')
Trang 363 Kiểm tra ngày nhập hàng đúng không
CREATE TRIGGER tg_kiemTraNgayNhapHang ON tblDonNhapKho
AFTER INSERT, UPDATE AS
BEGIN
DECLARE @ngayNhapHang DATETIME
SELECT @ngayNhapHang = dNgayNhapHang FROM
Trang 374 Kiểm tra ngày vào làm xem hợp lý không CREATE TRIGGER tg_kiemTraNgayVaoLam ON tblNhanVien
AFTER INSERT, UPDATE AS
BEGIN
DECLARE @ngayVaoLam DATETIME
SELECT @ngayVaoLam = dNgayVaoLam FROM Inserted
Trang 385 Đảm bả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ẽ giảm
CREATE TRIGGER tg_kiemtrahangban ON dbo.tblChiTietDatHang INSTEAD OF INSERT,UPDATE AS
BEGIN
DECLARE @soluongmua FLOAT DECLARE @smahang VARCHAR(20) DECLARE @soluongkho FLOAT
SELECT @soluongmua = iSoLuongMua,@smahang = sMaHang FROM inserted
SELECT @soluongkho = (SELECT fSoLuong
PRINT('So Luong Mua Vuot Qua So Luong Trong Kho')
Trang 396 Cập nhật lại số lượng hàng tồn kho khi khách hàng hủy đặt một mặt hàng
CREATE TRIGGER tg_xoachitietdathang ON dbo.tblChiTietDatHang AFTER DELETE
AS
BEGIN
DECLARE @soluongmua FLOAT DECLARE @smahang VARCHAR(20) DECLARE @soluongkho FLOAT
SELECT @soluongmua = iSoLuongMua,@smahang = sMaHang FROM Deleted
SELECT @soluongkho = (SELECT fSoLuong
Trang 407 Cập nhật số lượng hàng tồn kho khi nhập thêm mặt hàng
CREATE TRIGGER tg_themChiTietDatHang
SELECT @soLuongKho = fSoLuong FROM dbo.tblMatHang WHERE @maHang = sMaHang
BEGIN
UPDATE dbo.tblMatHang
SET fSoLuong = fSoLuong - @soLuongMua WHERE sMaHang = @maHang
END END
Trang 41Trước khi thêm dữ liệu
Dữ liệu được thêm
Trang 42Sau khi thêm dữ liệu thì bảng tblMatHang (dòng 13) được cập nhật số lượng
8 Cập nhật tổng tiền của hóa đơn khi đặt thêm hàng CREATE TRIGGER tg_tongTienHoaDon_insert
Trang 43END END
Trước khi nhập
Dữ liệu nhập
Sau khi nhập thì bảng tblDonDatHang (dòng 5) thay đổi
9 Cập nhật tổng tiền của hóa đơn khi khách hàng hủy đặt mặt hàng
CREATE TRIGGER tg_tongtienhoadon_delete ON dbo.tblChiTietDatHang
AFTER DELETE AS
BEGIN
Trang 44DECLARE @iSohd INT
DECLARE @giahangmua FLOAT
SELECT @giahangmua = (fGiaBan * iSoLuongMua - fGiaBan * iSoLuongMua*fMucGiamGia),@iSohd = iSoHD FROM
10 Cập nhật số lượng hàng nhập của một hóa đơn nhập kho khi nhập mới
CREATE TRIGGER tg_capnhatdonnhapkho_soluong ON dbo.tblChiTietNhapKho
INSTEAD OF INSERT AS
BEGIN
DECLARE @slnhap FLOAT, @sonk INT SELECT @slnhap = fSoLuongNhap,@sonk = iSoNK FROM Inserted
Trang 45VII Phân quyền và bảo mật CSDL 1 Tài Khoản Quản Lý
CREATE LOGIN Quanli WITH PASSWORD = '123456' CREATE USER quanli01 FOR LOGIN Quanli
GRANT UPDATE,SELECT,INSERT,DELETE ON dbo.tblNhanVien
GRANT EXECUTE ON dbo.sptimnhanvien_tennhanvien TO quanli01 GRANT EXECUTE ON dbo.spluongnhanvien_maNV TO quanli01 GRANT EXECUTE ON dbo.sptangluongcoban_nhanvien TO quanli01 GRANT EXECUTE ON dbo.spthongkesanpham_nhacungcap TO quanli01
GRANT EXECUTE ON dbo.spgiohang_khachhang TO quanli01 GRANT EXECUTE ON dbo.sp_tongtiennhaphang1nam TO quanli01 GRANT EXECUTE ON dbo.sptienhang1nam TO quanli01
GRANT EXECUTE ON dbo.spdoanhso1mathang1nam TO quanli01 GRANT EXECUTE ON dbo.dskhongduocban2020 TO quanli01 GRANT EXECUTE ON dbo.sptongtienhangban_thang TO quanli01 GO
2 Tài Khoản Nhân viên Nhập Kho
CREATE LOGIN NhanvienNK WITH PASSWORD = '123456' CREATE USER nhanvienNK FOR LOGIN NhanvienNK
Trang 46DENY UPDATE,SELECT,INSERT,DELETE ON dbo.tblNhanVien
GRANT EXECUTE ON dbo.spthemHD TO nhanvienNK GRANT EXECUTE ON dbo.spthongkenhapkho_nhanvien TO nhanvienNK
3 Tài Khoản Nhân viên Bán Hàng
CREATE LOGIN NhanvienBH WITH PASSWORD = '123456' CREATE USER nhanvienBH FOR LOGIN NhanvienBH
DENY UPDATE,SELECT,INSERT,DELETE ON dbo.tblNhanVien
CREATE LOGIN KhachHang WITH PASSWORD = '123456' CREATE USER khachhang FOR LOGIN KhachHang
GRANT UPDATE,SELECT,INSERT ON dbo.tblKhachHang TO khachhang
GRANT EXECUTE ON dbo.spgiohang_khachhang TO khachhang
Trang 47VIII Phân tán CSDL
Phân mảnh csdl của bảng nhân viên với điều kiện giới tính
- MAYTRAM1 : quản lý nhân viên có giới tính là nam - MAYTRAM2 : quản lý nhân viên có giới tính là nữ
Trang 49MAYTRAM2 sau khi phân tán:
Trang 511.a Tạo remove login bên maytram2
user HTKN (123456)
chỉ có quyền trên database BTLN09QUANLYKINHDOANHMAYTINH
Trang 531.b Tạo Linkserver từ MAYTRAM1 -> MAYTRAM2
Trang 541.c Khai Thác CSDL
- Trong Suốt Dữ Liệu
Tạo nhãn dữ liệu ( trong suốt dữ liệu) BẢNG nhân viên ở máy trạm2
CREATE SYNONYM maytram2_nhanvien
FOR LINK.BTLN09QuanLyKinhDoanhMayTinh.dbo.tblNhanVien SELECT * FROM maytram2_nhanvien
BẢNG don dat hang ở máy trạm2
CREATE SYNONYM maytram2_dondathang
FOR LINK.BTLN09QuanLyKinhDoanhMayTinh.dbo.tblDonDatHang SELECT * FROM maytram2_dondathang
BẢNG chi tiet dat hang ở máy trạm2 CREATE SYNONYM maytram2_chitietdathang FOR
LINK.BTLN09QuanLyKinhDoanhMayTinh.dbo.tblChiTietDatHang
Trang 55SELECT * FROM maytram2_chitietdathang
BẢNG don nhap kho ở máy trạm2
CREATE SYNONYM maytram2_donnhapkho
FOR LINK.BTLN09QuanLyKinhDoanhMayTinh.dbo.tblDonNhapKho SELECT * FROM maytram2_donnhapkho
BẢNG chi tiet nhap kho ở máy trạm2 CREATE SYNONYM maytram2_chitietnhapkho FOR
LINK.BTLN09QuanLyKinhDoanhMayTinh.dbo.tblChiTietNhapKho SELECT * FROM maytram2_chitietnhapkho
go
- Tạo Thủ Tục Thêm Nhân Viên Mới 1 tạo thủ tục thêm 1 nhân viên mới
CREATE PROC sp_themnhanvien_phantan (@manv int,@tennv nvarchar(30), @diachi nvarchar(50),
@dienthoai CHAR(10),@ngaysinh DATETIME,@gioitinh NVARCHAR(5),
@ngayvaolam DATETIME,@luongcoban FLOAT,@phucap
IF EXISTS (SELECT * FROM maytram2_nhanvien WHERE @manv = iMaNV)
PRINT ('Ma nhan vien da ton tai')