Xây dựng thủ tục tính số lượng đặt hàng với tên spud_DONDH_TinhSLDat gồm có 2 tham số vào là: Số đặt hàng và Mã vật tư, 1 tham số ra là: Số lượng đặt hàng của một vật tư trong một số đặt
Trang 1BÀI 1: CÁC ĐỐI TƯỢNG TRONG CƠ SỞ DỮ LIỆU 1.1 Bằng công cụ Enterprise Manager, tạo mới CSDL có tên QLBanHang
(Quản lý bán hàng) có kích thước được mô tả như sau:
a Data File: Kích thước tạo lập 50MB; mỗi lần tăng 10MB; giới hạn kích thước tập tin không tăng hơn 200MB
b Log File: Kích thước tạo lập 10MB; mỗi lần tăng 5MB; không giới hạn việc tăng kích thước tập tin
1.2 Sử dụng công cụ Enterprise Manager để tạo cấu trúc các bảng có mô tả như
bên dưới trong CSDL quản lý bán hàng
Danh mục Vật tư (VATTU)
Danh mục Nhà cung cấp (NHACC)
Đơn đặt hàng (DONDH)
Chi tiết Đơn đặt hàng (CTDONDH)
Trang 2Phiếu nhập hàng (PNHAP)
Chi tiết Nhập hàng (CTPNHAP)
hàng
Int
Phiếu xuất hàng (PXUAT)
Chi tiết xuất hàng (CTPXUAT)
SlXuat Số lượng xuất hàng Int
Tồn kho (TONKHO)
TongSLN Tổng số lượng nhập trong kỳ Int
TongSLX Tổng số lượng xuất trong kỳ Int
Trang 31.3 Sử dụng câu lệnh INSERT INTO thêm dữ liệu vào các bảng
a Bảng VATTU
b Bảng NHACC
c Bảng DONDH
Trang 4d Bảng PNHAP
e Bảng CTDONDH
f Bảng CTPNHAP
Trang 5g Bảng CTPXUAT
h Bảng PXUAT
i Bảng TONKHO
Trang 61.4 Backup/Restore database
a Sử dụng chức năng Backup Database để thực hiện Backup toàn bộ database QLBanHang thành file QLBanHang.bak
b (Chỉ thực hiện yêu cầu này sau khi bạn đã Backup dữ liệu thành công) Xóa các bảng đã tạo ra trong database QLBanHang Sử dụng chức năng Restore để phục hồi dữ liệu từ file QLBanHang.bak
1.5 Trong CSDL quản lý bán hàng, xây dựng các View như sau:
a Tạo view có tên vwDMVT bao gồm các thông tin sau: Mã vật tư, Tên vật tư.
View này dùng để liệt kê danh sách các vật tư có trong bảng VATTU
b Tạo view có tên vwDonDH_TongSLDatNhap bao gồm các thông tin sau: Số
đặt hàng, Mã vật tư, Tổng số lượng đặt, Tổng số lượng nhập View này dùng để
thống kê những đơn đặt hàng nào được nhập hàng đầy đủ
c Tạo view có tên vwDonDH_DaNhapDu bao gồm các thông tin sau: Số đặt
hàng, Tình trạng Trong đó, cột Tình trạng sẽ có 2 giá trị là “Đã nhập đủ” nếu đơn
hàng đó đã nhập đủ và “Chưa nhập đủ” nếu đơn hàng đó chưa nhập đủ
d Tạo view có tên vwTongNhap bao gồm các thông tin sau: Năm tháng, Mã
vật tư, Tổng số lượng nhập View này dùng để thống kê số lượng nhập vào các vật tư
trong từng năm tháng tương ứng (Chú ý: không dùng bảng TONKHO)
e Tạo view có tên vwTongXuat bao gồm các thông tin sau: Năm tháng, Mã vật
tư, Tổng số lượng xuất View này dùng để thống kê số lượng xuất của vật tư trong
từng năm tháng tương ứng (Chú ý: Không dùng bảng TONKHO)
f Tạo view có tên vwDonDH_MaVTu_TongSLNhap bao gồm các thông tin
sau: Số đặt hàng, ngày đặt hàng, mã vật tư, số lượng đặt, tổng số lượng đã nhập hàng
1.6 Kết hợp các view ở câu 1.5 thực hiện các truy vấn chọn lựa trả lời các câu
hỏi sau:
a Cho biết danh sách các đơn đặt hàng chưa được nhập hàng
b Cho biết danh sách các mặt hàng chưa được đặt hàng bao giờ
c Cho biết nhà cung cấp nào có nhiều đơn đặt hàng nhất
d Cho biết vật tư nào có tổng số lượng xuất bán nhiều nhất
e Cho biết đơn đặt hàng nào có nhiều mặt hàng nhất
f Cho biết tình hình nhập xuất của vật tư, thông tin gồm: Năm tháng, Mã vật tư, Tên vật tư, Tổng số lượng nhập, Tổng số lượng xuất
g Cho biết tình hình đặt và nhập hàng: Đơn đặt hàng, mã vật tư, số lượng đặt, tổng số lượng nhập
h Thống kê tình hình đặt hàng trong từng ngày: Ngày đặt hàng, mã vật tư, tên vật tư, tổng số lượng đặt hàng
i Thống kê tình hình nhập hàng trong từng ngày: Ngày nhập hàng, mã vật tư, tên vật tư, tổng số lượng nhập hàng
Trang 7j Thống kê những đơn đặt hàng nào chưa được nhập đủ số lượng hàng
1.7 Bổ sung thêm các dữ liệu mới vào trong các bảng Chú ý tính chất hợp lý
của dữ liệu:
- Xác định mối quan hệ cha, con giữa các bảng Kiểm tra xem có dữ liệu nhập vào không hợp lý: chỉ có ở bảng con mà không có ở bảng cha hay không?
- Nhập chi tiết đơn đặt hàng nào mà SoDH không có trong bảng DONHANG không?
- Nhập vào chi tiết phiếu nhập 1 vật tư nào mà trong chi tiết đơn đặt hàng của phiếu đó không đặt hay không?
- Nhập vào chi tiết phiếu xuất nào mà số lượng vật tư xuất của một vật tư lớn hơn số lượng tồn trong bảng TONKHO của vật tư đó trong cùng năm tháng xuất hay không?
BÀI 2: CÁC RẰNG BUỘC TOÀN VẸN DỮ LIỆU 2.1 Sử dụng công cụ Enterprise Manager để thêm các ràng buộc sau vào các
bảng trong CSDL QLBanHang
Chú ý: nếu dữ liệu nhập vào các bảng trong bài trước không thỏa mãn thì một số ràng buộc sẽ không tạo được Khi đó, thực hiện các bước sau:
- Xác định dòng dữ liệu nhập sai dựa vào ý nghĩa ràng buộc mà bạn đang tạo Ví dụ: Nếu tạo ràng buộc miền giá trị (CHECK) 0<=PhanTram<=100 nhưng không thành công thì chắc chắn dữ liệu chỉ có thể nhập sai trong bảng VATTU, cột PhanTram
- Sửa lại dữ liệu nhập
- Thực hiện lại việc tạo ràng buộc
Danh mục Vật tư (VATTU)
- MaVTu là khóa chính
- Tên vật tư phải duy nhất, không trùng
- Giá trị mặc định cho cột đơn vị tính là “”
- 0<=PhanTram<=100
Danh mục Nhà cung cấp (NHACC)
- MaNhaCc là khóa chính
- Tên nhà cung cấp và địa chỉ nhà cung cấp phải là duy nhất, không trùng
- Giá trị mặc định cho cột DienThoai là “Chưa có”
Đơn đặt hàng (DONDH)
- SoDH là khóa chính
- Giá trị mặc định cho cột ngày đặt hàng là ngày hiện hành Dùng hàm Getdate()
Trang 8Chi tiết Đơn đặt hàng (CTDONDH)
- SoDH, MaVTu là khóa chính
- SlDat >0
Chi tiết Nhập hàng (CTPNHAP)
- SoPn, MaVTu là khóa chính
- SlNhap >0
- DgNhap >0
Chi tiết xuất hàng (CTPXUAT)
- SoPx, MaVTu là khóa chính
- SlXuat >0
- DgXuat >0
Tồn kho (TONKHO)
- NamThang, MaVTu là khóa chính
- SlDau >=0
- TongSLN >=0
- TongSLX >=0
- Giá trị mặc định cho các cột SLDau, TongSLN, TongSLX là 0
- Trong thuộc tính Formula của cột SLCuoi: SLDau + TongSLN – TongSLX
2.2 Sử dụng công cụ Enterprise Manager để thêm vào các kiểm tra ràng buộc về
khóa ngoại cho các bảng như sau:
Chú ý: Tất cả các mối liên kết khóa ngoại đều có giá trị CASCADE cho các sự kiện ON UPDATE và ON DELETE
Trang 92.3 Phát sinh script
a Sử dụng chức năng Generate Script của công cụ Enterprise Manager để phát sinh toàn bộ đoạn script dùng để tạo các bảng và ràng buộc đã làm
b Lưu script vừa phát sinh thành qlbanhang.sql
2.4 Tạo bảng và ràng buộc bằng câu lệnh (script)
Xóa các bảng và các ràng buộc vừa tạo Chú ý đến các ràng buộc khóa ngoại giữa các bảng để xác định thứ tự các bảng sẽ bị xóa
b Sử dụng công cụ Query Analyzer, viết các câu lệnh tạo bảng và các ràng buộc khóa Bạn có thể chọn một trong hai cách thực hiện:
- Tạo các bảng trước, sau đó sử dụng câu lệnh ALTER TABLE ADO CONTRAINT để tạo các ràng buộc
- Tạo các bảng kết hợp với các ràng buộc
- Bạn có thể tham khảo lại file script đã lưu qlbanhang.sql để kiểm tra câu lệnh
của mình và tập cách đọc hiểu đoạn script do Enterprise Manager tạo ra
2.5 Thiết lập mô hình quan hệ dữ liệu (diagram) của CSDL quản lý bán hàng
như bên dưới: Lưu tên: QLBanHang_KetNoi
BÀI 3: LẬP TRÌNH VỚI CSDL 3.1 Trong CSDL quản lý bán hàng thực hiện các truy vấn sau:
a Hiển thị danh sách các vật tư trong bảng VATTU sắp xếp theo thứ tự tên vật
tư giảm dần
b Hiển thị danh sách các nhà cung cấp trong bảng NHACC có cột địa chỉ ở
HCM, sắp xếp dữ liệu theo họ tên tăng dần
Trang 10c Hiển thị danh sách các thông tin trong bảng CTPNHAP có thêm cột thành tiền biết rằng Thành tiền=SLNhap*DgNhap
d Hiển thị danh sách các mã nhà cung cấp, tên nhà cung cấp không trùng lặp dữ
liệu đã đặt hàng trong bảng DONDH.
e Hiển thị danh sách các phiếu xuất hàng gồm có các cột: Số phiếu xuất và tổng giá trị Trong đó sắp xếp theo thứ tự tổng trị giá giảm dần
f Xóa chi tiết các đơn vật tư trong bảng CTDONDH có ngày đặt hàng là
15/01/2002
g Xóa toàn bộ các dòng dữ liệu trong bảng CTPXUAT.
h Sử dụng lại tập tin chứa các lệnh thêm dữ liệu INSERT INTO trước đây để
chèn lại các dữ liệu đã bị xóa trong bảng CTDONDH và CTPXUAT.
i Sử dụng COMPUTE BY và các hàm tính toán để thống kê nhóm dữ liệu:
- Hiển thị các thông tin trong bảng CTPXUAT và bổ sung thêm cột thành tiền,
sao cho có thống kê dòng tổng cộng số tiền ở từng phiếu xuất
- Hiển thị các thông tin: Mã vật tư, Số phiếu nhập, số lượng nhập, đơn giá nhập trong bảng CTPNHAP và thống kê dòng tổng cộng số lượng, giá thấp nhất, giá
cao nhất ở từng vật tư
3.2 Sử dụng cú pháp IF để thực hiện các yêu cầu sau:
a Cho biết đơn giá xuất trung bình của hàng hóa “Đầu DVD Hitachi 1 đĩa”
trong bảng CTPXUAT hiện giờ là bao nhiêu? Nếu lớn hơn 3.800.000 thì in ra
“Không nên thay đổi giá bán”, ngược lại in ra “Đã đến lúc tăng giá bán”
b Sử dụng hàm DATENAME để tính xem có đơn đặt hàng nào đã được lập vào ngày chủ nhật không? Nếu có thì in ra danh sách các đơn đặt hàng đó, ngược lại thì in
ra chuỗi “Ngày lập các đơn đặt hàng đều là hợp lệ”
c Hãy cho biết đã có bao nhiêu phiếu nhập hàng cho mặt hàng DD01, nếu có thì
in ra “có xx phiếu nhập hàng cho mặt hàng D001”, ngược lại thì in ra “Chưa có phiếu nhập hàng nào cho mặt hàng DD01”
3.3 Sử dụng cú pháp WHILE để thực hiện yêu cầu sau: Tạo một bảng tên VATTU_Temp có cấu trúc và dữ liệu đựa vào bảng VATTU (chỉ lấy 2 cột: MaVTu,
TenVTu và bỏ đi các constraint liên quan) Sau đó sử dụng WHILE viết đoạn chương
trình dùng để xóa từng dòng dữ liệu trong bảng VATTU_Temp đối với điều kiện câu
lệnh bên trong vòng lặp khi mỗi lần thực hiện chỉ được phép xóa một dòng dữ liệu
trong bảng VATTU_Temp Trong khi xóa nên thông báo ra màn hình nội dung
“Đang xóa vật tư” + tên vật tư
3.4 Sử dụng cú pháp CASE lồng vào các lệnh truy vấn cần thiết trong các yêu
cầu sau:
a Liệt kê danh sách các đơn đặt hàng trong bảng DONDH bổ sung thêm cột hiển thị thứ trong tuần (bằng tiếng việt) của ngày đặt hàng
b Giảm đơn giá của các hàng hóa bán ra (DGXUAT) trong tháng 01/2002 theo quy tắc sau:
Trang 11- Không giảm nếu số lượng <4
- Giảm 5%nếu số lượng >=4 và số lượng <10
- Giảm 10% nếu số lượng >=10 và số lượng <=20
- Giảm 20% nếu số lượng >20
BÀI 4: THỦ TỤC NỘI TẠI 4.1 Trong CSDL quản lý bán hàng, tạo các thủ tục nội tại tính toán các yêu cầu
sau:
a Xây dựng thủ tục tính số lượng đặt hàng với tên spud_DONDH_TinhSLDat
gồm có 2 tham số vào là: Số đặt hàng và Mã vật tư, 1 tham số ra là: Số lượng đặt hàng của một vật tư trong một số đặt hàng
b Xây dựng thủ tục tính tổng số lượng đã nhập hàng với tên
spud_PNHAP_TinhTongSLNHang gồm có 2 tham số vào là: Số đặt hàng và mã vật
tư, 1 tham số ra là : Tổng số lượng đã nhập hàng của một vật tư trong một số đặt hàng
c Xây dựng thủ tục tính số lượng tồn kho cuối kỳ của một vật tư với tên
spud_TONKHO_TinhTonCuoi có 2 tham số vào là: Năm tháng và mã vật tư, 1
tham số ra là: Số lượng cuối kỳ của một vật tư trong năm tháng truyền vào
4.2 Trong CSDL quản lý bán hàng, tạo các thủ tục nội tại cập nhật dữ liệu trong bảng VATTU Các thủ tục này có kiểm tra các ràng buộc dữ liệu và thông báo ra các
lỗi rõ ràng khi dữ liệu vi phạm các ràng buộc
a Xây dựng thủ tục thêm mới dữ liệu vào bảng VATTU với tên spud_VATTU_Them gồm có 4 tham số vào chính là giá trị thêm mới cho các cột
trong bảng VATTU: Mã vật tư, tên vật tư, đơn vị tính và phần trăm Trong đó cần kiểm tra các ràng buộc dữ liệu phải hợp lệ trước khi thực hiện lệnh INSERT INTO để thêm dữ liệu vào bảng VATTU
- Mã vật tư phải duy nhất
b Xây dựng thủ tục xóa một vật tư có trong bảng VATTU bới tên spud_VATTU_Xoa gồm có 1 tham số vào chính là mã vật tư cần xóa Trong đó cần
kiểm tra tính ràng buộc dữ liệu trước khi thực hiện lệnh DELETE để xóa dữ liệu trong bảng VATTU
- Mã vật tư phải chưa có trong bảng CTDONDH
- Mã vật tư phải chưa có trong bảng CTPXUAT
- Mã vật tư phải chưa có trong bảng TONKHO
c Xây dựng thủ tục sửa đổi vật tư trong bảng VATTU theo giá trị Mã vật tư
nhập vào với tên spud_VATTU_Sua gồm có 4 tham số vào chính là giá trị cần thay đổi của các cột trong bảng VATTU: Mã vật tư, tên vật tư, đơn vị trính và phần trăm Trong thủ tục chỉ thực hiện lệnh UPDATE SET để cập nhật dữ liệu vào bảng VATTU
với các giá trị cần thay đổi Đưa ra thông báo đã sửa giá trị nào, không sửa nếu giá trị
đó là giá trị hiện tại của bảng.(Chú thích: Nếu Mã vật tư cần sửa không có trong bảng
thì đưa ra thông báo: “Không tìm thấy MÃ VẬT TƯ như bạn yêu cầu” và không sửa
Trang 12thông tin Nếu tất cả 4 thông số cần sửa trùng với giá trị tương ứng của bảng thì đưa
ra thông báo: “Đã tồn tại giá trị này trong bảng Không cần sửa đổi” và không sửa thông tin Còn sửa thông tin nào thì đưa ra thông báo đã sửa VD: “Đã cập nhật cột PHẦN TRĂM”, )
4.3 Trong CSDL quản lý bán hàng, tạo các thủ tục nội tại liệt kê dữ liệu với các
yêu cầu sau:
a Xây dựng thủ tục liệt kê các cột dữ liệu trong bảng VATTU với tên spud_VATTU_BcaoDanhSach, thủ tục này không có tham số nào Hành động duy nhất trong thủ tục này đơn giản chỉ là một câu lệnh truy vấn SELECT * FROM VATTU có sắp xếp theo thứ tự tên vật tư tăng dần.
b Xây dựng thủ tục liệt kê các cột dữ liệu trong bảng TONKHO có thể hiện thêm cột TENVTU trong bảng VATTU với tên spud_TONKHO_BcaoTonKho gồm
có 1 tham số vào là năm tháng muốn lọc dữ liệu
c Xây dựng thủ tục liệt kê các cột dữ liệu trong hai bảng dữ liệu PXUAT và CTPXUAT có thể hiện thêm cột TENVTU trong bảng VATTU với tên là
spud_PXUAT_BcaoPhieuXuat gồm có 1 tham số vào là: Số phiếu xuất muốn lọc dữ
liệu có giá trị mặc định là NULL Tuy nhiên nếu lúc gọi thủ tục mà không truyền giá
trị số phiếu xuất vào thì xem như không lọc gì cả, khi đó thủ tục sẽ liệt kê tất cả phiếu xuất trong bảng PXUAT
4.4 Trong CSDL quản lý bán hàng, tạo các thủ tục nội tại dùng cho việc cập
nhật dữ liệu trong bảng DONDH, CTDONDH để về sau sử dụng trong đơn đặt hàng Các thủ tục này có kiểm tra các ràng buộc dữ liệu và thông báo ra các lỗi rõ ràng khi
dữ liệu vi phạm các ràng buộc
a Xây dựng thủ tục thêm mới dữ liệu vào bảng DONDH với tên spud_DONDH_Them gồm có 3 tham số vào là giá trị thêm mới cho các cột trong
bảng DONDH: Số đặt hàng, mã nhà cung cấp, ngày đặt hàng Trong đó cần kiểm tra
các ràng buộc dữ liệu phải hợp lệ trước khi thực hiện lệnh INSERT để thêm dữ liệu vào bảng DONDH
- Số đặt hàng phải là duy nhất
- Mã nhà cung cấp phải có bên bảng NHACC
- Ngày đặt hàng có thể không truyền vào (optional), khi đó sẽ lấy ngày hiện hành truyền vào
b Xây dựng thủ tục xóa DONDH với tên spud_DONDH_Xoa gồm có 1 tham
số vào chính là số đặt hàng cần xóa Tuy nhiên nếu ràng buộc dữ liệu hợp lệ thì xóa tự động luôn các dòng dữ liệu liên quan trong bảng CTDONDH Trong đó cần kiểm tra ràng buộc dữ liệu trước khi thực hiện lệnh DELETE để xóa dữ liệu trong bảng DONDH
- Số đặt hàng chưa có trong bảng PNHAP
c Xây dựng thủ tục sửa đổi dữ liệu trong bảng DONDH với tên spud_DONDH_Sua gồm có 3 tham số vào chính là giá trị cần thay đổi của các cột
trong bảng DONDH: Số đặt hàng, mã nhà cung cấp, ngày đặt hàng Trong đó cần
Trang 13kiểm tra các ràng buộc dữ liệu phải hợp lệ trước khi thực hiện lệnh UPDATE SET để cập nhật dữ liệu vào bảng DONDH
- Mã nhà cung cấp phải có bên bảng NHACC
- Ngày đặt hàng phải trước ngày nhập hàng (Nếu đơn đặt hàng đã được nhập về rồi)
d Xây dựng thủ tục thêm mới dữ liệu vào bảng CTDONDH với tên spud_CTDONDH_Them gồm có 3 tham số chính là giá trị thêm mới cho các cột
trong bảng CTDONDH: Số đặt hàng, mã vật tư, số lượng đặt hàng Trong đó cần
kiểm tra các ràng buộc dữ liệu phải hợp lệ trước khi thực hiện lệnh INSERT để thêm
dữ liệu vào bảng CTDONDH
- Số đặt hàng phải có bên bảng DONDH
- Mã vật tư phải có bên bảng VATTU
- Số đặt hàng và mã vật tư phải duy nhất trong bảng CTDONDH
e Xây dựng thủ tục xóa CTDONDH với tên spud_CTDONDH_Xoa gồm có 2
tham số vào chính là số đặt hàng và mã vật tư cần xóa Trong đó cần kiểm tra ràng
buộc dữ liệu trước khi thực hiện lệnh DELETE để xóa dữ liệu trong bảng CTDONDH
- Số đặt hàng và mã vật tư này chưa được nhập hàng trong các bảng liên quan PNHAP và CTPNHAP
f Xây dựng thủ tục sửa đổi dữ liệu trong bảng CTDONDH với tên spud_CTDONDH_Sua gồm có 3 tham số vào chính là giá trị cần thay đổi của các
cột trong bảng CTDONDH: Số đặt hàng, mã vật tư, số lượng đặt hàng Trong đó cần
kiểm tra các ràng buộc dữ liệu phải hợp lệ trước khi thực hiện lênh UPDATE SET để cập nhật dữ liệu vào bảng CTDONDH
- Số đặt hàng và mã vật tư có bên bảng CTDONDH
- Số lượng đặt mới phải >= tổng số lượng đã nhập hàng (Nếu đã có nhập hàng)
BÀI 5: HÀM DO NGƯỜI DÙNG ĐỊNH NGHĨA 5.1 Xây dựng các hàm đơn trị sau:
a Xây dựng hàm Fn_TongNhapThang(@NamThang, @MaVTu) trả về tổng số lượng đã nhập trong tháng của vật tư
b Xây dựng hàm Fn_TongXuatThang(@NamThang, @MaVTu) trả về tổng số lượng đã xuất trong tháng của vật tư
c Xây dựng hàm Fn_TongNhap(@SoDH, @MaVTu) trả về tổng số lượng đã nhập của vật tư theo số đặt hàng
d Xây dựng hàm Fn_ConNhap((@SoDH, @MaVTu) trả về số lượng còn phải nhập của vật tư theo số đặt hàng (Có sử dụng hàm Fn_TongNhap)
e Xây dựng hàm tồn kho Fn_TonKho(@NamThang, @MaVTu) trả về số lượng tồn kho của vật tư theo năm tháng