Upload
thuhuynhphonegap
View
61
Download
4
Embed Size (px)
Citation preview
1
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
LỜI NGỎ Trong xu thế phát triển hiện nay trên thế giới khoa học và công nghệ luôn
có những thay đổi mạnh mẽ. Một phần trong đó là việc ứng dụng Công Nghệ
Thông Tin vào đời sống hàng ngày của con người. Loài người chúng ta đang
hướng tới thiết lập một hành tinh thông minh. Ngày nay với sự phát triển mạnh
mẽ của CNTT kết hợp với sự phát triển của mạng Internet đã kết nối được toàn
thế giới lại với nhau thành một thể thống nhất. Nó đã trở thành công cụ đắc lực
cho nhiều ngành nghề : giao thông, quân sự, y học…và đặc biệt là trong công tác
chuẩn đoán sự cố máy tính.
Trước đây khi máy tính chưa được ứng dụng rộng rãi các công việc quản
lý đều được thực hiện một cách thủ công nên rất tốn thời gian, nhân lực cũng như
tài chính. Ngày nay với sự phát triển mạnh mẽ của công nghệ thông tin đã giúp
cho việc chuẩn đoán sự cố máy tính được thực hiện một cách dễ dàng hơn, giảm
chi phí, thời gian… Qua quá trình khảo những hư hỏng thực tế của máy tính, em
đã xây dựng lên đề tài hệ chuyên gia chuẩn đoán sự cố máy tính với mong muốn
giúp cho việc sửa chữa máy tính được thực hiện một cách dễ dàng hơn, thuận tiện
và giảm thiểu được các sai xót.
Nhờ sự quan tâm, hướng dẫn của Thầy Phùng Thế Bảo, chúng em đã
từng bước nghiên cứu và vận dụng các kiến thức đã được học để tìm hiểu, phân
tích và xây dựng được hệ chuyên gia chuẩn đoán đáp ứng tương đối một số các
yêu cầu đặt ra.Tuy nhiên, do kiến thức còn hạn chế nên chương trình vẫn không
tránh khỏi những thiếu sót. Vì vậy, chúng em rất mong nhận được sự đóng góp ý
kiến của tất cả các thầy cô để có thể từng bước xây dựng chương trình ngày càng
hoàn thiện và hiệu quả hơn.
2
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
MỤC LỤC
CHƯƠNG I: PHÂN TÍCH THIẾT KẾ HỆ THỐNG ............ 4
1. Mô tả bài toán ........................................................................................... 4
2. Mô tả các chức năng của hệ thống ....................................................... 5
3. Xây dựng mô hình liên kết thực thể .................................................... 7
4. Mô hình quan hệ ERD ............................................................................ 8
5. Mô tả các bảng ......................................................................................... 9
CHƯƠNG II: CÀI ĐẶT CƠ SỞ DỮ LIỆU ............................... 16
1. Cài đặt các bảng .................................................................................... 16
2. Câu lệnh ................................................................................................... 20
3. Truy vấn ................................................................................................... 40
4. Thủ tục ...................................................................................................... 46
5. Trigger...................................................................................................... 60
6. Phân quyền .............................................................................................. 76
a. BANHANG: ........................................................................................... 76
b. KIEMKHO: ............................................................................................ 77
c. QUANLY: .............................................................................................. 79
d. GIAMDOC: ............................................................................................ 81
CHƯƠNG III: TỔNG KẾT ................................................................ 82
3
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
PHỤ LỤC TRA CỨU HÌNH
Hình 1.1: Sơ đồ thực thể ....................................................................................... 7
Hình 1.2: Sơ đồ ERD ............................................................................................. 8
Hình 2.1: Kết quả sinh phân quyền BANHANG ................................................. 77
Hình 2.2: Kết quả sinh phân quyền KIEMKHO ................................................. 78
Hình 2.3: Kết quả sinh phân quyền QUANLY .................................................... 80
Hình 2.4: Kết quả sinh phân quyền GIAMDOC ................................................. 81
BẢNG
Bảng 1.1. dbo.BAOCAO ........................................................................................ 9
Bảng 1.2: dbo.CHINHANH ................................................................................... 9
Bảng 1.3: dbo.CHITIET_CONGTHUC ................................................................ 9
Bảng 1.4: dbo.CHITIET_HOADON ..................................................................... 9
Bảng 1.5: dbo.CHITIET_PHIEUNHAP ............................................................. 10
Bảng 1.6: dbo.CHUCVU ..................................................................................... 10
Bảng 1.7: dbo.DIACHI_CHINHANH ................................................................. 10
Bảng 1.8: dbo.DIACHI_NHACUNGCAP ........................................................... 10
Bảng 1.9: dbo.DIACHI_NHANVIEN .................................................................. 11
Bảng 1.10: dbo.EMAIL_NHACUNGCAP .......................................................... 11
Bảng 1.11: dbo.EMAIL_NHANVIEN .................................................................. 11
Bảng 1.12: dbo.HOADON .................................................................................. 11
Bảng 1.13: dbo.KHUVUC ................................................................................... 12
Bảng 1.14: dbo.LOAITHUCUONG .................................................................... 12
Bảng 1.15: dbo.NGUYENLIEU .......................................................................... 12
Bảng 1.16: dbo.NHACUNGCAP ........................................................................ 12
Bảng 1.17: dbo.QUAN_HUYEN ......................................................................... 12
Bảng 1.18: dbo.NHANVIEN ............................................................................... 13
Bảng 1.19: dbo.PHIEUCHI ................................................................................ 13
Bảng 1.20: dbo.PHIEUNHAP ............................................................................. 13
Bảng 1.21: dbo.PHIEUPHUTHU ....................................................................... 14
Bảng 1.22: dbo.SDT_CHINHANH ..................................................................... 14
Bảng 1.23: dbo.SDT_NHACUNGCAP ............................................................... 14
Bảng 1.24: dbo.SDT_NHANVIEN ...................................................................... 14
Bảng 1.25: dbo.THUCUONG ............................................................................. 15
Bảng 1.26: dbo.TINH_THANHPHO .................................................................. 15
4
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
CHƯƠNG I: PHÂN TÍCH THIẾT KẾ HỆ THỐNG
1. Mô tả bài toán:
Một chuỗi hệ thống quán coffee take away Highlands Coffee tại TP. Hồ Chí
Minh có nhiều chi nhánh ở nhiều quận khác nhau trong thành phố. Với mỗi chi
nhánh của hệ thống, các hoạt động đều theo mô hình chung gồm: nhập hàng, bán
hàng, … Để các hoạt động này được diễn ra thuận lợi, chúng ta cần có một cơ sở
dữ liệu hoàn chỉnh theo quy trình: nhập nguyên liệu, bán hàng, các khoản phụ thu
dịch vụ, tổng chi, doanh thu, lợi nhuận.
- Nhập nguyên liệu:
Những nguyên liệu dùng để pha chế các món sẽ được nhập từ nhiều nhà cung
cấp. Nhân viên kiểm tra tồn kho bằng hệ thống, lập danh sách những nguyên liệu
cần nhập, liên hệ với nhà sản xuất đặt hàng. Khi nhận được hàng, tiến hành kiểm
tra chất lượng nếu đúng yêu cầu thì nhân viên tiến hành xuất phiếu nhập hàng và
thanh toán.
- Bán hàng:
Khi khách hàng có nhu cầu mua thức uống, khách hàng cần xác định các yêu
cầu về: hình thức, khu vực uống, loại thức uống.
Hình thức uống bao gồm: dùng tại quán hoặc mang về.
Mang về: khách hàng sẽ được giảm 5%/ thức uống so với giá hiện tại trên
menu.
Dùng tại quán: khách hàng sẽ chọn khu vực ngồi ứng với mỗi loại giá khác
nhau.
o Khu A (có phòng riêng, dành cho những cuộc họp, hoặc những khách
hàng cần sự yên tĩnh, có wifi riêng, có máy lạnh) giá thức uống sẽ tăng
thêm 5%/thức uống so với giá trên menu.
o Khu B (phòng máy lạnh, có wifi) sẽ bán đúng giá trên menu.
o Khu C (ngoài trời, có wifi) sẽ bán đúng giá trên menu.
Nhân viên xác nhận lại đúng thức uống khách đã chọn, sau đó tiến hành in hóa
đơn và thanh toán trực tiếp tại quầy cho khách. Khi hóa đơn được xuất, hệ thống
sẽ tự động trừ số lượng nguyên liệu đã dùng dựa vào công thức của thức uống đó.
Nhờ đó, cơ sở dữ liệu sẽ quản lý được số lượng còn lại của nguyên liệu để có kế
hoạch nhập hàng hợp lý, và đối chiếu với số lượng trên thực tế nhằm đánh giá
được lượng nguyên liệu hao hụt.
- Các khoản phụ thu dịch vụ:
Quán sẽ có một số khoản phụ thu như quay phim tại quán phụ thu
300.000đ/giờ, chụp hình (quảng cáo, người mẫu, bộ ảnh kỉ niệm) phụ thu
100.000đ/giờ. Số tiền phụ thu này sẽ được lưu vào hệ thống thông qua phiếu phụ
thu, để tính doanh thu.
- Tổng chi:
5
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Các khoản chi chung được cập nhật tổng quát vào hệ thống như: tiền nhập
nguyên liệu, tiền điện, tiền nước, lương nhân viên, tiền mặt bằng,… là dữ liệu mở,
có thể liên kết với cơ sở dữ liệu khác.
- Doanh thu:
Doanh thu là tổng tiền của tiền bán hàng và các khoản phụ thu dịch vụ. Doanh
thu sẽ được cập nhật theo ngày/ tháng/ quý/ năm tùy theo yêu cầu của người dùng.
- Lợi nhuận:
Lợi nhuận hàng tháng là số tiền của tổng doanh thu trừ tổng chi. Lợi nhuận có
thể được tính theo ngày/ tháng/ quý/ năm.
- Báo cáo:
Hàng tháng/ quý/ năm nhân viên sẽ xuất báo cáo doanh thu và lợi nhuận theo
yêu cầu của quản lý
2. Mô tả các chức năng của hệ thống
Hệ thống quản lý quán café Highlands Coffee sẽ gồm các chức năng
Quản lý nhập nguyên liệu:
o Tìm nguyên liệu: khi cần kiểm tra số lượng nguyên liệu (kiểm tra tồn
kho) hoặc khi xem thông tin nguyên liệu.
o Cập nhật: sau khi đã xuất hóa đơn nhập hàng, số lượng của loại nguyên
liệu sẽ được cập nhật lại trong hệ thống. Hoặc sau khi kiểm tra kho trong
thực tế, số lượng nguyên liệu cũng sẽ được cập nhật lại.
o Thêm: thêm nguyên liệu mới khi có món mới.
o Xóa: xóa nguyên liệu khi không còn dùng nữa.
o Lưu phiếu nhập hàng: lưu lại phiếu nhập vào hệ thống sau mỗi lần nhập
hàng.
Quản lý bán hàng:
o Tìm thức uống: giúp cho việc tìm thức uống để chọn thêm vào hóa đơn
được nhanh và chính xác hơn.
o Xem công thức: có thể dùng để xem lại trong những lúc cần thiết
o Chọn khu vực: sau khi xác định được vị trí khách muốn ngồi, hóa đơn
sẽ được điều chỉnh giá phù hợp với khu vực đó.
o Chọn thức uống: thức uống được thêm vào hóa đơn theo yêu cầu của
khách.
o In hóa đơn: sau khi hóa đơn được in, nguyên lại để làm thức uống trong
hóa đơn sẽ được tự động từ vào hệ thống và tiền trên hóa đơn cũng sẽ
được lưu lại để tính doanh thu.
Quản lý nhân viên:
o Thêm: khi có nhân viên mới, quản lý sẽ tạo cho nhân viên đó một tài
khoản để đăng nhập vào hệ thống
o Xóa: khi có nhân viên nghỉ việc, tài khoản của nhân viên đó cũng sẽ bị
xóa khỏi hệ thống.
6
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
o Cập nhật: chức năng này có thể chỉnh sửa thông tin cá nhân của nhân
viên, hoặc phân quyền lại khi nhân viên được thay đổi chức vụ.
o Lương nhân viên: mỗi ca nhân viên làm sẽ được đánh dấu lại và hệ thống
sẽ tính lương cho nhân viên theo hệ số lương tương ứng (dữ liệu mở).
Báo cáo:
o Lập báo cáo doanh thu: làm thống kê – báo cáo theo doanh thu bán hàng
và các khoản phụ thu theo ngày, tháng hoặc thức uống tùy vào yêu cầu
của chủ quán.
o Lập báo cáo nhập hàng: thống kê số lượng nguyên liệu, tiền nhập nguyên
liệu đã nhập theo ngày, tháng, quý hoặc năm.
o Lập báo cáo chi: có thể lập báo cáo chi tiền lương nhân viên, tiền điện,
nước, mặt bằng, …
o Lập báo cáo lợi nhuận: lập báo cáo lợi nhuận (lợi nhuận = doanh thu –
chi) theo ngày, tháng, quý hoặc năm.
Quản lý doanh thu:
o Xem doanh thu: giúp cho quản lý có thể xem và kiểm soát được doanh
thu.
Quản lý thức uống:
o Thêm: bổ sung thức uống mới vào hệ thống, kèm theo công thức của nó.
o Xóa: xóa bỏ thức uống khỏi hệ thống khi thức uống đó không còn bán
trong quán.
o Cập nhật: cập nhật lại tên, đơn giá hoặc công thức của thức uống đó.
Phân quyền: phân quyền sử dụng phần mềm cho 4 nhóm: bán hàng, quản
lý, kiểm kho và giám đốc khi đăng nhập vào hệ thống.
o Nhân viên: Được phép xem và thêm vào bảng: PHIEUPHUTHU
CHITIET_HOADON, HOADON, PHIEUCHI. Chỉ được quyền xem ở
bảng: LOAITHUCUONG, NGUYENLIEU, KHUVUC, CHINHANH,
THUCUONG, CHITIET_CONGTHUC.
o Kiểm kho: Được phép xem và thêm ở các bảng: PHIEUNHAP,
NGUYENLIEU, CHITIET_PHIEUNHAP.
o Quản lý: Được phép xem, thêm và sửa ở các bảng: BAOCAO,
DIACHI_CHINHANH, CHITIET_CONGTHUC, DIACHI_NHANVIEN
KHUVUC, CHINHANH, DIACHI_NCC, EMAIL_NCC, KHUVUC,
EMAIL_NHANVIEN, SDT_NHACUNGCAP, SDT_CHINHANH,
QUAN_HUYEN, SDT_NHANVIEN, NHANVIEN, TINH_THANHPHO,
LOAITHUCUONG, NHACUNGCAP. Thêm và xem ở các bảng:
CHITIET_HOADON, PHIEUPHUTHU, HOADON, PHIEUNHAP,
CHITIET_PHIEUNHAP, PHIEUCHI, THUCUONG. Xem ở bảng
CHUCVU.
o Giám đốc: Toàn quyền với hệ thống.
7
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
3. Xây dựng mô hình liên kết thực thể
Hình 1.1: Sơ đồ thực thể
8
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
4. Mô hình quan hệ ERD
Hìn
h 1
.2:
Sơ
đồ
ER
D
9
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
5. Mô tả các bảng
Tên trường Mô tả Kiểu dữ liệu Độ dài
MABC Mã báo cáo Char 10
MANV Mã nhân viên Char 5
TENBC Tên báo cáo Nvarchar 10
NGAYLAP Ngày lập báo cáo Datetime
NOIDUNG Nội dung báo cáo Nvarchar Max
Bảng 1.1. dbo.BAOCAO
Tên trường Mô tả Kiểu dữ liệu Độ dài
MACN Mã chi nhánh Char 5
TENCN Tên chi nhánh Nvarchar 100
HESOGIA Hệ số giá Float
Bảng 1. 2: dbo.CHINHANH
Tên trường Mô tả Kiểu dữ liệu Độ dài
MATU Mã thức uống Char 5
MANL Mã nguyên liệu Char 10
SOLUONG Số lượng Float
Bảng 1.3: dbo.CHITIET_CONGTHUC
Tên trường Mô tả Kiểu dữ liệu Độ dài
MATU Mã thức uống Char 5
MAHD Mã hóa đơn Char 10
SOLUONG Số lượng Float
Bảng 1.4: dbo.CHITIET_HOADON
10
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Tên trường Mô tả Kiểu dữ liệu Độ dài
MANL Mã nguyên liệu Char 10
MAPN Mã phiếu nhập Char 10
SOLUONG Số lượng Float
Bảng 1.5: dbo.CHITIET_PHIEUNHAP
Tên trường Mô tả Kiểu dữ liệu Độ dài
MACV Mã chức vụ Char 3
TENCV Tên chức vụ Nvarchar 50
Bảng 1.6: dbo.CHUCVU
Tên trường Mô tả Kiểu dữ liệu Độ dài
MACN Mã chi nhánh Char 5
MATP Mã thành phố Char 5
MAQ Mã quận Char 5
DIACHI Địa chỉ Nvarchar 100
Bảng 1.7: dbo.DIACHI_CHINHANH
Tên trường Mô tả Kiểu dữ liệu Độ dài
MANCC Mã nhà cung cấp Char 5
MATP Mã thành phố Char 5
MAQ Mã quận Char 5
DIACHI Địa chỉ Nvarchar 100
Bảng 1.8: dbo.DIACHI_NHACUNGCAP
11
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Tên trường Mô tả Kiểu dữ liệu Độ dài
MANV Mã nhân viên Char 5
MATP Mã thành phố Char 5
MAQ Mã quận Char 5
DIACHI Địa chỉ Nvarchar 100
Bảng 1.9: dbo.DIACHI_NHANVIEN
Tên trường Mô tả Kiểu dữ liệu Độ dài
MANCC Mã nhà cung cấp Char 5
MAE Mã email Char 5
EMAIL Email Nvarchar 50
Bảng 1.10: dbo.EMAIL_NHACUNGCAP
Tên trường Mô tả Kiểu dữ liệu Độ dài
MANV Mã nhân viên Char 5
MAE Mã email Char 5
EMAIL Email Nvarchar 50
Bảng 1.11: dbo.EMAIL_NHANVIEN
Tên trường Mô tả Kiểu dữ liệu Độ dài
MAHD Mã hóa đơn Char 50
MANV Mã nhân viên bán hàng Char 5
MAKV Mã khu vực Nvarchar 3
NGAYLAP Ngày lập hóa đơn Datetime
TONGTIEN Tổng tiền hóa đơn Decimal 18,0
Bảng 1.12: dbo.HOADON
12
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Tên trường Mô tả Kiểu dữ liệu Độ dài
MAKV Mã khu vực Char 3
TENKV Tên khu vực Nvarchar 10
HESOGIA Hệ số giá Float
Bảng 1.13: dbo.KHUVUC
Tên trường Mô tả Kiểu dữ liệu Độ dài
MALOAI Mã loại thức uống Char 5
TENLOAI Tên loại thức uống Nvarchar 100
Bảng 1.14: dbo.LOAITHUCUONG
Tên trường Mô tả Kiểu dữ liệu Độ dài
MANL Mã nguyên liệu Char 10
TENNL Tên nguyên liệu Nvarchar 100
SOLUONG Số lượng Float
DONVI Đơn vị tính Nvarchar 25
Bảng 1.15: dbo.NGUYENLIEU
Tên trường Mô tả Kiểu dữ liệu Độ dài
MANCC Mã nhà cung cấp Char 5
TENNCC Tên nhà cung cấp Nvarchar 100
Bảng 1.16: dbo.NHACUNGCAP
Tên trường Mô tả Kiểu dữ liệu Độ dài
MAQ Mã quận Char 5
TENQ Tên quận Nvarchar 50
Bảng 1.17: dbo.QUAN_HUYEN
13
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Tên trường Mô tả Kiểu dữ liệu Độ dài
MANV Mã nhân viên Char 5
TENNV Tên nhân viên Nvarchar 100
MACV Mã chức vụ Char 3
MACN Mã chi nhánh Char 3
NGAYSINH Ngày sinh Datetime
GIOITINH Giới tính Bit
Bảng 1.18: dbo.NHANVIEN
Tên trường Mô tả Kiểu dữ liệu Độ dài
MAPC Mã phiếu chi Char 10
MANV Mã nhân viên Char 5
NOIDUNGCHI Nội dung chi Nvarchar Max
NGAYLAP Ngày lập Datetime
TONGTIEN Tổng tiền trong phiếu chi Decimal 18,0
Bảng 1.19: dbo.PHIEUCHI
Tên trường Mô tả Kiểu dữ liệu Độ dài
MAPN Mã phiếu nhập Char 10
MANV Mã nhân viên Char 5
MANCC Mã nhà cung cấp Char 5
NGAYLAP Ngày lập Datetime
TONGTIEN Tổng tiền phiếu nhập Decimal 18,0
Bảng 1.20: dbo.PHIEUNHAP
14
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Tên trường Mô tả Kiểu dữ liệu Độ dài
MAPHIEUPT Mã phiếu phụ thu Char 10
MANV Mã nhân viên Char 5
TENPPT Tên phiếu phụ thu Nvarchar 100
NGAYLAP Ngày lập Datetime
SOTIEN Tổng tiền phiếu phụ thu Decimal 18,0
Bảng 1.21: dbo.PHIEUPHUTHU
Tên trường Mô tả Kiểu dữ liệu Độ dài
MACN Mã chi nhánh Char 5
MADT Mã điện thoại Char 5
SODT Số điện thoại Nvarchar 50
Bảng 1.22: dbo.SDT_CHINHANH
Tên trường Mô tả Kiểu dữ liệu Độ dài
MANCC Mã nhà cung cấp Char 5
MADT Mã điện thoại Char 5
SODT Số điện thoại Nvarchar 50
Bảng 1.23: dbo.SDT_NHACUNGCAP
Tên trường Mô tả Kiểu dữ liệu Độ dài
MANV Mã nhân viên Char 5
MADT Mã điện thoại Char 5
SODT Số điện thoại Nvarchar 50
Bảng 1.24: dbo.SDT_NHANVIEN
15
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Tên trường Mô tả Kiểu dữ liệu Độ dài
MATU Mã thức uống Char 5
MALOAI Mã loại thức uống Char 5
TENTU Tên thức uống Nvarchar 100
DONGIA Đơn giá Decimal 18,0
Bảng 1.25: dbo.THUCUONG
Tên trường Mô tả Kiểu dữ liệu Độ dài
MATP Mã thành phố Char 5
TENTP Tên thành phố Nvarchar 50
Bảng 1.26: dbo.TINH_THANHPHO
16
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
CHƯƠNG II: CÀI ĐẶT CƠ SỞ DỮ LIỆU
1. Cài đặt các bảng:
a. Tạo bảng TINH_THANHPHO
CREATE TABLE TINH_THANHPHO ( MATP CHAR(5) NOT NULL, TENTP nvarchar(50), PRIMARY KEY (MATP) )
b. Tạo bảng QUAN_HUYEN
CREATE TABLE QUAN_HUYEN ( MAQ CHAR(5) NOT NULL, TENQ nvarchar(50), PRIMARY KEY (MAQ) )
c. Tạo bảng KHUVUC
CREATE TABLE KHUVUC ( MAKV CHAR(3) NOT NULL, TENKV NVARCHAR(10), HESOGIA FLOAT PRIMARY KEY (MAKV) )
d. Tạo bảng NHACUNGCAP
CREATE TABLE NHACUNGCAP ( MANCC CHAR(5) NOT NULL, TENNCC NVARCHAR(100) NOT NULL, PRIMARY KEY (MANCC) )
e. Tạo bảng DIACHI_NCC
CREATE TABLE DIACHI_NCC ( MANCC CHAR(5) NOT NULL, MATP CHAR(5) NOT NULL, MAQ CHAR(5) NOT NULL, DIACHI nvarchar(100) NOT NULL, PRIMARY KEY (MANCC), FOREIGN KEY (MATP) REFERENCES TINH_THANHPHO(MATP), FOREIGN KEY (MAQ) REFERENCES QUAN_HUYEN(MAQ), FOREIGN KEY (MANCC) REFERENCES NHACUNGCAP(MANCC) )
f. Tạo bảng SDT_NHACUNGCAP
CREATE TABLE SDT_NHACUNGCAP ( MANCC CHAR(5) NOT NULL, MADT CHAR(5) NOT NULL, SODT nvarchar(50), PRIMARY KEY (MADT), FOREIGN KEY (MANCC) REFERENCES NHACUNGCAP(MANCC) )
17
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
g. Tạo bảng EMAIL_NCC
CREATE TABLE EMAIL_NCC ( MANCC CHAR(5) NOT NULL, MAE CHAR(5) NOT NULL, EMAIL nvarchar(50), PRIMARY KEY (MAE), FOREIGN KEY (MANCC) REFERENCES NHACUNGCAP(MANCC) )
h. Tạo bảng CHINHANH
CREATE TABLE CHINHANH ( MACN CHAR(5) NOT NULL, TENCN nvarchar(100), HESOGIA FLOAT PRIMARY KEY (MACN) )
i. Tạo bảng SDT_CHINHANH
CREATE TABLE SDT_CHINHANH ( MACN CHAR(5) NOT NULL, MADT CHAR(5) NOT NULL, SODT nvarchar(50), PRIMARY KEY (MADT), FOREIGN KEY (MACN) REFERENCES CHINHANH(MACN) )
j. Tạo bảng DIACHI_CHINHANH
CREATE TABLE DIACHI_CHINHANH ( MACN CHAR(5) NOT NULL, MATP CHAR(5) NOT NULL, MAQ CHAR(5) NOT NULL, DIACHI nvarchar(100) NOT NULL, PRIMARY KEY (MACN), FOREIGN KEY (MATP) REFERENCES TINH_THANHPHO(MATP), FOREIGN KEY (MAQ) REFERENCES QUAN_HUYEN(MAQ), FOREIGN KEY (MACN) REFERENCES CHINHANH(MACN) )
k. Tạo bảng CHUCVU
CREATE TABLE CHUCVU ( MACV CHAR(3) NOT NULL, TENCV nvarchar(50), PRIMARY KEY (MACV) )
l. Tạo bảng NHANVIEN
CREATE TABLE NHANVIEN ( MANV CHAR(5) NOT NULL, TENNV nvarchar(100), MACV CHAR(3) NOT NULL, MACN CHAR(5) NOT NULL, NGAYSINH DATETIME, GIOITINH BIT, NGAYVAO DATETIME, NGAYNGHI DATETIME
18
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
PRIMARY KEY (MANV), FOREIGN KEY (MACV) REFERENCES CHUCVU(MACV), FOREIGN KEY (MACN) REFERENCES CHINHANH(MACN) )
m. Tạo bảng DIACHI_NHANVIEN
CREATE TABLE DIACHI_NHANVIEN ( MANV CHAR(5) NOT NULL, MATP CHAR(5) NOT NULL, MAQ CHAR(5) NOT NULL, DIACHI nvarchar(100) NOT NULL, PRIMARY KEY (MANV), FOREIGN KEY (MATP) REFERENCES TINH_THANHPHO(MATP), FOREIGN KEY (MAQ) REFERENCES QUAN_HUYEN(MAQ), FOREIGN KEY (MANV) REFERENCES NHANVIEN(MANV) )
n. Tạo bảng SDT_NHANVIEN
CREATE TABLE SDT_NHANVIEN ( MANV CHAR(5) NOT NULL, MADT CHAR(5) NOT NULL, SODT nvarchar(50), PRIMARY KEY (MADT), FOREIGN KEY (MANV) REFERENCES NHANVIEN(MANV) )
o. Tạo bảng EMAIL_NHANVIEN
CREATE TABLE EMAIL_NHANVIEN ( MANV CHAR(5) NOT NULL, MAE CHAR(5) NOT NULL, EMAIL nvarchar(50), PRIMARY KEY (MAE), FOREIGN KEY (MANV) REFERENCES NHANVIEN(MANV) )
p. Tạo bảng PHIEUCHI
CREATE TABLE PHIEUCHI ( MAPC CHAR(10) NOT NULL, MANV CHAR(5) NOT NULL, NOIDUNGCHI nvarchar(max), NGAYLAP DATETIME, TONGTIEN DECIMAL PRIMARY KEY (MAPC) FOREIGN KEY (MANV) REFERENCES NHANVIEN(MANV) )
q. Tạo bảng PHIEUPHUTHU
CREATE TABLE PHIEUPHUTHU ( MAPHIEUPT CHAR(10) NOT NULL, MANV CHAR(5) NOT NULL, TENPPT NVARCHAR(100), NGAYLAP DATETIME, SOTIEN DECIMAL PRIMARY KEY (MAPHIEUPT) CONSTRAINT FK_PHIEUPHUTHU_MANV FOREIGN KEY(MANV) REFERENCES NHANVIEN(MANV) )
19
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
r. Tạo bảng PHIEUNHAP
CREATE TABLE PHIEUNHAP ( MAPN CHAR(10) NOT NULL, MANV CHAR(5) NOT NULL, MANCC CHAR(5) NOT NULL, NGAYLAP DATETIME, TONGTIEN DECIMAL PRIMARY KEY (MAPN) CONSTRAINT FK_PHIEUNHAP_MANV FOREIGN KEY(MANV) REFERENCES NHANVIEN(MANV), CONSTRAINT FK_PHIEUNHAP_MANCC FOREIGN KEY(MANCC) REFERENCES NHACUNGCAP(MANCC) )
s. Tạo bảng BAOCAO
CREATE TABLE BAOCAO ( MABC CHAR(10) NOT NULL, MANV CHAR(5) NOT NULL, TENBC NVARCHAR(100), NGAYLAP DATETIME, NOIDUNG nvarchar(max) PRIMARY KEY (MABC) CONSTRAINT FK_BAOCAO_MANV FOREIGN KEY(MANV) REFERENCES NHANVIEN(MANV) )
t. Tạo bảng HOADON
CREATE TABLE HOADON ( MAHD CHAR(50) NOT NULL, MANV CHAR(5) NOT NULL, MAKV CHAR(3) NOT NULL, NGAYLAP DATETIME, TONGTIEN DECIMAL PRIMARY KEY (MAHD) CONSTRAINT FK_HOADON_MANV FOREIGN KEY(MANV) REFERENCES NHANVIEN(MANV), CONSTRAINT FK_HOADON_MAKV FOREIGN KEY(MAKV) REFERENCES KHUVUC(MAKV) )
u. Tạo bảng LOAITHUCUONG
CREATE TABLE LOAITHUCUONG ( MALOAI CHAR(5) NOT NULL, TENLOAI NVARCHAR(100) PRIMARY KEY (MALOAI) )
v. Tạo bảng LOAITHUCUONG
CREATE TABLE NGUYENLIEU ( MANL CHAR(10) NOT NULL, TENNL NVARCHAR(100), SOLUONG float, DONVI nvarchar(25) PRIMARY KEY (MANL) )
w. Tạo bảng THUCUONG
CREATE TABLE THUCUONG ( MATU CHAR(5) NOT NULL, MALOAI CHAR(5) NOT NULL,
20
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
TENTU NVARCHAR(100), DONGIA DECIMAL PRIMARY KEY (MATU) CONSTRAINT FK_THUCUONG_MALOAI FOREIGN KEY(MALOAI) REFERENCES LOAITHUCUONG(MALOAI) )
x. Tạo bảng CHITIET_CONGTHUC
CREATE TABLE CHITIET_CONGTHUC ( MATU CHAR(5) NOT NULL, MANL CHAR(10) NOT NULL, SOLUONG float PRIMARY KEY (MATU,MANL) CONSTRAINT FK_CHITIET_CONGTHUC_MATU FOREIGN KEY(MATU) REFERENCES THUCUONG(MATU), CONSTRAINT FK_CHITIET_CONGTHUC_MANL FOREIGN KEY(MANL) REFERENCES NGUYENLIEU(MANL) )
y. Tạo bảng CHITIET_HOADON
CREATE TABLE CHITIET_HOADON ( MATU CHAR(5) NOT NULL, MAHD CHAR(50) NOT NULL, SOLUONG float PRIMARY KEY (MATU, MAHD) CONSTRAINT FK_CHITIET_HOADON_MATU FOREIGN KEY(MATU) REFERENCES THUCUONG(MATU), CONSTRAINT FK_CHITIET_HOADON_MAHD FOREIGN KEY(MAHD) REFERENCES HOADON(MAHD) )
z. Tạo bảng CHITIET_PHIEUNHAP
CREATE TABLE CHITIET_PHIEUNHAP ( MANL CHAR(10) NOT NULL, MAPN CHAR(10) NOT NULL, SOLUONG float PRIMARY KEY (MANL, MAPN) CONSTRAINT FK_CHITIET_PHIEUNHAP_MANL FOREIGN KEY(MANL) REFERENCES NGUYENLIEU(MANL), CONSTRAINT FK_CHITIET_PHIEUNHAP_MAPN FOREIGN KEY(MAPN) REFERENCES PHIEUNHAP(MAPN)
)
2. Câu lệnh:
INSERT
Câu 1. Viết câu lệnh thêm vào bảng CHITIET_HOADON các giá trị: MAHD
CN1KV102, MATU TU20, SOLUONG 1
Code INSERT INTO CHITIET_HOADON VALUES ('TU20','CN1KV102','1');
Kết quả test
21
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 2. Viết câu lệnh thêm vào bảng CHITIET_HOADON: MATU TU9,
MAHD CN4KV103, SOLUONG 2
Code INSERT INTO CHITIET_HOADON VALUES ('TU9','CN4KV103','2');
Test
Câu 3. Viết câu lệnh thêm vào bảng CHITIET_HOADON: MAHD
CN2KV201, MATU TU67, SOLUONG 1
Code INSERT INTO CHITIET_HOADON VALUES ('TU67','CN2KV201','1');
Kết quả test
Câu 4. Viết câu lệnh thêm bảng vào HOADON: MAHD CN3KV135, MANV
NV1, MAKV KV1, NGAYLAP 12/2/2015, TONGTIEN: 83000
Code INSERT INTO HOADON VALUES ('CN3KV135','NV1','KV1','12/2/2015',83000);
Kết quả test
Câu 5. Viết câu lệnh thêm bảng vào HOADON: MAHD CN3KV254, MANV
NV1, MAKV KV1, NGAYLAP 12/12/2015, TONGTIEN: 41000
Code INSERT INTO HOADON VALUES ('CN3KV254','NV1','KV1','12/12/2015',41000);
22
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test
Câu 6. Viết câu lệnh thêm bảng vào HOADON: MAHD CN3KV333, MANV
NV1, MAKV KV1, NGAYLAP 12/22/2015, TONGTIEN: 125000
Code INSERT INTO HOADON VALUES ('CN3KV333','NV2','KV2','12/22/2015',125000);
Kết quả test
Câu 7. Viết câu lệnh thêm vào bảng PHIEUCHI: MAPC: PC61, MANV:
NV5, NOIDUNGCHI: Rút doanh thu ngày, NGAYLAP: 11/2/2015,
TONGTIEN: 15000000
Code INSERT INTO PHIEUCHI VALUES ('PC61','NV5','Rút doanh thu ngày','11/2/2015',15000000);
Kết quả test
23
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 8. Viết câu lệnh thêm vào bảng PHIEUCHI: MAPC: PC71, MANV:
NV5, NOIDUNGCHI: Trả tiền thuê bảo vệ, NGAYLAP: 12/2/2015,
TONGTIEN: 8000000
Code INSERT INTO PHIEUCHI VALUES ('PC71','NV5','Trả tiền thuê bảo vệ','12/2/2015',8000000);
Kết quả test
Câu 9. Viết câu lệnh thêm vào bảng PHIEUCHI: MAPC: PC81, MANV:
NV5, NOIDUNGCHI: Rút doanh thu ngày, NGAYLAP: 12/2/2015,
TONGTIEN: 20000000
Code INSERT INTO PHIEUCHI VALUES ('PC81','NV5','Rút doanh thu ngày','12/2/2015',20000000);
Kết quả test
Câu 10. Viết câu lệnh thêm vào bảng PHIEUNHAP: MAPN: PN42, MANV:
NV3, MANCC: NCC2, NGAPLAP: 11/3/2015, TONGTIEN: 3000000
Code INSERT INTO PHIEUNHAP VALUES ('PN42','NV3','NCC2','11/3/2015',3000000);
Kết quả test
24
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 11. Viết câu lệnh thêm vào bảng PHIEUNHAP: MAPN: PN25, MANV:
NV3, MANCC: NCC1, NGAPLAP: 12/1/2015, TONGTIEN: 1200000
Code INSERT INTO PHIEUNHAP VALUES ('PN25','NV3','NCC1','12/1/2015',1200000);
Kết quả test
Câu 12. Viết câu lệnh thêm vào bảng PHIEUNHAP: MAPN: PN62, MANV:
NV3, MANCC: NCC4, NGAPLAP: 12/2/2015, TONGTIEN: 1800000
Code INSERT INTO PHIEUNHAP VALUES ('PN62','NV3','NCC4','12/2/2015',1800000);
Kết quả test
Câu 13. Viết câu lệnh thêm vào PHIEUPHUTHU: MAPHIEUPT: PTT63,
MANV: NV2, TENPPT: Khách làm vỡ ly, NGAYLAP: 11/20/2015, SOTIEN:
30000
Code INSERT INTO PHIEUPHUTHU VALUES ('PTT63','NV2','Khách làm vỡ ly','11/20/2015',30000);
Kết quả test
25
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 14. Viết câu lệnh thêm vào PHIEUPHUTHU: MAPHIEUPT: PTT73,
MANV: NV2, TENPPT: Quay phim, NGAYLAP: 12/1/2015, SOTIEN:
200000
Code INSERT INTO PHIEUPHUTHU VALUES ('PTT73','NV2','Quayphim','12/1/2015',200000);
Kết quả test
Câu 15. Viết câu lệnh thêm vào PHIEUPHUTHU: MAPHIEUPT: PTT83,
MANV: NV4, TENPPT: Chụp hình, NGAYLAP: 11/20/2015, SOTIEN:
100000
Code INSERT INTO PHIEUPHUTHU VALUES ('PTT83','NV4','Chụp hình','11/20/2015',100000);
Kết quả test
UPDATE:
Câu 1. Viết câu lệnh sửa tất cả mã nhân viên trong bảng PHIEUPHUTHU
thành 'NV2' trong duy nhất ngày 14/02/2015
Code UPDATE PHIEUPHUTHU SET MANV='NV2' WHERE NGAYLAP='02/14/2015'
Kết quả test
Trước khi test
Sau khi test
26
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 2. Viết câu lệnh sửa TENPPT của nhân viên có mã NV3 trong ngày
30/04/2014 thành 'Khách làm vỡ ly'
Code UPDATE PHIEUPHUTHU SET TENPPT=N'Khách làm vỡ ly' WHERE MANV='NV3' AND NGAYLAP='04/30/2015';
Kết quả test
Trước khi test
Sau khi test
Câu 3. Viết câu lệnh sửa SOTIEN của mã 'PPT3' trong bảng PHIEUPHUTHU
từ 1000000 thành 500000
Code UPDATE PHIEUPHUTHU SET SOTIEN=500000 WHERE MAPHIEUPT='PPT3';
Kết quả test
Trước khi sửa
Sau khi sửa
Câu 4. Viết câu lệnh sửa TONGTIEN(bảng PHIEUNHAP) của nhà cung cấp
có mã NCC5 trong ngày 14/03/2015 thành 3000000
Code UPDATE PHIEUNHAP SET TONGTIEN=3000000 WHERE MANCC='NCC5' AND NGAYLAP ='03/14/2015'
27
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test
Trước khi test
Sau khi test
Câu 5. Tăng hệ số giá thêm 1 cho khu vực có nhiều người uống nhất
Code
UPDATE KHUVUC SET HESOGIA=HESOGIA+1 WHERE MAKV IN( SELECT KHUVUC.MAKV FROM HOADON INNER JOIN KHUVUC ON HOADON.MAKV = KHUVUC.MAKV INNER JOIN CHITIET_HOADON ON HOADON.MAHD = CHITIET_HOADON.MAHD GROUP BY KHUVUC.MAKV, KHUVUC.TENKV HAVING (SUM(CHITIET_HOADON.SOLUONG) = (SELECT TOP (1) SUM(CHITIET_HOADON.SOLUONG) AS SoLuong FROM HOADON AS HOADON INNER JOIN KHUVUC AS KHUVUC ON HOADON.MAKV = KHUVUC.MAKV INNER JOIN CHITIET_HOADON AS CHITIET_HOADON ON HOADON.MAHD = CHITIET_HOADON.MAHD GROUP BY KHUVUC.MAKV, KHUVUC.TENKV ORDER BY SoLuong DESC)))
Kết quả test
Trước khi test
Sau khi test
Câu 6. Giảm 20% giá các thức uống không bán được trong tháng 1/2015
Code
UPDATE THUCUONG SET DONGIA=DONGIA - DONGIA*0.2 WHERE MATU NOT IN( SELECT THUCUONG.MATU FROM HOADON INNER JOIN CHITIET_HOADON ON HOADON.MAHD = CHITIET_HOADON.MAHD INNER JOIN THUCUONG ON CHITIET_HOADON.MATU = THUCUONG.MATU WHERE MONTH(HOADON.NGAYLAP) = 1 AND YEAR(HOADON.NGAYLAP) = 2015 )
28
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test
Trước khi test
Sau khi test
Câu 7. Tăng thêm 50% giá các thức uống bán chạy nhất
Code
UPDATE THUCUONG SET DONGIA=DONGIA+DONGIA*0.5 WHERE TENTU IN ( SELECT THUCUONG.TENTU FROM HOADON INNER JOIN CHITIET_HOADON ON HOADON.MAHD = CHITIET_HOADON.MAHD INNER JOIN THUCUONG ON CHITIET_HOADON.MATU = THUCUONG.MATU GROUP BY THUCUONG.TENTU, THUCUONG.DONGIA HAVING (SUM(CHITIET_HOADON.SOLUONG) = (SELECT TOP 1 SUM(CHITIET_HOADON.SOLUONG) AS SOLUONG FROM THUCUONG INNER JOIN CHITIET_HOADON ON THUCUONG.MATU = CHITIET_HOADON.MATU INNER JOIN HOADON ON CHITIET_HOADON.MAHD = HOADON.MAHD GROUP BY THUCUONG.TENTU, THUCUONG.DONGIA ORDER BY SUM(CHITIET_HOADON.SOLUONG) DESC )))
Kết quả test
Trước khi test
Sau khi test
Câu 8. Viết câu lệnh sửa MANV thành ‘NV2’, NOIDUNGCHI thành ‘Rút
doanh thu’ của mã phiếu chi ‘PC5’ (thuộc bảng PHIEUCHI)
Code UPDATE PHIEUCHI SET MANV='NV2', NOIDUNGCHI='Rút doanh thu' WHERE MAPC='PC5';
29
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test
Câu 9. Viết câu lệnh sửa PHIEUCHI: MANV=NV2, NGAYLAP=11/20/2015
của MAPC: PC4
Code UPDATE PHIEUCHI SET MANV='NV2', NGAYLAP='11/20/2015' WHERE MAPC='PC4';
Kết quả test
Câu 10. Viết câu lệnh sửa HOADON: MANV=NV2 của MAHD=CN2KV201
Code UPDATE HOADON SET MANV='NV2' WHERE MAHD='CN2KV201';
Kết quả test
30
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 11. Viết câu lệnh sửa HOADON: MANV=NV2, TONGTIEN=108000
của MAHD=CN1KV204
Code UPDATE HOADON SET MANV='NV2', TONGTIEN=108000 WHERE MAHD='CN1KV204';
Kết quả test
Câu 12. Viết câu lệnh sửa HOADON: MANV=NV2, NGAYLAP=11/21/2015
của MAHD=CN4KV103
Code UPDATE HOADON SET MANV='NV2', NGAYLAP='11/21/2015' WHERE MAHD='CN4KV103';
Kết quả test
Câu 13. Viết câu lệnh sửa THUCUONG: DONGIA=32000 của MATU=TU16
Code UPDATE THUCUONG SET DONGIA='32000' WHERE MATU='TU16';
31
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test
Câu 14. Viết câu lệnh sửa THUCUONG: MALOAI=tea của MATU=TU21
Code UPDATE THUCUONG SET MALOAI='tea' WHERE MATU='TU21';
Kết quả test
Câu 15. Viết câu lệnh sửa THUCUONG: TENTU=Iced Matcha Greentea của
MATU=TU14
Code UPDATE THUCUONG SET TENTU='Iced Matcha Greentea' WHERE MATU='TU14';
Kết quả test
32
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
DELETE
Câu 1. Viết câu lệnh xóa báo cáo của một nhân viên với MANV=NV5 vào
ngày 31/12/2014
Code DELETE FROM BAOCAO WHERE NGAYLAP='12/31/2014' AND MANV='NV5'
Kết quả test
Trước khi test
Sau khi test
Câu 2. Viết câu lệnh xóa một chi nhánh với MACN=CN11
Code DELETE FROM CHINHANH WHERE MACN='CN11'
Kết quả test
Trước khi test
Sau khi test
33
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 3. Viết câu lệnh xóa chức vụ với MACV=CV4
Code DELETE FROM CHUCVU WHERE MACV='CV4'
Kết quả test
Trước khi test
Sau khi test
Câu 4. Viết câu lệnh xóa địa chỉ chi nhánh ở quận 1(Q1) với mã MACN=CN9
Code DELETE FROM DIACHI_CHINHANH WHERE MACN='CN9' AND MAQ='Q1'
Kết quả test
Trước khi test
Sau khi test
34
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 5. Viết câu lệnh xóa địa chỉ nhà cung cấp có mã NCC1 cấp ở quận 1(Q1)
Code DELETE FROM DIACHI_NCC WHERE MANCC='NCC1' AND MAQ='Q1'
Kết quả test
Trước khi test
Sau khi test
Câu 6. Viết câu lệnh xóa địa chỉ nhân viên có mã NV14 ở quận 8 (mã: Q8)
Code DELETE FROM DIACHI_NHANVIEN WHERE MANV='NV14' AND MAQ='Q8'
Kết quả test
Trước khi test
35
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Sau khi test
Câu 7. Viết câu lệnh xóa email(mã: EM17) nhà cung cấp 'Phương Hà 2'
Code DELETE FROM EMAIL_NCC WHERE MANCC = (SELECT MANCC FROM dbo.NHACUNGCAP WHERE NHACUNGCAP.TENNCC= N'Phương Hà 2') AND MAE='EM17'
Kết quả test
Trước khi test
Sau khi test
Câu 8. Viết câu lệnh xóa Email của nhân viên có mã NV9 và mã Email là
EM9
Code DELETE FROM EMAIL_NHANVIEN WHERE MAE='EM9' AND MANV ='NV9'
36
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test
Trước khi test
Sau khi test
Câu 9. Viết câu lệnh xóa phiếu phụ thu của nhân viên có mã là NV3 đã lập
vào ngày 21/09/2015
Code DELETE FROM PHIEUPHUTHU WHERE MANV='NV3' AND NGAYLAP ='09/21/2014'
Kết quả test
Trước khi test
Sau khi test
Câu 10. Viết câu lệnh xóa tất cả phiếu nhập vào ngày 21/01/2015
Code DELETE FROM PHIEUNHAP WHERE NGAYLAP='01/21/2014'
37
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test
Trước khi test
Sau khi test
Câu 11. Viết câu lệnh xóa phiếu chi mã PC5 vào ngày 07/01/2014
Code DELETE FROM PHIEUCHI WHERE NGAYLAP ='01/07/2014'
Kết quả test
Trước khi test
Sau khi test
Câu 12. Viết câu lệnh xóa quận 70 (mã Q70)
Code DELETE FROM QUAN_HUYEN WHERE MAQ='Q70'
Kết quả test
Trước khi test
38
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Sau khi test
Câu 13. Viết câu lệnh xóa SĐT 095377777 ở chi nhánh 1 (mã CN1)
Code DELETE FROM SDT_CHINHANH WHERE SODT='095377777' AND MACN ='CN1'
Kết quả test
Trước khi test
Sau khi test
Câu 14. Viết câu lệnh xóa hết SĐT của nhà cung cấp có tên là Phương Hà 1
Code DELETE FROM SDT_NHACUNGCAP WHERE MANCC=(SELECT NHACUNGCAP.MANCC FROM NHACUNGCAP WHERE TENNCC=N'Phương Hà 1')
39
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test
Trước khi test
Sau khi test
Câu 15. Viết câu lệnh xóa SĐT của 2 nhân viên Đồng Quốc Tiến, Dương Thị
Hường
Code DELETE FROM SDT_NHANVIEN WHERE MANV IN (SELECT NHANVIEN.MANV FROM NHANVIEN WHERE TENNV =N'Dương Thị Hường' OR TENNV=N'Đồng Quốc Tiến')
Kết quả test
Trước khi test
Sau khi test
40
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
3. Truy vấn
Câu 1. Hãy lọc ra danh sách các thức uống có loại là Tea (mã: tea)
Code
SELECT THUCUONG.TENTU AS 'Thức Uống', THUCUONG.DONGIA AS 'Giá', LOAITHUCUONG.TENLOAI AS 'Loại' FROM THUCUONG INNER JOIN LOAITHUCUONG ON THUCUONG.MALOAI = LOAITHUCUONG.MALOAI WHERE (LOAITHUCUONG.TENLOAI = 'Tea')
Kết quả test
Câu 3. Hãy lọc ra danh sách thức uống không chứa nguyên liệu sữa đặc
Code
SELECT DISTINCT THUCUONG.TENTU AS 'Thức Uống', THUCUONG.DONGIA AS 'Giá' FROM THUCUONG INNER JOIN CHITIET_CONGTHUC ON THUCUONG.MATU = CHITIET_CONGTHUC.MATU INNER JOIN NGUYENLIEU ON CHITIET_CONGTHUC.MANL = NGUYENLIEU.MANL WHERE (NGUYENLIEU.MANL NOT LIKE '%milk%')
Câu 2. Viết câu lệnh thống kê những loại thức uống có giá thấp hơn 40 ngàn
Code SELECT TENTU AS 'Thức Uống', DONGIA AS 'Giá' FROM THUCUONG WHERE (DONGIA < 40000)
Kết quả test
41
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test
Câu 5. Viết câu lệnh thống kê toàn bộ những nhà cung cấp đang cấp hàng cho
hệ thống: CHƯA CHÍNH XÁC
Code
SELECT DISTINCT NHACUNGCAP.TENNCC FROM NHACUNGCAP INNER JOIN SDT_NHACUNGCAP ON NHACUNGCAP.MANCC = SDT_NHACUNGCAP.MANCC INNER JOIN EMAIL_NCC ON NHACUNGCAP.MANCC = EMAIL_NCC.MANCC INNER JOIN DIACHI_NCC ON NHACUNGCAP.MANCC = DIACHI_NCC.MANCC INNER JOIN QUAN_HUYEN ON DIACHI_NCC.MAQ = QUAN_HUYEN.MAQ INNER JOIN TINH_THANHPHO ON DIACHI_NCC.MATP = TINH_THANHPHO.MATP INNER JOIN PHIEUNHAP ON NHACUNGCAP.MANCC = PHIEUNHAP.MANCC
Kết quả test
Câu 4. Hãy lọc ra những nguyên liệu được cung cấp bởi nhà cung cấp Phương
Hà 1 (NCC1)
Code
SELECT DISTINCT NHACUNGCAP.TENNCC, NGUYENLIEU.TENNL FROM PHIEUNHAP INNER JOIN NHACUNGCAP ON PHIEUNHAP.MANCC = NHACUNGCAP.MANCC INNER JOIN CHITIET_PHIEUNHAP ON PHIEUNHAP.MAPN = CHITIET_PHIEUNHAP.MAPN INNER JOIN NGUYENLIEU ON CHITIET_PHIEUNHAP.MANL = NGUYENLIEU.MANL WHERE(NHACUNGCAP.TENNCC = N'Phương Hà 1')
Kết quả test
42
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 6. Hãy liệt kê danh sách nhân viên theo chi nhánh 1, 2, 3
Code
SELECT CHINHANH.TENCN, NHANVIEN.TENNV, NHANVIEN.NGAYSINH, NHANVIEN.GIOITINH, SDT_NHANVIEN.SODT, DIACHI_NHANVIEN.DIACHI, QUAN_HUYEN.TENQ, TINH_THANHPHO.TENTP FROM NHANVIEN INNER JOIN CHINHANH ON NHANVIEN.MACN = CHINHANH.MACN INNER JOIN SDT_NHANVIEN ON NHANVIEN.MANV = SDT_NHANVIEN.MANV INNER JOIN DIACHI_NHANVIEN ON NHANVIEN.MANV = DIACHI_NHANVIEN.MANV INNER JOIN QUAN_HUYEN ON DIACHI_NHANVIEN.MAQ = QUAN_HUYEN.MAQ INNER JOIN TINH_THANHPHO ON DIACHI_NHANVIEN.MATP = TINH_THANHPHO.MATP WHERE (CHINHANH.TENCN LIKE '%CHI NHÁNH 1%')
Kết quả test
Câu 7. Viết câu lệnh để liệt kê thức uông bán nhiều nhất
Code
SELECT THUCUONG.TENTU, THUCUONG.DONGIA, SUM(CHITIET_HOADON.SOLUONG) AS 'SOLUONGBAN' FROM HOADON INNER JOIN CHITIET_HOADON ON HOADON.MAHD = CHITIET_HOADON.MAHD INNER JOIN THUCUONG ON CHITIET_HOADON.MATU = THUCUONG.MATU GROUP BY THUCUONG.TENTU, THUCUONG.DONGIA HAVING (SUM(CHITIET_HOADON.SOLUONG) = (SELECT TOP 1 SUM(CHITIET_HOADON.SOLUONG) AS SOLUONG FROM THUCUONG INNER JOIN CHITIET_HOADON ON THUCUONG.MATU = CHITIET_HOADON.MATU INNER JOIN HOADON ON CHITIET_HOADON.MAHD = HOADON.MAHD GROUP BY THUCUONG.TENTU, THUCUONG.DONGIA ORDER BY SUM(CHITIET_HOADON.SOLUONG) DESC ))
Kết quả test
43
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 8. Hãy liệt kê thức uống ko bán đc trong tháng/năm (sale, giảm giá)
Code
SELECT TENTU, DONGIA FROM THUCUONG WHERE MATU NOT IN(SELECT THUCUONG.MATU FROM HOADON INNER JOIN CHITIET_HOADON ON HOADON.MAHD = CHITIET_HOADON.MAHD INNER JOIN THUCUONG ON CHITIET_HOADON.MATU = THUCUONG.MATU WHERE YEAR(HOADON.NGAYLAP) = 2015)
Kết quả test
Câu 10. Viết câu lệnh để tính doanh thu toàn hệ thống năm 2015
Code
SELECT YEAR(NGAYLAP) AS 'NAM', SUM(TONGTIEN) + (SELECT SUM(SOTIEN) AS TONGTIEN_PPT FROM PHIEUPHUTHU WHERE (YEAR(NGAYLAP) = 2015) ) AS TONGTIEN FROM HOADON GROUP BY YEAR(NGAYLAP) HAVING (YEAR(NGAYLAP) = 2015)
Kết quả test
Câu 9. Viết câu lệnh tìm khu vực được chọn nhiều nhất
Code
SELECT KHUVUC.MAKV, KHUVUC.TENKV, SUM(CHITIET_HOADON.SOLUONG) AS SoLuong FROM HOADON INNER JOIN KHUVUC ON HOADON.MAKV = KHUVUC.MAKV INNER JOIN CHITIET_HOADON ON HOADON.MAHD = CHITIET_HOADON.MAHD GROUP BY KHUVUC.MAKV, KHUVUC.TENKV HAVING (SUM(CHITIET_HOADON.SOLUONG) = (SELECT TOP (1) SUM(CHITIET_HOADON.SOLUONG) AS SoLuong FROM HOADON AS HOADON INNER JOIN KHUVUC AS KHUVUC ON HOADON.MAKV = KHUVUC.MAKV INNER JOIN CHITIET_HOADON AS CHITIET_HOADON ON HOADON.MAHD = CHITIET_HOADON.MAHD GROUP BY KHUVUC.MAKV, KHUVUC.TENKV ORDER BY SoLuong DESC))
Kết quả test
44
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 11. Viết câu lệnh để tính doanh thu toàn hệ thống của tháng 1/ 2015
Code
SELECT MONTH(NGAYLAP) AS 'THANG', YEAR(NGAYLAP) AS 'NAM', SUM(TONGTIEN) + (SELECT SUM(SOTIEN) AS TONGTIEN_PPT FROM PHIEUPHUTHU WHERE (MONTH(NGAYLAP) = 1) AND (YEAR(NGAYLAP) = 2015) ) AS TONGTIEN FROM HOADON GROUP BY MONTH(NGAYLAP),YEAR(NGAYLAP) HAVING ((MONTH(NGAYLAP) = 1) AND (YEAR(NGAYLAP) = 2015))
Kết quả test
Câu 12. Hãy tính lợi nhuận toàn hệ thống năm 2015
Code
SELECT YEAR(NGAYLAP) AS 'NAM', SUM(TONGTIEN) + (SELECT SUM(SOTIEN) AS TONGTIEN_PPT FROM PHIEUPHUTHU WHERE (YEAR(NGAYLAP) = 2015)) -(SELECT SUM(TONGTIEN) AS TONGTIEN_PC FROM PHIEUCHI WHERE (YEAR(NGAYLAP) = 2015)) -(SELECT SUM(TONGTIEN) AS TONGTIEN_PN FROM PHIEUNHAP WHERE (YEAR(NGAYLAP) = 2015)) AS TONGTIEN FROM HOADON GROUP BY YEAR(NGAYLAP) HAVING (YEAR(NGAYLAP) = 2015)
Kết quả test
Câu 13. Hãy tính lợi nhuận từng chi nhánh (Chi nhánh 1) (HOADON +
PHIEUTHU) - (PHIEUCHI + PHIEUNHAP)
Code
SELECT CHINHANH.TENCN, SUM(TONGTIEN) + (SELECT SUM(SOTIEN) AS TONGTIEN_PPT FROM PHIEUPHUTHU INNER JOIN NHANVIEN ON PHIEUPHUTHU.MANV = NHANVIEN.MANV WHERE (NHANVIEN.MACN = 'CN1')) -(SELECT SUM(TONGTIEN) AS TONGTIEN_PC FROM PHIEUCHI INNER JOIN NHANVIEN ON PHIEUCHI.MANV = NHANVIEN.MANV WHERE (NHANVIEN.MACN = 'CN1')) -(SELECT SUM(TONGTIEN) AS TONGTIEN_PN FROM PHIEUNHAP INNER JOIN NHANVIEN ON PHIEUNHAP.MANV = NHANVIEN.MANV WHERE (NHANVIEN.MACN = 'CN1')) AS TONGTIEN FROM HOADON INNER JOIN NHANVIEN ON HOADON.MANV = NHANVIEN.MANV INNER JOIN CHINHANH ON NHANVIEN.MACN = CHINHANH.MACN GROUP BY CHINHANH.TENCN,NHANVIEN.MACN HAVING (NHANVIEN.MACN = 'CN1')
45
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test
Câu 14. Viết câu lệnh để thống kê số lượng tồn của tất cả các nguyên liệu còn
dưới mức quy định
Code
SELECT TENNL, SOLUONG, DONVI FROM NGUYENLIEU WHERE (SOLUONG <= 1000) AND (DONVI = 'g') OR (SOLUONG <= 2) AND (DONVI = N'gói') OR (SOLUONG <= 500) AND (DONVI = 'ml') OR (SOLUONG <= 2) AND (DONVI = N'cái')
Kết quả test
Câu 15. Hãy liệt kê loại nguyên liệu được sử dụng nhiều nhất kg, hộp, gói, ml
Code
SELECT NGUYENLIEU.MANL, NGUYENLIEU.TENNL, SUM(CHITIET_CONGTHUC.SOLUONG) AS SOLUONG_DUNG, NGUYENLIEU.DONVI FROM NGUYENLIEU INNER JOIN CHITIET_CONGTHUC ON NGUYENLIEU.MANL = CHITIET_CONGTHUC.MANL INNER JOIN THUCUONG ON CHITIET_CONGTHUC.MATU = THUCUONG.MATU GROUP BY NGUYENLIEU.MANL, NGUYENLIEU.TENNL, NGUYENLIEU.DONVI HAVING SUM(CHITIET_CONGTHUC.SOLUONG) = (SELECT TOP 1 SUM(CHITIET_CONGTHUC.SOLUONG) AS SOLUONG_DUNG FROM NGUYENLIEU INNER JOIN CHITIET_CONGTHUC ON NGUYENLIEU.MANL = CHITIET_CONGTHUC.MANL INNER JOIN THUCUONG ON CHITIET_CONGTHUC.MATU = THUCUONG.MATU GROUP BY NGUYENLIEU.MANL, NGUYENLIEU.TENNL, NGUYENLIEU.DONVI ORDER BY SUM(CHITIET_CONGTHUC.SOLUONG) DESC)
Kết quả test
46
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
4. Thủ tục (10 câu Producer):
Câu 1. Hãy viết thủ tục thêm một nhân viên vào bảng NHANVIEN với tham số
truyền vào là mã nhân viên, tên nhân viên, mã chức chức vụ, mã chi nhánh, giới
tính, ngày vào, ngày nghĩ (có thể null). Kiểm tra ngày vào phải lớn hơn ngày
thành lập hệ thống (01/01/2013) và ràng buộc tồn tại các mã chức vụ, mã chi
nhánh.
Code
CREATE PROCEDURE THEM_NHANVIEN @MANV char(5), @TENNV NVARCHAR(100), @MACV char(3), @MACN char(5), @NGAYSINH datetime, @GIOITINH bit, @NGAYVAO DATETIME, @NGAYNGHI DATETIME AS BEGIN if exists(select * from CHUCVU where CHUCVU.MACV=@MACV) BEGIN if exists(select * from CHINHANH where CHINHANH.MACN=@MACN) BEGIN if(@NGAYVAO>'01/01/2013') INSERT INTO NHANVIEN VALUES (@MANV,@TENNV,@MACV,@MACN,@NGAYSINH,@GIOITINH,@NGAYVAO,@NGAYNGHI) else print N'Lỗi ngày vào < ngày thành lập' END else print N'Lỗi không tồn tại MACN ' END else print N'Lỗi không tồn tại MACV ' END
Câu 16. Hãy thống kê tổng chi
Code SELECT SUM(TONGTIEN) AS TongTien FROM PHIEUCHI
Kết quả test
Câu 17. Viết câu lệnh để thống kê tổng phụ thu
Code SELECT SUM(SOTIEN) AS TongTien FROM PHIEUPHUTHU
Kết quả test
47
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Test 2 EXECUTE THEM_NHANVIEN ‘NV17’, N’Vũ Nguyên Vũ’,’CV2’,’CN1’,’9/1/1994’,1,’01/01/2014’,NULL
Kết quả test 1
Test 2 EXECUTE THEM_NHANVIEN 'NV206', N'Lâm Tùng Nhân 1','CV7','CN1','9/21/1994',0,'01/01/2010',NULL
Kết quả test 2
Test 3 EXECUTE THEM_NHANVIEN 'NV206', N'Lâm Tùng Nhân 1','CV1','CN11','9/21/1994',0,'01/01/2010',NULL
Kết quả test 3
Test 4 EXECUTE THEM_NHANVIEN 'NV206', N'Lâm Tùng Nhân 1','CV1','CN1','9/21/1994',0,'01/01/2010',NULL
Kết quả test 4
Câu 2. Viết thủ tục thêm một thức uống vào bảng THUCUONG với tham số
truyền vào là mã thức uống, mã loại thức uống, tên thức uống, đơn giá. Kiểm
tra tham số vào (kiểm tra tồn tại mã loại thức uống).
Code
CREATE PROCEDURE THEM_THUCUONG @MATU char(5), @MALOAI char(5), @TENTU NVARCHAR(100), @DONGIA DECIMAL(18,0) AS BEGIN if exists (select * from LOAITHUCUONG where LOAITHUCUONG .MALOAI=@MALOAI) INSERT INTO THUCUONG VALUES (@MATU,@MALOAI,@TENTU,@DONGIA) else print N'Lỗi không tồn tại loại thức uống, kiểm tra mã loại'
Test 1 EXECUTE THEM_THUCUONG 'TU80','sod','Soda choco',50000
48
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test 1
Test 2 EXECUTE THEM_THUCUONG 'TU82','dd','Soda choco',50000
Kết quả test 2
Câu 3. Viết thủ tục thêm mới một loại thức uống mới vào bảng
LOAITHUCUONG với tham số truyền vào là mã loại, tên loại thức uống.
Code
CREATE PROCEDURE THEM_LOAITHUCUONG @MALOAI char(5), @TENLOAI NVARCHAR (100) AS BEGIN INSERT INTO LOAITHUCUONG VALUES (@MALOAI,@TENLOAI) END
Test EXECUTE THEM_LOAITHUCUONG 'skin','Tomato'
Kết quả test
(thành công)
49
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 4. Viết thủ tục thêm mới một nguyên vào bảng NGUYENLIEU với tham
số đầu vào là mã nguyên liệu, tên nguyên liệu, số lượng, đơn vị.
Code
CREATE PROCEDURE THEM_NGUYENLIEU @MANL char(10), @TENNL NVARCHAR (100), @SOLUONG FLOAT, @DONVI NVARCHAR(25) AS BEGIN INSERT INTO NGUYENLIEU VALUES (@MANL,@TENNL,@SOLUONG,@DONVI) END
Test EXECUTE THEM_NGUYENLIEU 'NL1','tomato',5,'kg'
Kết quả test
(thành công)
Câu 5. Viết thủ tục để cập nhật thông tin của một thức uống trong bảng
THUCUONG với tham số đầu vào là mã thức uống, mã loại thức uống, tên thức
uống, đơn giá. Kiểm tra ràng buộc tồn tại thức uống và mã loại thức uống.
Code
CREATE PROC SUA_THUCUONG @MATU char(5), @MALOAI char (5), @TENTU NVARCHAR(100), @DONGIA DECIMAL(18,0) AS BEGIN if exists (select * from THUCUONG WHERE THUCUONG.MATU=@MATU) if exists (select * from LOAITHUCUONG WHERE LOAITHUCUONG.MALOAI=@MALOAI) UPDATE THUCUONG SET MALOAI=@MALOAI,TENTU=@TENTU,DONGIA=@DONGIA FROM THUCUONG WHERE MATU = @MATU else print N'Lỗi, không tồn tại MÃ LOẠI THỨC UỐNG' else print N'Lỗi, không tồn tại THỨC UỐNG này'
50
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
END
Test 1 EXECUTE SUA_THUCUONG 'TU1','hot',N'ESPRESSO',30000
Kết quả test 1
(thành công)
Test 2 EXECUTE SUA_THUCUONG 'TU1','hotqq',N'ESPRESSO',30000
Kết quả test 2
Test 3 EXECUTE SUA_THUCUONG 'TU100','hot',N'ESPRESSO',30000
Kết quả test 3
Câu 6. Viết thủ tục liệt kê các thức uống thuộc một loại thức uống bất kì, với
tham số truyền vào là tên loại. Kiểm tra ràng buộc tồn tại tên loại.
Code
CREATE PROC LIETKE_THUCUONG @TENLOAI NVARCHAR(100) AS BEGIN if exists (select * from THUCUONG WHERE TENTU LIKE @TENLOAI) SELECT THUCUONG.TENTU,THUCUONG.DONGIA FROM THUCUONG,LOAITHUCUONG WHERE THUCUONG.MALOAI= LOAITHUCUONG.MALOAI AND LOAITHUCUONG.TENLOAI = @TENLOAI else print N'Lỗi không tồn tại loại thức uống này' END
Test 1 EXECUTE LIETKE_THUCUONG N'Soda'
51
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test 1
(thành công)
Test 2 EXECUTE LIETKE_THUCUONG N'Sodakk'
Kết quả test 2
(thành công)
Câu 7. Viết thủ tục liệt kê thông tin tất cả các nguyên liệu (tên nguyên liệu, số
lượng tồn kho, đơn vị) của một thức uống bất kì, với tham số truyền vào là tên
thức uống. Kiểm tra ràng buộc tồn tại tên thức uống.
Code
CREATE PROC LIETKE_NGUYENLIEU_THUCUONG @TENTU NVARCHAR(100) AS BEGIN if exists (select * from THUCUONG where THUCUONG.TENTU like @TENTU) SELECT THUCUONG.TENTU AS 'Thức Uống',NGUYENLIEU.TENNL AS 'Nguyên liệu',NGUYENLIEU.SOLUONG as 'Số Lượng',NGUYENLIEU.DONVI AS 'Đơn vị' FROM THUCUONG INNER JOIN CHITIET_CONGTHUC ON THUCUONG.MATU = CHITIET_CONGTHUC.MATU INNER JOIN NGUYENLIEU ON CHITIET_CONGTHUC.MANL = NGUYENLIEU.MANL WHERE THUCUONG.TENTU=@TENTU else print N'Lỗi không tồn tại tên thức uống này' END
Test 1 EXECUTE LIETKE_NGUYENLIEU_THUCUONG N'Iced Greentea'
Kết quả test 1
Test 2 EXECUTE LIETKE_NGUYENLIEU_THUCUONG N'Iced Greentea qqq'
52
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test 2
Câu 8. Viết thủ tục liệt kê tên các nguyên liệu của một nhà cung cấp bất kì, với
tham số đầu vào là tên nhà cung cấp, kiểm tra ràng buộc tồn tại tên nhà cung
cấp.
Code
CREATE PROC LIETKE_NGUYENLIEU_NCC @TENNCC NVARCHAR(100) AS BEGIN if exists (select * from NHACUNGCAP where NHACUNGCAP.TENNCC like @TENNCC) SELECT NGUYENLIEU.TENNL FROM PHIEUNHAP INNER JOIN NHACUNGCAP ON PHIEUNHAP.MANCC = NHACUNGCAP.MANCC INNER JOIN CHITIET_PHIEUNHAP ON PHIEUNHAP.MAPN = CHITIET_PHIEUNHAP.MAPN INNER JOIN NGUYENLIEU ON CHITIET_PHIEUNHAP.MANL = NGUYENLIEU.MANL WHERE(NHACUNGCAP.TENNCC = @TENNCC) else print N'lỗi, không tồn tại tên nhà cung cấp này'
Test 1 EXECUTE LIETKE_NGUYENLIEU_NCC N'Phương Hà 1'
Kết quả test 1
(thành công)
Test 2 EXECUTE LIETKE_NGUYENLIEU_NCC N'Phương Hà 10'
Kết quả test 2
Câu 9. Viết thủ tục tăng giá của một thức uống bất kì vơi tham số truyền vào là
tên thức uống và hệ số giá. Điều kiện tên thức uống tồn tại và hệ số tăng giá phải
nhỏ hơn 1 đồng thời không nhỏ hơn -0.5 .
Code
CREATE PROC SUA_THUCUONG_GIA @TENTU NVARCHAR(100), @TĂNG FLOAT AS BEGIN if exists(select * from THUCUONG where TENTU like @TENTU) if(@TĂNG<=1 and @TĂNG>=-0.5) UPDATE THUCUONG SET DONGIA=DONGIA+ DONGIA*@TĂNG
53
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
FROM THUCUONG WHERE TENTU=@TENTU else print N'lỗi, hệ số tăng quá 1' else print N'lỗi, không tồn tại thức uống này' END
Test 1 EXECUTE SUA_THUCUONG_GIA N'Espresso',0.5
Kết quả test 1
(thành công)
Test 2 EXECUTE SUA_THUCUONG_GIA N'Espresso',1.5 EXECUTE SUA_THUCUONG_GIA N'Espresso xxx',0.5
Kết quả test 2
Câu 10. Viết thủ tục tính tổng tiền phụ thu của một chi nhánh bất kì trong thời
gian bất kì. Với tham số truyền vào là tên chi nhánh, thời gian bắt đầu và thời
gian kết thúc. Điều kiện ràng buộc thời gian bắt đầu phải trước thời gian kết
thúc.
Code
CREATE PROC PHUTHU_CHINHANH @TENCN NVARCHAR(100), @THANGNAM1 datetime, @THANGNAM2 datetime AS BEGIN if(@THANGNAM1<=@THANGNAM2) SELECT SUM(PHIEUPHUTHU.SOTIEN) AS 'Tổng Tiền' FROM PHIEUPHUTHU,NHANVIEN,CHINHANH WHERE PHIEUPHUTHU.MANV=NHANVIEN.MANV AND NHANVIEN.MACN=CHINHANH.MACN AND CHINHANH.TENCN=@TENCN AND PHIEUPHUTHU.NGAYLAP<=@THANGNAM2 AND PHIEUPHUTHU.NGAYLAP>=@THANGNAM1 else print N'lỗi, thời gian bắt đầu sau thời gian kết thúc' END
Test 1 EXECUTE PHUTHU_CHINHANH 'CHI NHÁNH 1', '01/01/2015', '09/21/2015'
54
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test 1
Test 2 EXECUTE PHUTHU_CHINHANH 'CHI NHÁNH 1','10/01/2015','09/21/2015'
Kết quả test 2
Câu 11. Viết thủ tục tìm thức uống bán chạy nhất của chi nhánh bất kì trong
khoảng thời gian bất kì, với tham số truyền vào là tên chi nhánh, thời gian bắt
đầu và thời gian kết thúc. Điều kiện thời gian bắt đầu trước thời gian kết thúc.
Code
--tao view create view SO_LUONG_BAN_THUC_UONG_CHINHANH as SELECT THUCUONG.TENTU, THUCUONG.DONGIA,HOADON.NGAYLAP,CHINHANH.TENCN, SUM(CHITIET_HOADON.SOLUONG) AS 'SOLUONGBAN' FROM HOADON INNER JOIN CHITIET_HOADON ON HOADON.MAHD = CHITIET_HOADON.MAHD INNER JOIN THUCUONG ON CHITIET_HOADON.MATU = THUCUONG.MATU INNER JOIN NHANVIEN ON NHANVIEN.MANV=HOADON.MANV INNER JOIN CHINHANH ON NHANVIEN.MACN=CHINHANH.MACN GROUP BY THUCUONG.TENTU, THUCUONG.DONGIA,HOADON.NGAYLAP,CHINHANH.TENCN --proc CREATE PROC TIM_THUCUONG_BANCHAY_CHINHANH @TENCN NVARCHAR(100), @THANGNAM1 datetime, @THANGNAM2 datetime AS BEGIN if(@THANGNAM1<=@THANGNAM2) SELECT TENTU,SUM(SOLUONGBAN) AS 'SOLUONGBAN',TENCN FROM SO_LUONG_BAN_THUC_UONG_CHINHANH WHERE NGAYLAP<=@THANGNAM2 AND NGAYLAP>=@THANGNAM1 AND TENCN=@TENCN GROUP BY TENTU,TENCN HAVING SUM(SOLUONGBAN) = (SELECT TOP 1 SUM(SOLUONGBAN) FROM SO_LUONG_BAN_THUC_UONG_CHINHANH WHERE NGAYLAP<=@THANGNAM2 AND NGAYLAP>=@THANGNAM1 AND TENCN=@TENCN GROUP BY TENTU ORDER BY SUM(SOLUONGBAN) DESC) else print N'lỗi, thời gian bắt đầu sau thời gian kết thúc' END GO EXECUTE TIM_THUCUONG_BANCHAY_CHINHANH 'CHI NHÁNH 1','01/01/2015','09/21/2015'
Test 1 EXECUTE TIM_THUCUONG_BANCHAY_CHINHANH 'CHI NHÁNH 1', '01/01/2015','09/21/2015'
55
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test
Test 2 EXECUTE TIM_THUCUONG_BANCHAY_CHINHANH 'CHI NHÁNH 1','10/01/2015','09/21/2015'
Kết quả test 2
Câu 12. Viết thủ tục tìm thức uống bán chạy nhất của hệ thống trong khoảng
thời gian bất kì, với tham số truyền vào là thời gian bắt đầu và thời gian kết thúc.
Điều kiện thời gian bắt đầu trước thời gian kết thúc.
Code
create view SO_LUONG_BAN_THUC_UONG as SELECT THUCUONG.TENTU, THUCUONG.DONGIA,HOADON.NGAYLAP, SUM(CHITIET_HOADON.SOLUONG) AS 'SOLUONGBAN' FROM THUCUONG INNER JOIN CHITIET_HOADON ON THUCUONG.MATU = CHITIET_HOADON.MATU INNER JOIN HOADON ON CHITIET_HOADON.MAHD = HOADON.MAHD GROUP BY THUCUONG.TENTU, THUCUONG.DONGIA,HOADON.NGAYLAP CREATE PROC TIM_THUCUONG_BANCHAY_HETHONG1 @THANGNAM1 datetime, @THANGNAM2 datetime AS BEGIN if(@THANGNAM1<=@THANGNAM2) SELECT TENTU,SUM(SOLUONGBAN) AS 'SOLUONGBAN' FROM SO_LUONG_BAN_THUC_UONG WHERE NGAYLAP<=@THANGNAM2 AND NGAYLAP>=@THANGNAM1 GROUP BY TENTU HAVING SUM(SOLUONGBAN) = (SELECT TOP 1 SUM(SOLUONGBAN) AS 'SOLUONGBAN' FROM SO_LUONG_BAN_THUC_UONG WHERE NGAYLAP<=@THANGNAM2 AND NGAYLAP>=@THANGNAM1 GROUP BY TENTU ORDER BY SUM(SOLUONGBAN) DESC) else print N'lỗi, thời gian bắt đầu sau thời gian kết thúc' END
Test EXECUTE TIM_THUCUONG_BANCHAY_HETHONG1 '01/01/2015','09/21/2015'
Kết quả test
Câu 13. Viết thủ tục dùng để tìm những thức uống không bán được của chi
nhánh bất kì trong khoảng thời gian nào đó. Với tham số đầu vào là tên chi
nhánh, thời gian bắt đầu và thời gian kết thúc.
Code
CREATE PROC TIM_THUCUONG_KOBANDC_CHINHANH @TENCN NVARCHAR(100), @THANGNAM1 datetime, @THANGNAM2 datetime AS
56
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
BEGIN if(@THANGNAM1<=@THANGNAM2) SELECT MATU,TENTU,DONGIA FROM THUCUONG WHERE MATU NOT IN (SELECT CHITIET_HOADON.MATU FROM CHITIET_HOADON,HOADON,NHANVIEN,CHINHANH WHERE CHITIET_HOADON.MAHD=HOADON.MAHD AND NHANVIEN.MANV=HOADON.MANV AND CHINHANH.MACN=NHANVIEN.MACN AND HOADON.NGAYLAP<=@THANGNAM2 AND HOADON.NGAYLAP>=@THANGNAM1 AND CHINHANH.TENCN=@TENCN) else print N'lỗi, thời gian bắt đầu sau thời gian kết thúc' END
Test EXECUTE TIM_THUCUONG_KOBANDC_CHINHANH 'CHI NHÁNH 1','01/01/2015','09/21/2015'
Kết quả test
Câu 14. Viết thủ tục liệt kê các loại nguyên liệu (tên, số lượng tồn, đơn vị) của
một phiếu nhập bất kì, với tham số đầu vào là mã phiếu nhập.
Code
CREATE PROC LOC_NGUYENLIEU @MAPN CHAR(10) AS BEGIN SELECT NGUYENLIEU.TENNL AS 'TÊN NGUYÊN LIỆU', NGUYENLIEU.SOLUONG AS 'SỐ LƯỢNG', NGUYENLIEU.DONVI AS 'ĐƠN VỊ' FROM NGUYENLIEU,CHITIET_PHIEUNHAP WHERE CHITIET_PHIEUNHAP.MAPN=@MAPN END
Test EXECUTE LOC_NGUYENLIEU 'PN1'
Kết quả test
57
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 15. Viết thủ tục tính tổng doanh thu của hệ thống trong khoảng thời gian
bất kì. Với tham số đầu vào là thời gian bắt đầu, thời gian kết thúc. Tham sô đầu
ra là tổng doanh thu của hệ thống (doanh thu= tổng tiền hóa đơn + tổng tiền phụ
thu).
Code
CREATE PROC THONGKE_TONGTHU @THANGNAM1 datetime, @THANGNAM2 datetime, @@TONGTHU FLOAT OUTPUT AS BEGIN if(@THANGNAM1<=@THANGNAM2) begin select sum(HOADON.TONGTIEN)+ (SELECT sum(PHIEUPHUTHU.SOTIEN) from PHIEUPHUTHU WHERE PHIEUPHUTHU.NGAYLAP>=@THANGNAM1 AND PHIEUPHUTHU.NGAYLAP<=@THANGNAM2) AS N'Tổng thu' from HOADON WHERE HOADON.NGAYLAP>=@THANGNAM1 AND HOADON.NGAYLAP <=@THANGNAM2 select @@TONGTHU= sum(HOADON.TONGTIEN)+ (SELECT sum(PHIEUPHUTHU.SOTIEN) from PHIEUPHUTHU WHERE PHIEUPHUTHU.NGAYLAP>=@THANGNAM1 AND PHIEUPHUTHU.NGAYLAP<=@THANGNAM2) from HOADON WHERE HOADON.NGAYLAP>=@THANGNAM1 AND HOADON.NGAYLAP <=@THANGNAM2 end else print N'lỗi, thời gian bắt đầu sau thời gian kết thúc' END
Test
declare @@TONGTHUHETHONG float EXECUTE THONGKE_TONGTHU '01/01/2015','12/31/2015',@@TONGTHUHETHONG OUTPUT if(@@TONGTHUHETHONG>100000) PRINT N'TỔNG THU HỆ THỐNG LÀ :' + CAST(@@TONGTHUHETHONG AS NVARCHAR(100)) else PRINT N'TỔNG THU HỆ THỐNG ÍT THẾ!'
Kết quả test
58
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 16. Viết thủ tục tính tổng chi tiêu của hệ thống trong khoảng thời gian bất
kì. Với tham số đầu vào là thời gian bắt đầu, thời gian kết thúc. Tham sô đầu ra
là tổng tiền chi của hệ thống (tổng chi= tổng tiền phiếu nhập + tổng tiền phiếu
chi).
Code
CREATE PROC THONGKE_TONGCHI @THANGNAM1 datetime, @THANGNAM2 datetime, @@TONGCHI FLOAT OUTPUT AS BEGIN if(@THANGNAM1<=@THANGNAM2) begin select sum(PHIEUNHAP.TONGTIEN)+ (SELECT sum(PHIEUCHI.TONGTIEN) from PHIEUCHI WHERE PHIEUCHI.NGAYLAP>=@THANGNAM1 AND PHIEUCHI.NGAYLAP <=@THANGNAM2) AS N'TỔNG CHI HỆ THỐNG' FROM PHIEUNHAP WHERE PHIEUNHAP.NGAYLAP>=@THANGNAM1 AND PHIEUNHAP.NGAYLAP <=@THANGNAM2 select @@TONGCHI= sum(PHIEUNHAP.TONGTIEN)+ (SELECT sum(PHIEUCHI.TONGTIEN) from PHIEUCHI WHERE PHIEUCHI.NGAYLAP>=@THANGNAM1 AND PHIEUCHI.NGAYLAP <=@THANGNAM2) FROM PHIEUNHAP WHERE PHIEUNHAP.NGAYLAP>=@THANGNAM1 AND PHIEUNHAP.NGAYLAP <=@THANGNAM2 end else print N'lỗi, thời gian bắt đầu sau thời gian kết thúc' END
Test
declare @@TONGCHIHETHONG float EXECUTE THONGKE_TONGCHI '01/01/2015','12/31/2015' ,@@TONGCHIHETHONG OUTPUT if(@@TONGCHIHETHONG>100000) PRINT N'TỔNG CHI HỆ THỐNG LÀ :' + CAST(@@TONGCHIHETHONG AS NVARCHAR(100)) else PRINT N'TỔNG CHI HỆ THỐNG ÍT THẾ!'
Kết quả test
Câu 17. Viết thủ tục tính lợi nhuận của hệ thống trong khoảng thời gian bất kì.
Với tham số đầu vào là thời gian bắt đầu, thời gian kết thúc. Tham sô đầu ra là
tổng lợi nhuận của hệ thống (lợi nhuận = tổng doanh thu - tổng chi).
Code
CREATE PROC THONGKE_LOINHUAN @THANGNAM1 datetime, @THANGNAM2 datetime, @@loinhuan float output AS BEGIN if(@THANGNAM1<=@THANGNAM2) begin select sum(HOADON.TONGTIEN)+ (SELECT sum(PHIEUPHUTHU.SOTIEN) from PHIEUPHUTHU WHERE PHIEUPHUTHU.NGAYLAP>=@THANGNAM1 AND PHIEUPHUTHU.NGAYLAP<=@THANGNAM2) -(select sum(PHIEUNHAP.TONGTIEN) +(SELECT sum(PHIEUCHI.TONGTIEN) from PHIEUCHI WHERE PHIEUCHI.NGAYLAP>=@THANGNAM1 AND PHIEUCHI.NGAYLAP <=@THANGNAM2 )
59
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
FROM PHIEUNHAP WHERE PHIEUNHAP.NGAYLAP>=@THANGNAM1 AND PHIEUNHAP.NGAYLAP <=@THANGNAM2) FROM HOADON WHERE HOADON.NGAYLAP>=@THANGNAM1 AND HOADON.NGAYLAP <=@THANGNAM2 select @@loinhuan= sum(HOADON.TONGTIEN)+ (SELECT sum(PHIEUPHUTHU.SOTIEN) from PHIEUPHUTHU WHERE PHIEUPHUTHU.NGAYLAP>=@THANGNAM1 AND PHIEUPHUTHU.NGAYLAP<=@THANGNAM2) -(select sum(PHIEUNHAP.TONGTIEN)+ (SELECT sum(PHIEUCHI.TONGTIEN) from PHIEUCHI WHERE PHIEUCHI.NGAYLAP>=@THANGNAM1 AND PHIEUCHI.NGAYLAP <=@THANGNAM2 ) FROM PHIEUNHAP WHERE PHIEUNHAP.NGAYLAP>=@THANGNAM1 AND PHIEUNHAP.NGAYLAP <=@THANGNAM2) FROM HOADON WHERE HOADON.NGAYLAP>=@THANGNAM1 AND HOADON.NGAYLAP <=@THANGNAM2 end else print N'lỗi, thời gian bắt đầu sau thời gian kết thúc' END
Test
declare @@loinhuanhhethong float EXECUTE THONGKE_LOINHUAN '01/01/2015','12/31/2015',@@loinhuanhhethong output --dùng biến ra if(@@loinhuanhhethong>100000) PRINT N'TỔNG lợi nhuận LÀ LÀ :' + CAST(@@loinhuanhhethong AS NVARCHAR(100)) else PRINT N'LỢI NHUÂN ÍT THẾ!'
Kết quả test
Câu 18. Viết thủ tục tính tổng số tiền doanh thu của hệ thống trong một ngày
bất kì với tham số đầu vào là ngày và tham số đầu ra là tổng doanh thu của
ngày đó.
Code
create proc tienmoingay @ngay datetime, @tongtien float output as BEGIN select sum(HOADON.TONGTIEN) AS N'Tổng tiền' from HOADON where NGAYLAP=@ngay; select @tongtien=sum(HOADON.TONGTIEN) from HOADON where NGAYLAP=@ngay; END
Test
DECLARE @TIEN FLOAT EXECUTE tienmoingay '01/20/2014',@TIEN OUTPUT --SỬ DỤNG BIẾN OUTPUT @TIEN IF(@TIEN>1000) PRINT N'TỔNG TIỀN LÀ :' + CAST(@TIEN AS NVARCHAR(100)) Else PRINT N'Ế QUÁ'
60
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Kết quả test
Câu 19. Viết một thủ tục với tùy chọn ‘with encryption’, mã hóa không cho
người dùng xem được nội dung của thủ tục.
Code create proc mahoa with encryption as select * from HOADON
Test 1 EXEC sp_helptext mahoa (xem nội dung bằng thủ tục hệ thống sp_helptext)
Kết quả test 1
Test lần 2
select syscomments.id,syscomments.text from syscomments,sysobjects where syscomments.id=sysobjects.id and sysobjects.name='mahoa'
Kết quả test 2
5. Trigger
Câu 1. Viết Trigger bắt lỗi cho lệnh Insert vào bảng CHITIET_HOADON.
Khi thêm chi tiết hóa đơn thì kiểm tra trùng mã, kiểm tra nhập số lượng ấm, thông
báo không đủ nguyên liệu nếu hết và phải giảm số lượng tồn của nguyên liệu nếu
thỏa các điêu kiện còn lại.
CREATE Trigger KT_INSERT_CTHD On CHITIET_HOADON instead of Insert As Declare @matu char(5); Declare @mahd char(50); Declare @SL float; Declare @D int; Declare @trungma int; --lấy các thông số Select @matu=MATU FROM inserted; Select @mahd=MAHD FROM inserted; Select @trungma= COUNT(*) from CHITIET_HOADON WHERE MAHD=@mahd AND MATU=@matu; SELECT @SL= INSERTED.SOLUONG FROM INSERTED --kiểm tra trùng mã
61
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
IF(@trungma>0) BEGIN PRINT N'Cảnh báo: TRÙNG MÃ, BẠN KHÔNG THỂ THÊM VÀO'; RollBack Tran Return END ELSE --kiểm tra nhập số âm IF(@SL <=0) BEGIN PRINT N'Lỗi: Không được nhập số lượng âm' RollBack Tran Return --Dừng, thoát hàm END ELSE -- kiểm tra đủ hàng để bán hay không BEGIN Select @D = Count( * ) from NGUYENLIEU nl inner join CHITIET_CONGTHUC ctct on nl.MANL = ctct.MANL inner join THUCUONG tu on tu.MATU = ctct.MATU inner join inserted cttd on cttd.MATU = tu.MATU Where nl.SOLUONG - (ctct.SOLUONG*@SL) < 0 IF (@D > 0 ) BEGIN PRINT N'không đủ nguyên liệu để bán '+ cast (@SL as nvarchar(10)) + N' ly cho thức uống này'; --thông báo chỉ còn có thể bán bao nhiêu ly Declare @kt int; Declare @kt2 int; Declare @kt1 int; select @kt=SOLUONG from inserted; set @kt1=0; WHILE(@kt1=0 and @kt>0) BEGIN Select @kt2 = Count(*) from NGUYENLIEU nl inner join CHITIET_CONGTHUC ctct on nl.MANL = ctct.MANL inner join THUCUONG tu on tu.MATU = ctct.MATU inner join inserted cttd on cttd.MATU = tu.MATU Where nl.SOLUONG - (ctct.SOLUONG*@kt) <0 If (@kt2<=0) begin SET @kt1=1; end SET @kt=@kt-1; END SET @kt=@kt+1; Print N'NGUYÊN LIỆU CHỈ CÒN DỦ ĐỂ SỬ DỤNG CHO '+ cast (@kt as nvarchar(10)) +N' ly' Return End else --thỏa mãn thì thực hiện insert và giảm số lượng tồn cho nguyên liệu begin --insert INSERT INTO CHITIET_HOADON VALUES (@matu,@mahd,@SL); --giảm số lượng tồn Update nl Set nl.SOLUONG = nl.SOLUONG -(ctct.SOLUONG*@SL) from NGUYENLIEU nl inner join CHITIET_CONGTHUC ctct on nl.MANL = ctct.MANL inner join THUCUONG tu on tu.MATU = ctct.MATU inner join inserted cttd on cttd.MATU = tu.MATU end END
Test:
62
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
INSERT INTO CHITIET_HOADON VALUES('TU9','CN1KV101',2); INSERT INTO CHITIET_HOADON VALUES('TU9','CN1KV101',5); select * from CHITIET_HOADON where MATU='TU9' AND MAHD='CN1KV101' select * from CHITIET_CONGTHUC where MATU='TU9' select * from NGUYENLIEU where MANL='milk' OR MANL='sy-ca' OR MANL='sugar-q'
Kết quả test:
Câu 2. Viết Trigger bắt lỗi cho lệnh Update vào bảng CHITIET_HOADON.
Khi sửa số lượng thức uống trong chi tiết hóa đơn thì phải sửa số lượng tồn của
nguyên liệu CREATE TRIGGER UPDATE_CHITIET_HOADON ON CHITIET_HOADON FOR UPDATE AS Declare @SL float Declare @SL_Truockhisua float Declare @MATU char(5) SELECT @SL= INSERTED.SOLUONG,@MATU= INSERTED.MATU FROM INSERTED SELECT @SL_Truockhisua= DELETED.SOLUONG FROM DELETED IF(@SL <=0) BEGIN PRINT N'Lỗi: Không được nhập số lượng âm' RollBack Tran Return --Dừng, thoát hàm END
Chi tiết hóa đơn đã được nhập
Chi tiết công thức của TU9
Nguyên liệu trước và sau khi bán TU9
Thêm chi tiết hóa đơn có MAHD và MATU trùng sẽ cảnh báo
63
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
--Ngược lại ELSE IF(@SL_Truockhisua>@SL) -- cộng vào NL UPDATE NGUYENLIEU SET NGUYENLIEU.SOLUONG= (@SL_Truockhisua-@SL)*CHITIET_CONGTHUC.SOLUONG + NGUYENLIEU.SOLUONG FROM THUCUONG INNER JOIN CHITIET_CONGTHUC ON THUCUONG.MATU = CHITIET_CONGTHUC.MATU INNER JOIN NGUYENLIEU ON CHITIET_CONGTHUC.MANL = NGUYENLIEU.MANL WHERE CHITIET_CONGTHUC.MATU =@MATU ELSE IF(@SL_Truockhisua<@SL) --Trừ NL UPDATE NGUYENLIEU SET NGUYENLIEU.SOLUONG =NGUYENLIEU.SOLUONG - (@SL-@SL_Truockhisua)*CHITIET_CONGTHUC.SOLUONG FROM THUCUONG INNER JOIN CHITIET_CONGTHUC ON THUCUONG.MATU = CHITIET_CONGTHUC.MATU INNER JOIN NGUYENLIEU ON CHITIET_CONGTHUC.MANL = NGUYENLIEU.MANL WHERE CHITIET_CONGTHUC.MATU =@MATU ELSE PRINT N'Cảnh báo: Số trước khi sửa và sao khi sửa giống nhau' RollBack Tran Return --Dừng, thoát hàm
Test: UPDATE CHITIET_HOADON SET CHITIET_HOADON.SOLUONG=5 FROM CHITIET_HOADON WHERE CHITIET_HOADON.MATU='TU1' AND CHITIET_HOADON.MAHD='CN9KV101' GO SELECT CHITIET_CONGTHUC.SOLUONG, CHITIET_CONGTHUC.MANL, CHITIET_CONGTHUC.MATU, NGUYENLIEU.SOLUONG AS SL_TRONGKHO FROM CHITIET_CONGTHUC INNER JOIN NGUYENLIEU ON CHITIET_CONGTHUC.MANL = NGUYENLIEU.MANL WHERE (CHITIET_CONGTHUC.MATU = 'TU1') SELECT * FROM CHITIET_HOADON WHERE MATU='TU1' AND CHITIET_HOADON.MAHD='CN9KV101'
Kết quả test:
Câu 3. Viết Trigger bắt lỗi cho lệnh Delete vào bảng CHITIET_HOADON.
Khi xóa chi tiết hóa đơn thì phải tăng số lượng tồn của nguyên liệu kiểm tra nếu
xóa hết mã hóa đơn đó thì xóa lun bên bảng hóa đơn.
CREATE Trigger KT_XOA_CTHD On CHITIET_HOADON for DELETE As BEGIN Declare @SL float; Declare @MAHD char(50); Declare @MATU char(5); SELECT @SL= deleted.SOLUONG FROM deleted; SELECT @MAHD= deleted.MAHD FROM deleted;
Số lượng nguyên liệu của TU1 có trong kho trước và sau khi sửa
Số lượng TU1 trong hóa đơn CN9KV101 thay đổi từ 5 lên 10
64
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
--tăng lại số lượng nguyên liệu Update nl Set nl.SOLUONG = nl.SOLUONG + (ctct.SOLUONG *@SL) from NGUYENLIEU nl inner join CHITIET_CONGTHUC ctct on nl.MANL = ctct.MANL inner join THUCUONG tu on tu.MATU = ctct.MATU inner join deleted cttd on cttd.MATU = tu.MATU --kiểm tra nếu k tồn tại mã hóa đơn nữa thì xóa bên bảng hóa đơn Declare @kt int; SELECT @kt=COUNT(*) FROM CHITIET_HOADON WHERE MAHD=@MAHD; IF(@kt=0) --xóa bên bảng DELETE FROM HOADON WHERE MAHD=@MAHD; END
Test: SELECT CHITIET_CONGTHUC.SOLUONG, CHITIET_CONGTHUC.MANL, CHITIET_CONGTHUC.MATU, NGUYENLIEU.SOLUONG AS SL_TRONGKHO FROM CHITIET_CONGTHUC INNER JOIN NGUYENLIEU ON CHITIET_CONGTHUC.MANL = NGUYENLIEU.MANL WHERE (CHITIET_CONGTHUC.MATU = 'TU9') INSERT INTO CHITIET_HOADON VALUES ('TU9','CN2KV207',2); delete from CHITIET_HOADON where MATU='TU9' and MAHD='CN2KV207'
Kết quả test:
Câu 4. Viết Trigger bắt lỗi cho lệnh Insert vào bảng
CHITIET_PHIEUNHAP. Khi thêm chi tiết nhập thì kiểm tra trùng mã, bắt không
được nhập số âm phải tăng số lượng tồn của nguyên liệu (nhập hàng)
Create Trigger KT_INSERT_CTPN On CHITIET_PHIEUNHAP INSTEAD OF Insert As Declare @MANL CHAR(10); Declare @MAPN CHAR(10); Declare @SL FLOAT; Declare @trungma int;
SELECT @MANL=MANL FROM inserted; SELECT @MAPN=MAPN FROM inserted; SELECT @SL=SOLUONG FROM inserted;
Select @trungma= COUNT(*) from CHITIET_PHIEUNHAP WHERE MAPN=@MAPN AND MANL=@MANL;
--kiểm tra trùng mã if(@trungma>0) BEGIN
PRINT N'Cảnh báo: trùng mã, đã tồn tại nên bạn không thể thêm được' RollBack Tran Return END ELSE --kiểm tra nhập số âm IF(@SL <=0) BEGIN PRINT N'Lỗi: Không được nhập số lượng âm'
Số lượng nguyên liệu để làm TU9 còn trong kho trước và sau khi xóa CTHD
65
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
RollBack Tran Return --Dừng, thoát hàm END ELSE --tăng số lượng tồn BEGIN --insert INSERT INTO CHITIET_PHIEUNHAP VALUES (@MANL,@MAPN,@SL); --Tăng số lượng tồn nguyên liệu Update nl Set nl.SOLUONG = nl.SOLUONG + ctpn.SOLUONG from NGUYENLIEU nl inner join CHITIET_PHIEUNHAP ctpn on nl.MANL = ctpn.MANL END
Test: select * from CHITIET_PHIEUNHAP insert into CHITIET_PHIEUNHAP values('apple','PN2',100) select * from NGUYENLIEU where MANL='apple'
Kết quả test:
Câu 5. Viết Trigger bắt lỗi cho lệnh Update vào bảng
CHITIET_PHIEUNHAP. Khi sửa số lượng nguyên liệu trong chi tiết phiếu nhập
thì: không được sửa số âm, phải sửa số lượng tồn của nguyên liệu
CREATE TRIGGER SUA_CHITIET_PHIEUNHAP ON CHITIET_PHIEUNHAP FOR UPDATE AS Declare @SL float Declare @SL_Truockhisua float Declare @MANL char(10) Declare @MAPN char(10)
SELECT @SL= INSERTED.SOLUONG,@MANL= INSERTED.MANL, @MAPN= inserted.MAPN FROM INSERTED
SELECT @SL_Truockhisua= DELETED.SOLUONG FROM DELETED IF(@SL <=0) BEGIN
PRINT N'Lỗi: Không được nhập số lượng âm' RollBack Tran Return --Dừng, thoát hàm
END --Ngược lại
ELSE IF(@SL_Truockhisua>@SL) -- Trừ NL UPDATE NGUYENLIEU SET NGUYENLIEU.SOLUONG = NGUYENLIEU.SOLUONG-
(@SL_Truockhisua-@SL) FROM NGUYENLIEU INNER JOIN CHITIET_PHIEUNHAP ON NGUYENLIEU.MANL = CHITIET_PHIEUNHAP.MANL WHERE NGUYENLIEU.MANL=@MANL AND CHITIET_PHIEUNHAP.MAPN=@MAPN
Số lượng nguyên liệu c-mint trước và sau khi thêm phiếu nhập
Số phiếu nhập kẹo c-mint thay đổi trước và sau khi nhập
66
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
ELSE IF (@SL_Truockhisua<@SL) -- CÔng thêm NL UPDATE NGUYENLIEU SET NGUYENLIEU.SOLUONG = NGUYENLIEU.SOLUONG + (@SL-
@SL_Truockhisua) FROM NGUYENLIEU INNER JOIN CHITIET_PHIEUNHAP ON NGUYENLIEU.MANL = CHITIET_PHIEUNHAP.MANL
WHERE NGUYENLIEU.MANL=@MANL AND CHITIET_PHIEUNHAP.MAPN=@MAPN
ELSE PRINT N'Cảnh báo: Số trước khi sửa và sao khi sửa giống nhau' RollBack Tran
Return --Dừng, thoát hàm
Test: UPDATE CHITIET_PHIEUNHAP SET CHITIET_PHIEUNHAP.SOLUONG=120 FROM CHITIET_PHIEUNHAP WHERE CHITIET_PHIEUNHAP.MANL='apple' AND CHITIET_PHIEUNHAP.MAPN='PN4' GO SELECT CHITIET_PHIEUNHAP.MANL, CHITIET_PHIEUNHAP.MAPN, CHITIET_PHIEUNHAP.SOLUONG, NGUYENLIEU.SOLUONG AS SL_TRONGKHO FROM NGUYENLIEU INNER JOIN CHITIET_PHIEUNHAP ON NGUYENLIEU.MANL = CHITIET_PHIEUNHAP.MANL WHERE (CHITIET_PHIEUNHAP.MANL = 'apple' AND CHITIET_PHIEUNHAP.MAPN='PN4')
Kết quả test:
Câu 6. Viết Trigger bắt lỗi cho lệnh Delete vào bảng
CHITIET_PHIEUNHAP. Khi xóa chi tiết nhập thì phải giảm số lượng tồn của
nguyên liệu, kiểm tra chi tiết phiếu nhập của Mã phiếu nhập vừa xóa còn trong
bảng chi tiết phiếu nhập hay không, nếu không thì xóa phiếu nhập đó bên bảng
PHIẾU NHẬP. CREATE TRIGGER XOA_CT_GIAMSLNL ON CHITIET_PHIEUNHAP FOR DELETE AS BEGIN -- Cap nhat số lượng Nguyên Liệu
UPDATE NGUYENLIEU SET NGUYENLIEU.SOLUONG = NGUYENLIEU.SOLUONG - DELETED.SOLUONG FROM DELETED,NGUYENLIEU WHERE NGUYENLIEU.MANL=DELETED.MANL
END
Test: SELECT * FROM NGUYENLIEU WHERE MANL='apple' SELECT * FROM CHITIET_PHIEUNHAP WHERE MAPN='PN4' AND MANL='apple' DELETE FROM CHITIET_PHIEUNHAP WHERE CHITIET_PHIEUNHAP.MANL = 'apple'
Kết quả test:
Số lượng nguyên liệu apple trước và sau khi xóa
Số lượng nguyên liệu apple trước và sau khi sửa
67
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 7. Viết Trigger cho lệnh Delete của bảng NHANVIEN. Khi xóa nhân
viên thì tự động xóa các bảng có liên quan ( chỉ xóa nhân viên đã nghĩ hơn 12
tháng) CREATE TRIGGER XOANHANVIEN ON NHANVIEN INSTEAD OF DELETE AS BEGIN Declare @D CHAR(5); declare @HD char(50); declare @PN char(10); declare @ngayvao datetime; declare @ngaynghi datetime; select @D=MANV FROM deleted; select @ngaynghi= NGAYNGHI from deleted; select @ngayvao= NGAYNGHI from deleted; if(@ngaynghi!=NULL) if(@ngaynghi-@ngayvao>12) begin --xóa địa chỉ DELETE FROM DIACHI_NHANVIEN WHERE MANV=@D; --xóa sdt DELETE FROM SDT_NHANVIEN WHERE MANV=@D --xóa email DELETE FROM EMAIL_NHANVIEN WHERE MANV=@D --xóa chi tiết phiếu nhập SELECT @PN=b.MAPN FROM CHITIET_PHIEUNHAP a JOIN PHIEUNHAP b ON a.MAPN=b.MAPN WHERE b.MANV=@D; DELETE FROM CHITIET_PHIEUNHAP WHERE MAPN=@PN; --xóa phiếu nhập DELETE FROM PHIEUNHAP WHERE MAPN=@PN; --xóa phiếu chi DELETE FROM PHIEUCHI WHERE MANV=@D; --xóa phiếu phụ thu DELETE FROM PHIEUPHUTHU WHERE MANV=@D; --xóa chi tiết hóa đơn SELECT @HD=b.MAHD FROM CHITIET_HOADON a JOIN HOADON b ON a.MAHD=b.MAHD WHERE b.MANV=@D; DELETE FROM CHITIET_HOADON WHERE MAHD=@HD; --xóa hóa đơn DELETE FROM HOADON WHERE MAHD=@HD; DELETE FROM NHANVIEN WHERE MANV=@D; END ELSE BEGIN PRINT N'Lỗi: nhân viên này chưa nghĩ hơn 12 tháng' END ELSE BEGIN PRINT N'Lỗi: nhân viên này chưa nghĩ, vui lòng xem lại' END END
Test: SELECT * FROM NHANVIEN WHERE MANV='NV17' DELETE from NHANVIEN WHERE MANV='NV17'
Kết quả test:
68
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Câu 8. Viết Trigger bắt lỗi tuổi nhân viên khi Insert vào bảng NHANVIEN.
Điều kiện nhân viên phải trên 18 tuổi
CREATE TRIGGER BAY_TUOI ON NHANVIEN INSTEAD OF INSERT as begin Declare @MANV CHAR(5); Declare @TENNV NVARCHAR(100); Declare @MACV CHAR(3); Declare @MACN CHAR(5); Declare @NGAYSINH DATETIME; Declare @GT BIT; Declare @NGAYVAO DATETIME; Declare @NGAYRA DATETIME; select @MANV=MANV from inserted; select @TENNV=TENNV from inserted; select @MACV=MACV from inserted; select @MACN=MACN from inserted; select @NGAYSINH=NGAYSINH from inserted; select @GT=GIOITINH from inserted; select @NGAYVAO=NGAYVAO from inserted; select @NGAYRA=NGAYNGHI from inserted; if exists (select * from NHANVIEN where MANV=@MANV) begin PRINT N'Lỗi: Đã tồn tại nhân viên này' rollback tran end else if exists (select * from inserted WHERE (YEAR(GETDATE())-YEAR(inserted.NGAYSINH))<=18 ) begin PRINT N'Lỗi: Chưa đủ 18 tuổi’ rollback tran end else --insert INSERT INTO NHANVIEN VALUES (@MANV,@TENNV,@MACV,@MACN,@NGAYSINH,@GT,@NGAYVAO,@NGAYRA); End
Test: INSERT INTO NHANVIEN VALUES('NV99',N'Nguyễn','CV1','CN1','03/14/1998',0,'01/01/2015','')
Thông báo xuất hiện khi muốn xóa NV17
Thông tin nhân viên NV17
69
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
INSERT INTO NHANVIEN VALUES('NV21',N'Nguyễn','CV1','CN1','03/14/1998',0,'01/01/2015','')
Kết quả test:
Câu 9. Viết Trigger bắt lỗi tuổi nhân viên khi Update vào bảng
NHANVIEN. Điều kiện nhân viên phải trên 18 tuổi.
CREATE TRIGGER BAY_TUOI_update ON NHANVIEN FOR UPDATE as begin Declare @MANV CHAR(5); Declare @TENNV NVARCHAR(100); Declare @MACV CHAR(3); Declare @MACN CHAR(5); Declare @NGAYSINH DATETIME; Declare @GT BIT; Declare @NGAYVAO DATETIME; Declare @NGAYRA DATETIME; select @MANV=MANV from inserted; select @TENNV=TENNV from inserted; select @MACV=MACV from inserted; select @MACN=MACN from inserted; select @NGAYSINH=NGAYSINH from inserted; select @GT=GIOITINH from inserted; select @NGAYVAO=NGAYVAO from inserted; select @NGAYRA=NGAYNGHI from inserted; if exists (select * from inserted WHERE (YEAR(GETDATE())-YEAR(inserted.NGAYSINH))<=18 ) begin PRINT N'Lỗi: Chưa đủ 18 tuổi’ rollback tran end end
Câu 10. Viết Trigger bắt lỗi số điện thoại trong bảng SDT_NHANVIEN.
Điều kiện số điện thoại gồm 10 hoặc 11 số, bắt đầu bằng ‘09’ hoặc ’01’.
Create Trigger KT_SDT ON SDT_NHANVIEN AFTER insert, update AS if exists(select * from inserted where SODT not like '[0][9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' AND SODT not like '[0][1][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') begin raiserror('Số điện thoại gồm 10 hoặc 11 chữ số, bắt đầu bằng 09 hoặc 01',16,1);
70
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
rollback end;
Test: INSERT INTO SDT_NHANVIEN VALUES ('NV15', 'DT18', 'a0999123456')
Kết quả test:
Câu 11. Viết Trigger bắt lỗi email trong bảng EMAIL_NCC. Điều kiện
email phải đúng cú pháp ( có đuôi @gmail.com hoặc @gmail.vn) CREATE TRIGGER KT_email_NCC ON EMAIL_NCC FOR INSERT, UPDATE AS if exists(select * from inserted where EMAIL not like '%_@__%.'+'com' AND EMAIL not like '%_@__%.'+'vn') begin raiserror('Nhập không đúng định dạng email',16,1); rollback end;
Test: INSERT INTO EMAIL_NCC VALUES ('NCC9','EM22','@gmail.com')
Kết quả test:
Câu 12. Viết Trigger bắt lỗi email trong bảng EMAIL_NHANVIEN. Điều
kiện email phải đúng cú pháp ( có đuôi @gmail.com hoặc @gmail.vn)
CREATE TRIGGER KT_email_nv ON EMAIL_NHANVIEN FOR INSERT, UPDATE AS if exists(select * from inserted where EMAIL not like '%_@__%.'+'com' AND EMAIL not like '%_@__%.'+'vn') begin raiserror('Nhập không đúng định dạng email',16,1); rollback end;
Câu 13. Viết Trigger bắt lỗi dữ liệu không âm cho các trường số lượng ,
tổng tiền,.. (kiểu số) có các bảng dữ liệu.
CREATE TRIGGER SL_KHONGAM ON CHITIET_CONGTHUC FOR INSERT,UPDATE AS Declare @SL float SELECT @SL= INSERTED.SOLUONG FROM INSERTED
71
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
IF(@SL <=0) BEGIN PRINT N'Lỗi: Không được nhập số lượng âm' RollBack Tran Return --Dừng, thoát hàm
END
Test: INSERT INTO CHITIET_CONGTHUC VALUES ('TU1','milk',-10)
Kết quả test:
==================================================
CREATE TRIGGER SL_KHONGAM ON CHITIET_CONGTHUC FOR INSERT,UPDATE AS Declare @SL float
SELECT @SL= INSERTED.SOLUONG FROM INSERTED IF(@SL <=0) BEGIN
PRINT N'Lỗi: Không được nhập số lượng âm' RollBack Tran Return --Dừng, thoát hàm END
==================================================
CREATE TRIGGER SL_KHONGAM_nguyenlieu ON NGUYENLIEU FOR INSERT,UPDATE AS Declare @SL float SELECT @SL= INSERTED.SOLUONG FROM INSERTED IF(@SL <=0) BEGIN PRINT N'Lỗi: Không được nhập số lượng âm' RollBack Tran
Return --Dừng, thoát hàm
END
==================================================
CREATE TRIGGER SL_KHONGAM_TU ON THUCUONG FOR INSERT,UPDATE AS Declare @SL float SELECT @SL= INSERTED.DONGIA FROM INSERTED IF(@SL <=0) BEGIN PRINT N'Lỗi: Không được nhập số lượng âm' RollBack Tran Return --Dừng, thoát hàm
END
==================================================
CREATE TRIGGER SL_KHONGAM_PHUTHU ON PHIEUPHUTHU
72
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
FOR INSERT,UPDATE AS Declare @SL float SELECT @SL= INSERTED.SOTIEN FROM INSERTED IF(@SL <=0) BEGIN PRINT N'Lỗi: Không được nhập số lượng âm' RollBack Tran Return --Dừng, thoát hàm
END
==================================================
CREATE TRIGGER SL_KHONGAM_PHIEUCHI ON PHIEUCHI FOR INSERT,UPDATE AS Declare @SL float SELECT @SL= INSERTED.TONGTIEN FROM INSERTED IF(@SL <=0) BEGIN PRINT N'Lỗi: Không được nhập số TIỀN âm' RollBack Tran Return --Dừng, thoát hàm
END
Câu 14. Ràng buộc nhập (INSERT, UPDATE) không trùng mã
CREATE Trigger KIEMTRA_TRUNGMA On BAOCAO INSTEAD OF Insert As Declare @mabc char(10); Declare @manv char(5); Declare @D int; Declare @trungma int; --kiểm tra trùng mã Select @mabc=MABC FROM inserted; Select @manv=MANV FROM inserted; Select @trungma= COUNT(*) from BAOCAO WHERE MANV=@manv AND MABC=@mabc; IF(@trungma>0) BEGIN PRINT N'Cảnh báo: TRÙNG MÃ' RollBack Tran Return END ELSE BEGIN Declare @ten nvarchar(100); Declare @ngay datetime; Declare @noidung nvarchar(max); select @ten = TENBC from inserted; select @ngay = NGAYLAP from inserted; select @noidung = NOIDUNG from inserted; INSERT INTO BAOCAO VALUES(@mabc,@manv, @ten,@ngay,@noidung)
END
Test:
73
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
INSERT INTO BAOCAO VALUES('BC7','NV1',N'Doanh thu quý 4','3/3/2015',N'doanhthu1_2014.pdf')
Kết quả test:
CREATE Trigger KIEMTRA_TRUNG On CHINHANH
INSTEAD OF Insert As Declare @macn char(5); Declare @D int; Declare @trungma int; --kiểm tra trùng mã Select @macn=MACN FROM inserted; Select @trungma= COUNT(*) from CHINHANH WHERE MACN=@macn ; IF(@trungma>0) BEGIN PRINT N'Cảnh báo: TRÙNG MÃ' RollBack Tran Return END ELSE BEGIN Declare @ten nvarchar(100); Declare @hesogia float; select @ten = TENCN from inserted; select @hesogia = HESOGIA from inserted; INSERT INTO CHINHANH VALUES(@macn,@ten,@hesogia)
END
==================================================
CREATE Trigger KIEMTRA_KHUVUC On KHUVUC INSTEAD OF Insert As Declare @makv char(3); Declare @D int; Declare @trungma int; --kiểm tra trùng mã Select @makv=MAKV FROM inserted; Select @trungma= COUNT(*) from KHUVUC WHERE MAKV=@makv ; IF(@trungma>0) BEGIN PRINT N'Cảnh báo: TRÙNG MÃ' RollBack Tran Return END ELSE BEGIN Declare @ten nvarchar(10); Declare @hesogia float; select @ten = TENKV from inserted; select @hesogia = HESOGIA from inserted;
74
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
INSERT INTO KHUVUC VALUES(@makv,@ten,@hesogia) END
CREATE Trigger KIEMTRA_CHUCVU On CHUCVU INSTEAD OF Insert As Declare @macv char(3); Declare @D int; Declare @trungma int; --kiểm tra trùng mã Select @macv=MACV FROM inserted; Select @trungma= COUNT(*) from CHUCVU WHERE MACV=@macv ; IF(@trungma>0) BEGIN PRINT N'Cảnh báo: TRÙNG MÃ' RollBack Tran Return END ELSE BEGIN Declare @ten nvarchar(50); select @ten = TENCV from inserted; INSERT INTO CHUCVU VALUES(@macv,@ten) END
==================================================
CREATE Trigger KIEMTRA_DIACHINCC On DIACHI_NCC INSTEAD OF Insert As Declare @mancc char(5); Declare @matp char(5); Declare @maq char(5); Declare @D int; Declare @trungma int; --kiểm tra trùng mã Select @mancc=MANCC FROM inserted; Select @matp=MATP FROM inserted; Select @maq=MAQ FROM inserted; Select @trungma= COUNT(*) from DIACHI_NCC WHERE MANCC=@mancc AND MATP=@matp AND MAQ=@maq ; IF(@trungma>0) BEGIN PRINT N'Cảnh báo: TRÙNG MÃ' RollBack Tran Return END ELSE BEGIN Declare @diachi nvarchar(100); select @diachi = DIACHI from inserted; INSERT INTO DIACHI_NCC VALUES(@mancc,@matp,@maq,@diachi) END
=================================================
CREATE Trigger KIEMTRA_DIACHINV On DIACHI_NHANVIEN INSTEAD OF Insert As Declare @manv char(5);
75
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Declare @matp char(5); Declare @maq char(5); Declare @D int; Declare @trungma int; Select @manv=MANV FROM inserted; Select @matp=MATP FROM inserted; Select @maq=MAQ FROM inserted; Select @trungma= COUNT(*) from DIACHI_NHANVIEN WHERE MANV=@manv AND MATP=@matp AND MAQ=@maq ; IF(@trungma>0) BEGIN PRINT N'Cảnh báo: TRÙNG MÃ' RollBack Tran Return END ELSE BEGIN Declare @diachi nvarchar(100); select @diachi = DIACHI from inserted; INSERT INTO DIACHI_NHANVIEN VALUES(@manv,@matp,@maq,@diachi) END CREATE Trigger KIEMTRA_QUANHUYEN On QUAN_HUYEN INSTEAD OF Insert As Declare @maq char(5); Declare @D int; Declare @trungma int; --kiểm tra trùng mã Select @maq=MAQ FROM inserted; Select @trungma= COUNT(*) from QUAN_HUYEN WHERE MAQ=@maq ; IF(@trungma>0) BEGIN PRINT N'Cảnh báo: TRÙNG MÃ' RollBack Tran Return END ELSE BEGIN Declare @ten nvarchar(50); select @ten = TENQ from inserted; INSERT INTO QUAN_HUYEN VALUES(@maq,@ten) END
==================================================
CREATE Trigger KIEMTRA_TINHTP On TINH_THANHPHO INSTEAD OF Insert As Declare @matp char(5); Declare @D int; Declare @trungma int; Select @matp=MATP FROM inserted; Select @trungma= COUNT(*) from TINH_THANHPHO WHERE MATP=@matp ; IF(@trungma>0) BEGIN PRINT N'Cảnh báo: TRÙNG MÃ' RollBack Tran Return END ELSE BEGIN Declare @ten nvarchar(50); select @ten = TENTP from inserted; INSERT INTO TINH_THANHPHO VALUES(@matp,@ten) END
76
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
6. Phân quyền
Hệ thống có 4 nhóm quyền: BANHANG, KIEMKHO, QUANLY, GIAMDOC
a. BANHANG:
Các thao tác được phép thực hiện:
Xem và thêm vào bảng CHITIET_HOADON.
Xem và thêm vào bảng HOADON.
Xem và thêm vào bảng PHIEUPHUTHU.
Xem và thêm vào bảng PHIEUCHI.
Xem bảng CHITIET_CONGTHUC.
Xem bảng KHUVUC.
Xem bảng CHINHANH.
Xem bảng THUCUONG.
Xem bảng LOAITHUCUONG.
Xem bảng NGUYENLIEU.
Code:
--tạo nhóm quyền với các phân quyền exec sp_addrole BANHANG GRANT SELECT,INSERT ON dbo.CHITIET_HOADON TO BANHANG GRANT SELECT,INSERT ON dbo.HOADON TO BANHANG GRANT SELECT,INSERT ON dbo.PHIEUPHUTHU TO BANHANG GRANT SELECT,INSERT ON dbo.PHIEUCHI TO BANHANG GRANT SELECT ON dbo.CHITIET_CONGTHUC TO BANHANG GRANT SELECT ON KHUVUC TO BANHANG GRANT SELECT ON dbo.CHINHANH TO BANHANG GRANT SELECT ON dbo.THUCUONG TO BANHANG GRANT SELECT ON dbo.LOAITHUCUONG TO BANHANG GRANT SELECT ON dbo.NGUYENLIEU TO BANHANG --LỆNH XÓA QUYỀN REVOKE ON dbo.NGUYENLIEU TO BANHANG --tạo login,tạo user thuộc nhóm quyền --chinhanh 1 --nv1: nguyễn thiện đức exec sp_addlogin nguyenthienduc,1,QUAN_LY_QUAN_CAFE_12_8_2015 exec sp_adduser nguyenthienduc,user1,BANHANG --nv2: huynhanhthu exec sp_addlogin huynhanhthu,1,QUAN_LY_QUAN_CAFE_12_8_2015 exec sp_adduser huynhanhthu,user2,BANHANG --nv3: nguyenthoaimy exec sp_addlogin nguyenthoaimy,1,QUAN_LY_QUAN_CAFE_12_8_2015 exec sp_adduser nguyenthoaimy,user8,BANHANG --nv4:huongnguyen exec sp_addlogin huongnguyen,1,QUAN_LY_QUAN_CAFE_12_8_2015
77
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
exec sp_adduser huongnguyen,user9,BANHANG --nv5:quocdung exec sp_addlogin quocdung,1,QUAN_LY_QUAN_CAFE_12_8_2015 exec sp_adduser quocdung,user10,BANHANG --nv6:luonganhduy exec sp_addlogin luonganhduy,1,QUAN_LY_QUAN_CAFE_12_8_2015 exec sp_adduser luonganhduy,user11,BANHANG --nv7:tungnhan exec sp_addlogin tungnhan,1,QUAN_LY_QUAN_CAFE_12_8_2015 exec sp_adduser tungnhan,user12,BANHANG
b. KIEMKHO:
Các thao tác được phép thực hiện:
Xem và thêm bảng PHIEUNHAP.
Xem và thêm bảng CHITIET_PHIEUNHAP
Xem và thêm bảng NGUYENLIEU.
Hình 2.1: Kết quả sinh phân quyền BANHAN
78
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Code:
--tạo nhóm quyền với các phân quyền exec sp_addrole KIEMKHO GRANT SELECT,INSERT ON dbo.PHIEUNHAP TO KIEMKHO GRANT SELECT,INSERT ON dbo.CHITIET_PHIEUNHAP TO KIEMKHO GRANT SELECT,INSERT ON dbo.NGUYENLIEU TO KIEMKHO --add user exec sp_addlogin duongthihuong,1,QUAN_LY_QUAN_CAFE_12_8_2015 exec sp_adduser duongthihuong,user3,KIEMKHO exec sp_addlogin dongquoctien,1,QUAN_LY_QUAN_CAFE_12_8_2015 exec sp_adduser dongquoctien,user6,KIEMKHO exec sp_addlogin trinhxuanluong,1,QUAN_LY_QUAN_CAFE_12_8_2015 exec sp_adduser trinhxuanluong,user7,KIEMKHO exec sp_addlogin ngobaochau,1,QUAN_LY_QUAN_CAFE_12_8_2015 exec sp_adduser ngobaochau,user13,KIEMKHO
Hình 2.2: Kết quả sinh phân quyền KIEMKHO
79
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
c. QUANLY:
Các thao tác được phép thực hiện:
Xem, thêm và sửa bảng BAOCAO.
Xem, thêm và sửa bảng CHITIET_CONGTHUC.
Xem, thêm và sửa bảng DIACHI_NHANVIEN.
Xem, thêm và sửa bảng CHINHANH.
Xem, thêm và sửa bảng DIACHI_CHINHANH.
Xem, thêm và sửa bảng DIACHI_NCC.
Xem, thêm và sửa bảng EMAIL_NCC.
Xem, thêm và sửa bảng EMAIL_NHANVIEN.
Xem, thêm và sửa bảng KHUVUC.
Xem, thêm và sửa bảng NHANVIEN.
Xem, thêm và sửa bảng QUAN_HUYEN.
Xem, thêm và sửa bảng SDT_CHINHANH.
Xem, thêm và sửa bảng SDT_NHACUNGCAP.
Xem, thêm và sửa bảng SDT_NHANVIEN.
Xem, thêm và sửa bảng TINH_THANHPHO.
Xem, thêm và sửa bảng LOAITHUCUONG.
Xem, thêm và sửa bảng NHACUNGCAP.
Xem và thêm bảng CHITIET_HOADON.
Xem và thêm bảng CHITIET_PHIEUNHAP.
Xem và thêm bảng HOADON.
Xem và thêm bảng PHIEUNHAP.
Xem và thêm bảng PHIEUCHI.
Xem và thêm bảng PHIEUPHUTHU.
Xem và thêm bảng THUCUONG.
Chỉ xem bảng CHUCVU.
Code:
--tạo nhóm quyền với các phân quyền exec sp_addrole QUANLY GRANT SELECT,UPDATE, INSERT ON BAOCAO TO QUANLY GRANT SELECT,UPDATE, INSERT ON dbo.CHITIET_CONGTHUC TO QUANLY
80
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
GRANT SELECT,UPDATE, INSERT ON dbo.DIACHI_NHANVIEN TO QUANLY GRANT SELECT,UPDATE, INSERT ON dbo.CHINHANH TO QUANLY GRANT SELECT,UPDATE, INSERT ON dbo.DIACHI_CHINHANH TO QUANLY GRANT SELECT,UPDATE, INSERT ON dbo.DIACHI_NCC TO QUANLY GRANT SELECT,INSERT, UPDATE ON dbo.EMAIL_NCC TO QUANLY GRANT SELECT,INSERT, UPDATE ON dbo.EMAIL_NHANVIEN TO QUANLY GRANT SELECT,INSERT, UPDATE ON dbo.KHUVUC TO QUANLY GRANT SELECT,INSERT, UPDATE ON dbo.NHANVIEN TO QUANLY GRANT SELECT,INSERT, UPDATE ON dbo.QUAN_HUYEN TO QUANLY GRANT SELECT,INSERT, UPDATE ON dbo.SDT_CHINHANH TO QUANLY GRANT SELECT,INSERT, UPDATE ON dbo.SDT_NHACUNGCAP TO QUANLY GRANT SELECT,INSERT, UPDATE ON dbo.SDT_NHANVIEN TO QUANLY GRANT SELECT,INSERT, UPDATE ON dbo.TINH_THANHPHO TO QUANLY GRANT SELECT,INSERT, UPDATE ON dbo.LOAITHUCUONG TO QUANLY --Chỉ xem, nhập GRANT SELECT,INSERT ON dbo.CHITIET_HOADON TO QUANLY GRANT SELECT,INSERT ON dbo.CHITIET_PHIEUNHAP TO QUANLY GRANT SELECT ON dbo.CHUCVU TO QUANLY --[Không ĐƯỢC SỬA XÓA HÓA ĐƠN - TIỀN] GRANT SELECT,INSERT ON dbo.HOADON TO QUANLY GRANT SELECT,INSERT ON dbo.PHIEUNHAP TO QUANLY GRANT SELECT,INSERT ON dbo.PHIEUCHI TO QUANLY GRANT SELECT,INSERT ON dbo.PHIEUPHUTHU TO QUANLY GRANT SELECT,INSERT ON dbo.THUCUONG TO QUANLY GRANT SELECT,INSERT, UPDATE ON dbo.NHACUNGCAP TO QUANLY --add user exec sp_addlogin quanly,1,QUAN_LY_QUAN_CAFE_12_8_2015 exec sp_adduser quanly,user4,QUANLY exec sp_addlogin quanly1,1,QUAN_LY_QUAN_CAFE_12_8_2015 exec sp_adduser quanly1,user15,QUANLY
Hình 2.3: Kết quả sinh phân quyền QUANLY
81
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
d. GIAMDOC:
Các thao tác được phép thực hiện:
Toàn quyền với tất cả các bảng.
Code:
exec sp_addrole GIAMDOC GRANT ALL PRIVILEGES ON BAOCAO TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.CHITIET_CONGTHUC TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.DIACHI_NHANVIEN TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.CHINHANH TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.DIACHI_CHINHANH TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.DIACHI_NCC TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.EMAIL_NCC TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.EMAIL_NHANVIEN TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.KHUVUC TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.NHACUNGCAP TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.NHANVIEN TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.QUAN_HUYEN TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.SDT_CHINHANH TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.SDT_NHACUNGCAP TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.SDT_NHANVIEN TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.THUCUONG TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.TINH_THANHPHO TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.CHITIET_HOADON TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.CHITIET_PHIEUNHAP TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.HOADON TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.PHIEUNHAP TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.PHIEUCHI TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.CHUCVU TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.LOAITHUCUONG TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.THUCUONG TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.NGUYENLIEU TO GIAMDOC GRANT ALL PRIVILEGES ON dbo.PHIEUPHUTHU TO GIAMDOC --add user exec sp_addlogin giamdoc,1,QUAN_LY_QUAN_CAFE_12_8_2015 exec sp_adduser giamdoc,user5,GIAMDOC
Hình 2.4: Kết quả sinh phân quyền GIAMDOC
82
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
CHƯƠNG III: TỔNG KẾT
3.1.Ưu điểm:
Hệ thống quản lý tương đối đầy đủ các chức năng quản lý về các khâu
xuất nhập hàng, bán hàng, thống kê doanh thu, lợi nhuận, báo cáo.
Đưa ra được những phương pháp phục vụ cho nhu cầu thức uống của
khách
Quản lý được việc xuất nhập kho
Phân quyền người dùng với từng nhiệm vụ riêng biệt
Dữ liệu có tính tự động cập nhật về số lượng nguyên liệu trong kho
3.2. Khuyết điểm:
Hệ cơ sở dữ liệu chưa triệt để
Bảo mật dữ liệu chưa cao
3.3.Hướng phát triển:
o Tiếp tục nghiên cứu và trau dồi kiến thức, đặc biệt là cơ sở dữ liệu và
kỹ thuật lập trinh đề giải quyết các khuyết điểm trên.
o Nghiên cứu sâu hơn về tính tiến hóa của dữ liệu cũng như tính chính
xác tránh dư thừa.
o Đề ra những phương án sao lưu dữ liệu để tránh những trường hợp sự
cố đáng tiếc sẽ xảy ra.
o Xây dựng bảo mật dữ liệu cao hơn.
83
BÁO CÁO ĐỒ ÁN THỰC TẬP HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
LỜI KẾT
Hệ chuyên gia xử lý sự cố máy tính giúp cho việc tin học hóa trong việc
phát hiện lỗi và sửa chữa máy tính được tốt hơn, chính xác và khoa học hơn, làm
tăng năng suất và hiệu quả công việc. Trên cở sở giúp cho chuẩn đoán “bệnh” một
cách tự động hóa, tránh được những sai sót, những hạn chế, đáp ứng được yêu cầu
lãnh đạo, chỉ đạo của cấp trên trong mọi tình huống kịp thời nhất
Hệ chuyên gia xử lý sự cố máy tính hoàn thành tương đối tốt đáp ứng được
nhu cầu cập nhật, truy vấn thông tin nhanh chóng và giải quyết phần nào quản lý
lưu trữ thông tin. Tuy nhiên, chương trình vẫn còn nhược điểm, thiếu sót cần được
hoàn thiện trong thời gian tới do lý do trình độ kỹ thuật lập trình chưa tốt, không
thực hiện được một số chức năng trong quá trình khảo sát và phân tích thiết kế
Chúng em xin chân thành cảm ơn các thầy cô trong khoa Công Nghệ
Thông Tin của Trường ĐH Trần Đại Nghĩa đã trang bị cho em những kiến thức
cơ bản, cần thiết trong những năm học vừa qua để em có thể hoàn thành đồ án
môn học này. Đặc biệt, chúng em xin chân thành cảm Thầy Phùng Thế Bảo, người
đã tận tình chỉ bảo hướng dẫn em thực hiện đề tài trong suốt thời gian qua.
Một lần nữa chúng em xin chân thành cảm ơn!