Yêu cầu chung về quyển báo cáo và chương trình *Toàn bộ chương trình và file báo cáo BTL được lưu trong thư mục với tên theo nguyên tắc sau: Nguyên tắc: SQLSERVER-BTL-- Ví dụ: SQLSERVER
Trang 1TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI
TRUNG TÂM ĐÀO TẠO ELEARNING
-BÁO CÁO BÀI TẬP LỚN
MÔN: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU – IT10
CHỦ ĐỀ 04: QUẢN LÝ KINH DOANH CỬA HÀNG THUỐC
SVTH:
- Nguyễn Văn Chiến
- Đào Thái Duy
Trang 2MỤC LỤC
Trang
I PHÁT BIỂU BÀI TOÁN. 1
II MÔ HÌNH CSDL QUAN HỆ. 1
III TẠO CƠ SỞ DỮ LIỆU. 3
IV XÂY DỰNG CÁC VIEW CHO CSDL. 8
V XÂY DỰNG CÁC PROCEDURE CHO CSDL. 12
VI XÂY DỰNG CÁC TRIGGER C. 15
VII PHÂN QUYỀN VÀ BẢO MẬT CSDL. 18
VIII PHÂN TÁN CƠ SỞ DỮ LIỆU. 19
Trang 3CHỦ ĐỀ 04
I Đề bài.
- Xây dựng chương trình quản lý kinh doanh cửa hàng thuốc
- Các bảng tối thiểu cần có: tblThuoc(Thuốc), tblKhachHang(Khách hàng), tblNhanVien(Nhân viên), tblHoaDon(Hoá đơn), tblCTHoaDon(Chi tiết hoá đơn),….
(Sinh viên tự xác định các thuộc tính và có thể bổ sung thêm các bảng phù hợp với bài toán thực tế)
- Yêu cầu cần thực hiện:
1 Xác định các bảng và Tạo CSDL của bài toán (1 điểm): Thực hiện câu lệnh tạo
CSDL, tạo bảng và chèn dữ liệu cho bảng, mỗi bảng tối thiểu 5 bản ghi
2 Tạo các view chứa và khai thác CSDL (2 điểm): Tối thiểu 10 view (gồm: Lấy thông
tin một bảng, lấy thông tin nhiều bảng, tính toán gom nhóm, …)
3 Tạo và thực thi các thủ tục cho CSDL (2 điểm): Tối thiểu 5 thủ tục (các thủ tục có
truyền tham số)
4 Tạo và vận dụng các trigger (2 điểm): Tối thiểu 5 trigger
5 Phân quyền và bảo mật cho CSDL (2 điểm): Tạo tối thiểu 2 người dùng và phân
quyền sử dụng cho Bảng, View, Thủ tục đã tạo ở trên
6 Phân tán (1 điểm): lựa chọn một số bảng bất kỳ, thực hiện phân tán ngang và dọc,
thực hiện các yêu cầu khai thác trên dữ liệu phân tán
II Yêu cầu chung về quyển báo cáo và chương trình
*Toàn bộ chương trình và file báo cáo BTL được lưu trong thư mục với tên theo nguyên tắc sau:
Nguyên tắc: SQLSERVER-BTL-<thứ tự đề>-<Họ tên sinh viên>
Ví dụ: SQLSERVER -BTL-01-NguyenVanHung
*Chương trình: Tạo file Query ghi nhận toàn bộ các câu lệnh thực hiện xử lý với CSDL
của bài toám gồm: Tạo cơ sở dữ liệu, tạo và chỉnh sửa các bảng, tạo và kiểm tra các View, tạo và thực thi các thủ tục Proc, tạo và thực thi các Trigger, tạo người dùng và phân quyền người dùng, ….
*Cấu trúc quyển báo cáo:
1 Trang bìa: Tên đề tài, tên nhóm (gồm cả họ tên các thành viên của nhóm), tên lớp.
3 Giới thiệu đề tài.
4 Phát biểu bài toán
5 Mô hình CSDL và tạo CSDL – tạo và chỉnh sửa các bảng
6 Các đối tượng CSDL gồm: View, Proc, Trigger
7 Phân quyền và bảo mật CSDL
9 Kết luận, hướng phát triển tiếp theo
10 Tài liệu tham khảo
Trang 4I PHÁT BIỂU BÀI TOÁN.
Quản lý kinh doanh của hàng thuốc gồm các thông tin sau:
Mỗi loại thuốc phải có mã thuốc, tên thuốc, số lượng, đơn vị tính (viên, vỉ,…), giá và
Các giao dịch với khách hàng sẽ được lập hoá đơn Hoá đơn sẽ bao gồm mã hoá đơn, ngày đặt hàng, mã khách hàng, mã nhân viên lập hoá đơn và tổng tiền Trong mỗi hoá đơn sẽ bao gồm chi tiết hoá đơn như mã chi tiết hoá đơn, mã hoá đơn, mã thuốc, số lượng, thành tiền của từng loại thuốc và tổng tiền Số lượng thuốc sẽ được cập nhật lại sau khi khách hàng mua thuốc.
Nhà thuốc sẽ quản lý nhân viên bằng mã nhân viên, tên nhân viên, địa chỉ, số điện thoại, ngày sinh và giới tính Các nhân viên sẽ được giới hạn độ tuổi làm việc từ 18 tuổi đến 65 tuổi và không thể chỉnh sửa mã nhân viên khi cập nhật lại thông tin nhân viên Chương trình sẽ được phân quyền để phù hợp cho mục đích sử dụng mỗi người.
II MÔ HÌNH CSDL QUAN HỆ.
Ta có CSDL của bài toàn như sau:
1 tblNhaSanXuat (MaNSX, TenNSX, DiaChi, SDT).
2 tblThuoc (MaThuoc, TenThuoc, SoLuong, DVT, DonGia, MaNSX)
3 tblKhachHang (MaKH, TenKH, DiaChi, SDT).
4 tblNhanVien (MaNV, TenNV, DiaChi, SDT, NgaySinh, GioiTinh).
5 tblHoaDon (MaHD, NgayDatHang, MaKH, MaNV, TongTien).
6 tblCTHoaDon (MaCTHD, MaHD, MaThuoc, SoLuong, ThanhTien,
Trang 6Ngày đặt hàng
2
Trang 72 MaHD Nvarchar(50) FK, tham chiếu sang Mã hóa đơn
bảng tblHoaDon
3 MaThuoc Nvarchar(50) FK, tham chiếu sang Mã thuốc
bảng tblThuoc
III TẠO CƠ SỞ DỮ LIỆU.
- Tạo bảng nhà sản xuất CREATE TABLE tblNhaSanXuat (
MaNSX Nvarchar ( 50 ) not null,
TenNSX Nvarchar ( 255 ) not null,
DiaChi Nvarchar ( 255 ) null,
SDT varchar ( 10 ) null,
PRIMARY KEY ( MaNSX ),
);
- Tạo bảng thuốc
CREATE TABLE tblThuoc (
MaThuoc Nvarchar(50) not null,
TenThuoc Nvarchar(255) not null,
SoLuong int not null,
DVT Nvarchar(50) null,
DonGia Float not null,
MaNSX Nvarchar(50) not null
PRIMARY KEY (MaThuoc),
FOREIGN KEY (MaNSX) REFERENCES tblNhaSanXuat(MaNSX),
Trang 8Bảng khách hàng
3
Trang 9MaKH Nvarchar(50) not null,
TenKH Nvarchar(255) not null,
DiaChi Nvarchar(255) null,
SDT varchar(10) null,
PRIMARY KEY (MaKH)
);
Bảng nhân viên
CREATE TABLE tblNhanVien (
MaNV Nvarchar(50) not null,
TenNV Nvarchar(255) not null,
DiaChi Nvarchar(255) null,
SDT varchar(10) null,
NgaySinh DateTime null,
GioiTinh Nvarchar( ) null,
PRIMARY KEY (MaNV),
);
Bảng hóa don
CREATE TABLE tblHoaDon (
MaHD Nvarchar(50) not null,
NgayDatHang DateTime not null,
MaKH Nvarchar(50) not null,
MaNV Nvarchar(50) not null,
TongTien Float not null,
PRIMARY KEY (MaHD),
FOREIGN KEY ( MaKH ) REFERENCES tblKhachHang ( MaKH ),
FOREIGN KEY ( MaNV ) REFERENCES tblNhanVien ( MaNV )
);
- Bảng chi tiết hóa don CREATE TABLE tblCTHoaDon (
MaCTHD Nvarchar ( 50 ) not null,
MaHD Nvarchar ( 50 ) not null,
MaThuoc Nvarchar(50) not
null, SoLuong int not
null, ThanhTien Float not
null, TongThanhTien Float
not null,PRIMARY KEY
(MaCTHD),
FOREIGN KEY ( MaHD ) REFERENCES tblHoaDon ( MaHD ),
FOREIGN KEY ( MaThuoc ) REFERENCES tblThuoc ( MaThuoc )
);
- Chèn dữ liệu cho bảng.
Chèn dữ liệu cho bảng tblNhaSanXuat
INSERT INTO tblNhaSanXuat (MaNSX, TenNSX, DiaChi,SDT)
VALUES ('NSX01', N'Công ty cổ phần dược phẩm OPC',N'1017 - Hồng Bàng, Phường 12, Quận6, Tp.HCM',02837517111);
INSERT INTO tblNhaSanXuat (MaNSX, TenNSX, DiaChi,SDT)
VALUES ('NSX02', N'Công ty CP hoá dược phẩm Mekophar',N'297/5 Lý Thường Kiệt, Quận 11,Tp.HCM, Việt Nam.',02838650258);
INSERT INTO tblNhaSanXuat (MaNSX, TenNSX, DiaChi,SDT)
VALUES ('NSX03', N'Công ty CP hoá dược phẩm Mekophar',N'297/5 Lý Thường Kiệt, Quận 11,Tp.HCM, Việt Nam.',02838650258);
INSERT INTO tblNhaSanXuat (MaNSX, TenNSX, DiaChi,SDT)
VALUES ('NSX04', N'Công ty cổ phần dược phẩm TW25',N'448B Nguyễn Tất Thành,
P 18, Quận4, TP.HCM',02839404351);
4
Trang 10VALUES ('NSX05', N'Công ty Cổ Phần Sanofi Việt Nam',N'15/6C, Đặng Văn Bi,
Q Thủ ĐứcTP.HCM',0287109424);
Chèn dữ liệu cho bảng tblThuoc
INSERT INTO tblThuoc (MaThuoc, TenThuoc, SoLuong, DVT, DonGia,MaNSX)VALUES ('T001', N'Thuốc Atorvastatin 20Mg Trị Tăng Cholesterol Máu',
'10', N'Vỉ', '10000','NSX04');
INSERT INTO tblThuoc (MaThuoc, TenThuoc, SoLuong, DVT, DonGia,MaNSX)VALUES ('T002', N'Thuốc Kháng Sinh Tetracyclin 500Mg Vidipha Điều Trị Nhiễm Khuẩn','10', N'Hộp', '48000','NSX04');
INSERT INTO tblThuoc (MaThuoc, TenThuoc, SoLuong, DVT, DonGia,MaNSX)VALUES ('T003', N'Siro Ho Astex 90Ml Opc Giảm Ho Viêm Họng, Viêm Phế Quản', '10', N'Chai', '38000','NSX01');
INSERT INTO tblThuoc (MaThuoc, TenThuoc, SoLuong, DVT, DonGia,MaNSX)VALUES ('T004', N'Paracetamol 500mg Vidipha', '15', N'Hộp',
'19000','NSX02');
INSERT INTO tblThuoc (MaThuoc, TenThuoc, SoLuong, DVT, DonGia,MaNSX)VALUES ('T005', N'Viên uống An thần dễ ngủ Mimosa hộp 50 viên',
'15', N'Hộp', '70900','NSX01');
Chèn dữ liệu cho bảng tblKhachHang
INSERT INTO tblKhachHang (MaKH, TenKH, DiaChi, SDT)
VALUES ('KH001', N'Nguyễn Văn A', N'Số 1, đường Nguyễn Thị Minh Khai, TP.HCM ', 0983456780);
INSERT INTO tblKhachHang (MaKH, TenKH, DiaChi, SDT)
VALUES ( 'KH002' , N'Nguyễn Văn B' , N'Số 8, đường Nguyễn Văn Bi, TP.HCM ' , 0986780320 );INSERT INTO tblKhachHang (MaKH, TenKH, DiaChi, SDT)
5
Trang 11N'Nguyễn Văn Sơn' N'Số 13B, đường Nguyễn Ðình Chiểu,TP.HCM ', 0945675678);
INSERT INTO tblKhachHang (MaKH, TenKH, DiaChi, SDT)
VALUES ('KH004', N'Nguyễn Thị Lan', N'Số 687, đường Nguyễn Ái Quốc, TP.HCM ', 0935873478);
INSERT INTO tblKhachHang (MaKH, TenKH, DiaChi, SDT)
VALUES ('KH005', N'Ðặng Thị Thu Hà', N'Số 11/2B, đường Sơn Ðông,
TP.HCM ', 0945675678);
INSERT INTO tblKhachHang (MaKH, TenKH, DiaChi, SDT)
VALUES ('KH006', N'Ngô Diệt Phàm', N'Số 11/2B, đường Sơn Tây, Hà Nội ','');
Chèn dữ liệu cho bảng tblNhanVien
INSERT INTO tblNhanVien (MaNV, TenNV, DiaChi, SDT,NgaySinh,GioiTinh)VALUES ('NV001', N'Nguyễn Văn C', N'TP.HCM', 0983455678,'2000-04-13',
'Nam');
INSERT INTO tblNhanVien (MaNV, TenNV, DiaChi, SDT,NgaySinh,GioiTinh)VALUES ('NV002',N'Nguyễn Văn D', N'TP.HCM', 0867980320,'2000-05-13','Nam');INSERT INTO tblNhanVien (MaNV, TenNV, DiaChi, SDT,NgaySinh,GioiTinh)VALUES ('NV003',N'Nguyễn Văn Hà', N'TP.HCM', 0945675438,'2000-06-13','Nam');INSERT INTO tblNhanVien (MaNV, TenNV, DiaChi, SDT,NgaySinh,GioiTinh)VALUES ('NV004',N'Ngô Minh Chí', N'TP.HCM', 0939654378,'2001-04-13',N'Nữ');INSERT INTO tblNhanVien (MaNV, TenNV, DiaChi, SDT,NgaySinh,GioiTinh)
VALUES ( 'NV005' , N'Nguyễn Thị Linh' , N'TP.HCM' , 0920965678 , '1999-04-13' , N'Nữ' );
INSERT INTO tblNhanVien ( MaNV , TenNV , DiaChi , SDT , NgaySinh , GioiTinh )
VALUES ( 'NV006' , N'Đặng Thị Thanh' , N'Hà Nội' , '' , '1997-05-13' , N'Nữ' );
INSERT INTO tblNhanVien ( MaNV , TenNV , DiaChi , SDT , NgaySinh , GioiTinh )
VALUES ( 'NV007' , N'Đào Bá Phương' , N'Hà Nội' , '' , '2000-10-13' , N'Nữ' );
6
Trang 12Chèn dữ liệu cho bảng tblHoaDon
INSERT INTO tblHoaDon (MaHD, NgayDatHang, MaKH, TongTien,MaNV)
Chèn dữ liệu cho bảng tblCTHoaDon
INSERT INTO tblCTHoaDon (MaCTHD, MaHD, MaThuoc, SoLuong, ThanhTien,
TongThanhTien) VALUES ('CTHD001','HD001','T001', 3, 150000, 150000);INSERT INTO tblCTHoaDon (MaCTHD, MaHD, MaThuoc, SoLuong, ThanhTien,
TongThanhTien) VALUES ('CTHD002','HD002','T002', 3, 150000, 150000);INSERT INTO tblCTHoaDon (MaCTHD, MaHD, MaThuoc, SoLuong, ThanhTien,
TongThanhTien) VALUES ('CTHD003','HD002','T003', 4, 150000, 250000);
INSERT INTO tblCTHoaDon ( MaCTHD , MaHD , MaThuoc , SoLuong , ThanhTien , TongThanhTien )
7
Trang 13INSERT INTO tblCTHoaDon (MaCTHD, MaHD, MaThuoc, SoLuong, ThanhTien,
TongThanhTien) VALUES ('CTHD005','HD004','T004', 2, 150000, 350000);
- Sơ đồ quan hệ giữa các bảng
IV XÂY DỰNG CÁC VIEW CHO CSDL.
- Tạo view:
- Tạo view ds khách hàng Create VIEW DSKhachHang_VIEW AS SELECT TenKH,
DiaChi, SDT FROM tblKhachHang;
8
Trang 14- Tạo view ds nhân viên
Create VIEW NhanVien_VIEW AS
Create VIEW NhanVien_VIEW AS
SELECT TenNV, GioiTinh,
DiaChi, SDT FROM tblNhanVien;
Select *from NhanVien_VIEW
Tạo view ds nhân viên có giới tính là Nam
Create VIEW NhanVienNam_VIEW AS
SELECT MaNV, TenNV, GioiTinh
FROM tblNhanVien
WHERE GioiTinh = 'Nam' ;
select *from NhanVienNam_VIEW
9
Trang 15Tạo view ds nhân viên có giới tính là Nữ
Create VIEW SanPham_VIEW AS
SELECT MaThuoc, TenThuoc, MaNSX
FROM tblThuoc
WHERE MaNSX= N'NSX04' ;
select *from SanPham_VIEW
Tạo view ds nhân viên có địa chỉ là TP.HCM
Create VIEW AdNhanVien_VIEW AS
SELECT TenNV , DiaChi
FROM tblNhanVien
WHERE DiaChi like '%HCM%'
select *from AdNhanVien_VIEW
Tạo view ds hóa đơn có số tiền trên 200000
Create VIEW Total_VIEW AS
SELECT MaHD, NgayDatHang, MaKH, TongTien
FROM tblHoaDon
WHERE TongTien >= 200000 ;
select *from Total_VIEW
1 0
Trang 16Tạo View tính tổng số hóa đơn đã lập của từng Nhân viên
CREATE VIEW SumHDByNV_VIEW
AS
SELECT MaNV,SUMHD = Count(MaHD)
FROM tblHoaDon
GROUP BY MaNV
select *from SumHDByNV_VIEW
Tạo View tính tổng số hóa đơn đã lập của nhân viên trong ngày 24/08/2022
CREATE VIEW SUMHDDAY_VIEW
AS
SELECT MaNV, NgayDatHang ,SUMHD = Count(MaHD)
FROM tblHoaDon
WHERE NgayDatHang = '2022-08-24'
GROUP BY MaNV , NgayDatHang
select *from SUMHDDAY_VIEW
- Tạo ds nhân viên không có số điện thoại Create VIEW
PhoneNullNhanVien_VIEW AS SELECT TenNV, DiaChi
1 1
Trang 17WHERE SDT= ''
select *from PhoneNullNhanVien_VIEW
- Tạo view tổng tiền cửa hàng kiếm được Create VIEW
TongTienCuaHangKiemDuoc_VIEW AS
SELECT SUM(TongTien) As
Total FROM tblHoaDon
select *from TongTienCuaHangKiemDuoc_VIEW
- Tạo view tuổi trung bình của NV Create VIEW TuoiTBCuaNV_VIEW
AS
select avg(datediff(year,NgaySinh , GETDATE()))
as age from tblNhanVien
select *from TuoiTBCuaNV_VIEW
V XÂY DỰNG CÁC PROCEDURE CHO CSDL.
- Tạo các procedure:
Tạo Proc thêm nhân viên vào bảng tblNhanVien
1 2
Trang 18Select *from tblNhanVien
Tạo Proc update nhân viên
Create proc sp_SuaNhanVien
Where MaNV = @manv
print N'Đã cập nhật thành công thông tin của nhân viên: '
Trang 19exec sp_SuaNhanVien 'NV006',N'Đặng Thị Thanh update', N'Hà
Nội','','2000-05-13',N'Nữ';
select *from tblNhanVien
Tạo Proc Xóa nhân viên khỏi bảng
tblNhanVien CREATE PROC
sp_NhanVienDelete@manv Nvarchar(50)
AS
DELETE tblNhanVien Where MaNV=@manv
exec sp_NhanVienDelete NV008
Select *from tblNhanVien
Tạo Proc đếm số hóa đơn có tổng giá tiền => 300000
CREATE PROC sp_GetHoaDon(@tongtien FLOAT = 300000, @HoaDon_COUNT INT OUTPUT)AS
Trang 20- Tạo Proc để list ra những hóa đơn nào mà nhân viên đó làm CREATE PROC
sp_HDNhanVienDaLam(@manv NVARCHAR(50))
set tblThuoc.SoLuong = tblThuoc.SoLuong
-inserted.SoLuong from tblThuoc inner join inserted
on tblThuoc.MaThuoc = inserted.MaThuoc
Select * from tblThuoc
INSERT INTO tblCTHoaDon ( MaCTHD , MaHD , MaThuoc , SoLuong , ThanhTien , TongThanhTien )VALUES ('CTHD006','HD004','T001', 7, 10000, 70000);
Select * from tblCTHoaDon
Select * from tblThuoc
1 5
Trang 21Tạo trigger cập nhật dữ liệu trong bảng Thuoc
create trigger tg_CancelBill
on tblCTHoaDon
for delete
as
Update tblThuoc
set tblThuoc.SoLuong = tblThuoc.SoLuong +
deleted.SoLuong from tblThuoc inner join deleted
on tblThuoc.MaThuoc = deleted.MaThuoc
Select * from tblThuoc
Select * from tblCTHoaDon
Delete From tblCTHoaDon where MaCTHD = 'CTHD006'
Select * from tblCTHoaDon
Select * from tblThuoc
1 6
Trang 22Tạo Insert trigger nhằm đảm bảo khi nhập một khách bắt buộc phải có địa chỉ và sdt để liên lạc
create trigger tg_InserCustomer
INSERT INTO tblKhachHang (MaKH, TenKH, DiaChi, SDT)
VALUES ('KH007', N'Ngô Thị Bắp', N'','');
- Tạo Insert trigger ràng buộc không cho xóa nhân viên
create trigger tg_EditMaNV
Trang 23Update tblNhanVien set MaNV = '1' Where MaNV = 'NV001'
create trigger tg_ValidateAge
on tblNhanVien
for insert
as
declare @tuoi int;
select @tuoi = DateDiff(Year, NgaySinh, GetDate() )+1 from inserted
if @tuoi <18 or @tuoi>65
begin
print N'Tuổi của nhân viên không hợp lệ trong khoảng 18<=
tuổi <=65'; rollback tran
end
INSERT INTO tblNhanVien (MaNV, TenNV, DiaChi, SDT,NgaySinh,GioiTinh)VALUES ('NV008',N'Đào Bá Ngọc', N'Hà Nội','','2010-10-13',N'Nữ');
VII PHÂN QUYỀN VÀ BẢO MẬT CSDL.
- Tạo Account và phân quyền
- Tạo 2 login không có quyền
CREATE LOGIN duy WITH PASSWORD = '123456'
GO
CREATE LOGIN duy1 WITH PASSWORD = '123456'
GO
1 8
Trang 24Tạo Login có quyền cao nhất
Grant select on tblThuoc to duyDB
Grant select on tblHoaDon to duyDB
CREATE USER duytest FOR LOGIN duy1
Grant update on AdNhanVien_VIEW to duytest
VIII PHÂN TÁN CƠ SỞ DỮ LIỆU.
Quản lý kinh doanh của hàng thuốc gồm các thông tin sau:
1 9