- 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
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.
2 Mục lục.
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
8 …
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,
1 MaNSX Nvarchar(50) PK Mã nhà sản xuất
1
Trang 52 TenNSX Nvarchar(255) Tên nhà sản xuất
3 DiaChi Nvarchar(255) Địa chỉ nhà sản xuất
4 SDT varchar(10) Số điện thoại
*tblThuoc:
ST
T
Tên thuộc
1 MaThuoc Nvarchar(50) PK Mã thuốc
2 TenThuoc Nvarchar(255) Tên thuốc
4 DVT Nvarchar(50) Đơn vị tính
6 MaNSX Nvarchar(50) FK tham chiếu sang
2 TenKH Nvarchar(255) Tên khách hàng
3 DiaChi Nvarchar(255 Địa chỉ
4 SDT varchar(10) Số điện thoại
2 TenNV Nvarchar(255) Tên nhân viên
3 DiaChi Nvarchar(255) Địa chỉ
4 SDT varchar(10) Số điện thoại
6 GioiTinh Nvarchar(4) Giới tính
*tblHoaDon:
ST
T
Tên thuộc
1 MaHD Nvarchar(50) PK Mã hóa đơn
2 NgayDatHan DateTime Ngày đặt hàng
2
Trang 6T Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
1 MaCTHD Nvarchar(50) PK Mã chi tiết hóa đơn
2 MaHD Nvarchar(50) FK, tham chiếu sang
6 TongThanhTien Float Tổng thành tiền
III TẠO CƠ SỞ DỮ LIỆU.
- Tạo db
T o b ng nhà s n xu tạ ả ả ấ
CREATE TABLE tblNhaSanXuat
MaNSX Nvarchar(50) notnull,
TenNSX Nvarchar(255) notnull,
DiaChi Nvarchar(255) null,
SDT varchar(10 )null,
PRIMARYKEY (MaNSX),
);
T o b ng thu cạ ả ố
CREATE TABLE tblThuoc
MaThuoc Nvarchar(50 )not null,
TenThuoc Nvarchar(255)not null,
SoLuong intnotnull,
DVT Nvarchar(50 )null,
DonGia Floatnot null,
MaNSX Nvarchar(50) notnull
PRIMARYKEY (MaThuoc),
FOREIGNKEY (MaNSX)REFERENCES tblNhaSanXuat(MaNSX),
);
B ng khách hàngả
3
Trang 7MaKH Nvarchar(50) notnull,
TenKH Nvarchar(255)not null,
DiaChi Nvarchar(255) null,
SDT varchar(10 )null,
PRIMARYKEY (MaKH)
);
B ng nhân viênả
CREATE TABLE tblNhanVien
MaNV Nvarchar(50) notnull,
TenNV Nvarchar(255)not null,
DiaChi Nvarchar(255) null,
SDT varchar(10 )null,
NgaySinh DateTimenull,
GioiTinh Nvarchar() null,
PRIMARYKEY (MaNV),
);
B ng hóa donả
CREATE TABLE tblHoaDon
MaHD Nvarchar(50) notnull,
NgayDatHang DateTimenotnull,
MaKH Nvarchar(50) notnull,
MaNV Nvarchar(50) notnull,
TongTien Floatnotnull,
PRIMARYKEY (MaHD),
FOREIGNKEY (MaKH)REFERENCES tblKhachHang(MaKH),
FOREIGNKEY (MaNV)REFERENCES tblNhanVien(MaNV)
);
B ng chi ti t hóa donả ế
CREATE TABLE tblCTHoaDon
MaCTHD Nvarchar(50 )not null,
MaHD Nvarchar(50) notnull,
MaThuoc Nvarchar(50 )not null,
SoLuong intnotnull,
ThanhTien Floatnot null,
TongThanhTien Floatnot null,
PRIMARYKEY (MaCTHD),
FOREIGNKEY (MaHD)REFERENCES tblHoaDon(MaHD),
FOREIGNKEY (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 nậ
6, 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 nễ ấ ậ
4, TP.HCM',02839404351);
4
Trang 8VALUES ('NSX05',N'Công ty C Ph n Sanofi Vi t Nam'ổ ầ ệ ,N'15/6C, Đ ng Văn Bi, Q Th Đ c ặ ủ ứTP.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 9INSERT 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 10INSERT INTO tblHoaDon MaHD, NgayDatHang MaKH TongTien MaNV, , , )
Trang 11INSERT 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 12T 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 13Create 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
10
Trang 14CREATE 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
11
Trang 15select 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ạ ả
12
Trang 16'2000-03-Select from tblNhanVien
T o Proc update nhân viênạ
Create proc sp_SuaNhanVien
Where MaNV = @manv
printN'Đã c p nh t thành công thông tin c a nhân viên: 'ậ ậ ủ @manv+
Trang 17exec 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_NhanVienDeleteNV008
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)
Trang 18T o Proc đ list ra nh ng hóa đ n nào mà nhân viên đó làmạ ể ữ ơ
CREATE PROC sp_HDNhanVienDaLam(@manv NVARCHAR( ))
T o trigger thêm d li u trong b ng chi ti t hóa đ n.ạ ữ ệ ả ế ơ
create trigger tg_AddToBillInfo
on tblCTHoaDon
for insert
as
Update tblThuoc
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
15
Trang 19create 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
16
Trang 20T o Insert trigger ràng bu c không cho xóa nhân viên ạ ộ
create trigger tg_EditMaNV
on tblNhanVien
forupdate
as
17
Trang 21Update 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
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
18
Trang 22CREATE LOGIN admin@db
Grant select on tblThuoc to duyDB
Grant select on tblHoaDon to duyDB
CREATE USER duytest FOR LOGIN duy1
Grantupdateon 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:
19