15_05_baocao
TRANSCRIPT
Hệ Quản Trị Cơ SởDữ Liệu 1
TRƢỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN HỆ THỐNG THÔNG TIN
HLTKNHUNG-01
Hệ thống MuaVoucher
Mã nhóm: 15
SVTH: Trần Duy Minh – 1241081
Nguyễn Phạm Hoàng Anh – 1241003
Huỳnh Phƣơng Duy – 1241017
TpHCM – 2013.
Hệ Quản Trị Cơ SởDữ Liệu 2
1 Phân công công việc
STT Công việc 1241081 1241003 1241017 % Hoànthành
GV nhận
xét Cơ sở dữ liệu:
1 Usecase x 100
2 Mô hình ER x 100
3 Mô hình hóa chức năng x 100
4 Thiết k ế CSDL x 100
5 Nhậ p liệu
x 100
6 Cài đặt Store Procedures x x x 100
7 Tìm kiếm các trườ ng hợ p lỗi truy xuất đồngthờ i
x x x100
8 Cài đặt Transaction cho các trườ ng hợ p lỗi
truy xuất đồng thờ ix x x
100
9 Giải quyết vấn đề lỗi truy xuất đồng thờ i
x x x 100
Giao diện: 10 Tìm kiếm template trang chủ x 100
11 Tìm kiếm template admin và doanh nghiệ p
x 100
12 Thiết k ế template trang chủ x 100
13 Thiết k ế template admin và doanh nghiệ p x 100
14 Tìm kiếm hình ảnh Voucher
x 100
Admin:
15 Đăng nhậ p x 100
16 Đăng xuất x 100
17 Đổi mật khầu
x 100
18 Quản lí Voucher (xem danh sách voucher dang hoạt đông và ngừng hoạt động, cậ pnhật, xóa)
x100
19 Quản lí Thẻ nạ p (xem danh sach thẻ chưanạp và thẻ đã đượ c nạ p,thêm, cậ p nhật tỉ lệ khuyến mãi)
x100
20 Quản lí Doanh nghiệ p (Xem danh sáh hợ pđồng và thêm hợp đồng)
x100
21 Quản lí Đơn hàng (Xem danh sách đã thanhtoán, đơn hàng trả sau và cậ p nhật tr ạng tháiđơn hàng trả sau)
x100
Doanh nghiệp: 22 Đăng nhậ p x 100
23 Đăng xuất x 100
24 Đổi mật khẩu x 100
25 Quản lí Voucher (thêm voucher, xem danhsách voucher dang hoạt động, ngừng hoạtđộng, cậ p nhật tỉ giá khuyến mãi)
x100
26 Xem thông tin hợp đồng (hết hạn, còn thờ ihạn)
x100
Khách hàng: 27 Đăng ký
x 100
28 Đăng nhậ p x 100
29 Đổi mật khẩu x 100
30 Xem thông tin cá nhân x 100
31 Voucher, xem chi tiết voucher x 100
32 Tìm kiếm (theo tên, giá)
x 100
33 Xem giỏ hàng x 100
34 Thanh toán x 100
35 Xem lịch sử mua hàng x 100
Hệ Quản Trị Cơ SởDữ Liệu 3
36 Nạ p thẻ x 100
37 Xem lịch sử nạ p thẻ x 100
2 Phần báo cáo:
STT Nội dung % Hoàn thành MSSV tham gia GV nhận xét
Lần 1
1 Mô tả hệ thống 100 1241081
1241003
1241017
Lần 2
2 Thiết k ế mô hình ER
10012410811241003
1241017
3 Vẽ lượ c đồ cơ sở dữ liệu 10012410811241003
1241017
4 Các mối quan hệ trong lượ c đồ ER 100
1241081
1241003
1241017
5 Mô tả lược đồ cơ sở dữ liệu 100
1241081
12410031241017
6 Mô tả r àng buộc của cơ sở dữ liệu 100
1241081
12410031241017
Lần3
7 Mô tả thủ tục của hệ thống
100
1241081
1241003
1241017
Lần 4
8Mô tả, cài đặt xử lý tình huống tranh
chấp đồng thời và Deadlock
100
1241081
12410031241017
Lần 5
9
Toàn bộ báo cáo - Script CSDL
- Script tranh chấ p- Script Fix lỗi
- Ứ ng dụng demo- Quay phim demo
10012410811241003
1241017
3 Phần t ình huống truy xuất đồng thờ i
STT Nội dung % Hoàn thành MSSV tham gia GV nhận xét
1Admin và Doanh Nghiệp cùng cậ p nhậtgiá khuyến mãi trên 1 sản phẩm tại 1
thời điểm.
10012410811241003
2 Hai khách hàng cùng mua 1 sản phẩm 100 1241017
Hệ Quản Trị Cơ SởDữ Liệu 4
và cậ p nhật số lượ ng sản phẩm còn lại.
3
Admin cậ p nhật tỉ lệ khuyến mãi khônghợ p lệ và bị hủy giao tác trong khi đókhách hàng nạ p thẻ có mệnh giá trùngvớ i mệnh giá admin cậ p nhật nên đãđọc dữ liệu rác của Admin.
100 1241017
4
Admin thực hiện cậ p nhật voucher (giáKM) nhưng không hợ p lệ và bị hủygiao tác - khách hàng thanh toán và đọc
dữ liệu rác do admin cậ p nhật và lưuvào đơn hàng.
100 1241003
5
Hai khách hàng cùng nạ p 1 thẻ nạ p tại
1 thời điểm => cả 2 đều nạp được vàthông tin khách hàng nạ p thẻ của kháchhàng đầu tiên bị mất
100 1241003
6
Khách hàng tìm kiếm 1 sản phẩm nằmtrong khoảng giá bất k ỳ, cùng lúcdoanh nghiệp thêm 1 sản phẩm mới cógiá nằm trong khoảng giá khách hàngtìm kiếm.
100 1241081
7
Khách hàng tìm kiếm sản phẩm theotên cùng lúc đó doanh nghiệp thêm 1voucher có tên chứa chuỗi tìm kiếm
của khách hàng.
100 1241081
8
Doanh nghiệp xem danh sách các hợ pđồng đã ký kết cùng lúc Admin thêmmớ i 1 hợp đồng ký kết vớ i doanh
nghiệp trên.
100 1241081
9
Doanh nghiệp xem danh sách hợp đồnghết thờ i hạn, cùng lúc đó Admin kíchhoạt lại 1 hợp đồng hết hạn của doanhnghiệp trên.
100 1241003
10
Khách hàng tìm kiếm sản phẩm nằm
trong khoảng giá bất kì cùng lúc đóadmin chỉnh sửa giá của 1 voucher nằm
trong khoảng giá mà khách hàng đangtìm.
100 1241017
11
Hai khách hàng cùng nạ p thẻ tại cùng 1thời điềm, nhưng chỉ có một kháchhàng có tiền trong tài khoản, kháchhàng còn lại thì thông báo nạp thànhcông nhưng lại không có tiền trong tàikhoản.
100 1241017
4 Phần chức năng hệ thống
STT Nội dung % Hoàn thành MSSV tham gia GV nhận xét 1 Đăng nhậ p 100 1241017
2 Đăng ký 100 1241017
3 Xem chi tiết voucher 100 1241017
Hệ Quản Trị Cơ SởDữ Liệu 5
4 Xem danh sách Deal hôm nay 100 1241017
5 Xem danh sách Deal gần đây 100 1241017
6 Tìm kiếm Voucher 100 1241017
7 Xem thông tin cá nhân
100 1241017
8 Nạ p thẻ 100 1241017
9 Đổi mật khẩu 100
1241017(KH)
1241003(AD)1241081(DN)
10 Đăng xuất 100
1241017(KH)
1241003(AD)1241081(DN)
11 Xem lịch sử nạ p thẻ 100 1241017
12 Xem giỏ hàng 100 1241017
13 Thanh toán 100 1241017
14 Xem lịch sử mua hàng 100 1241017
15 Quản lí Voucher (thêm, xóa, sửa) 1001241003(AD)1241081(DN)
16 Quản lí Hợp đồng (thêm, sửa) 1001241003(AD)
1241081(DN)
17Quản lí Thẻ nạp (thêm, cậ p nhật tỉ lệ khuyến mãi)
100 1241003(AD)
18 Quản lí Đơn hàng (cậ p nhật) 100 1241003(AD)
5 Phần nâng cao
STT Nội dung % Hoàn thành MSSV tham gia GV nhận xét 1
2
Hệ Quản Trị Cơ SởDữ Liệu 6
MỤC LỤC1 PHẠM VI HỆ THỐNG..................................................................................................................7
1.1 Giớ i thiệu .................................................................................................................................7
1.2 Phạm vi nghiệ p vụ ....................................................................................................................7
1.3 Qui định của hệ thố ng ...............................................................................................................7
2 MÔ TẢ CHỨC NĂNG HỆ THỐNG .............................................................................................9
2.1 Danh sách chức năng ...............................................................................................................9
2.2 Mô tả chi tiế t chức năng .........................................................................................................10
3 MÔ TẢ CƠ SỞ DỮ LIỆU............................................................................................................20
3.1 Lược đồ cơ sở d ữ liệu .............................................................................................................20
3.2 Mô tả cơ sở d ữ liệu .................................................................................................................20
3.3 Ràng buộc của cơ sở d ữ liệu ...................................................................................................35
4 MÔ TẢ TÌNH HUỐNG TRANH CHẤP ĐỒNG THỜ I..............................................................41
4.1 Mô tả thủ t ục của hệ thố ng ......................................................................................................46
4.2 Mô tả tình huố ng tranh chấp đồng thờ i ...................................................................................46
4.3 Mô tả giải pháp xử lí ..............................................................................................................65
5 Ứ NG DỤNG DEMO.....................................................................................................................77
5.1 Mô tả cấu trúc ứ ng d ụng ....................................................................................................... 103
5.2 Tình huố ng tranh chấp đồng thờ i .......................................................................................... 105
5.3 Bộ dữ liệu test các tình huống ............................................................................................... 118
6 TỔNG K ẾT ................................................................................................................................ 126
Hệ Quản Trị Cơ SởDữ Liệu 7
1 PHẠM VI HỆ THỐNG
1.1 Gi ớ i thi ệu
Mục tiêu của hệ thống MuaVoucher là mang lại những sản phẩm và dịch vụ tuyệt
vờ i, giảm giá lên đến 90% cho các thành viên của MuaVoucher và cho cộng đồng tại
Thành phố Hồ Chí Minh. MuaVoucher chỉ làm việc với các doanh nghiệ p lớn để
đảm bảo r ằng những sản phẩm và dịch vụ mà MuaVoucher cung cấp là rất tốt. Vì bạn,
MuaVoucher có thể cung cấ p những sản phẩm tuyệt vờ i với giá thật r ẻ.
1.2 Ph ạm vi nghi ệp v ụ
- Các khách hàng được đăng kí tài khoản miễn phí trên hệ thống của MuaVoucher.
Ngoài ra, còn đượ c cung cấ p các chức năng gần gũi dể sử dụng để có thể tự do lựa
chọn các voucher yêu thích
- Hộ tr ợ thanh toán trả trướ c qua hệ thống nạ p thẻ Voucher giúp khách hàng năng động
hơn trong việc thanh toán.
- Để đảm bảo chất lượ ng sản phẩm , MuaVoucher chỉ sẽ kí hợp đồng vớ i doanh nghiệ p
lớn và quản lý doanh nghiệ p chặt chẽ , đồng thờ i cung cấ p cho doanh nghiệ p chức
năng quản lý những Voucher sản phẩm của chính mình cung cấp để linh hoạt hơn
trong khâu quản lý
1.3 Qui đị nh c ủa h ệ th ố ng
- Khách hàng và doanh nghiệ p phải đăng nhậ p vào hệ thống mới có thể sử dụng các
chức năng nằm trong phạm vi của mình
- Các thông tin cá nhân của khách hàng và doanh nghiệ p phải đúng sự thật , nếu không
mọi mất mát về phía khách hàng MuaVoucher sẽ không chịu trách nhiệm
- Để thanh toán trả trướ c , số dư trong tài khoản khách hàng phải lớn hơn tổng số tiền
thanh toán trong giỏ hàng
- Khi muốn hủy khách hàng phải gọi tr ực tiếp lên MuaVoucher để thông báo hủy
- Khách hàng nên kiểm tra giỏ hàng kĩ lưỡng trước khi thanh toán , mọi thiếu sót đơn
hàng do sơ suất phía khách hàng MuaVoucher sẽ không giải quyết
- Doanh nghiệ p khi muốn đăng quảng cáo sản phẩm thì phải lên trực tiếp công ty
MuaVoucher để ký hợp đồng và đăng kí thông tin doanh nghiệ p
Hệ Quản Trị Cơ SởDữ Liệu 8
- Sau khi hợp đồng được xét duyệt ,mỗi doanh nghiệ p sẽ có 1 tài khoản duy nhất do
MuaVoucher cung cấ p
- Mọi thông tin sản phẩm được đăng phải đượ c qua kiểm định sự thật, nếu có sai sót gì
về phía doanh nghiệp thì mọi đền bù phía doanh nghiệ p sẽ phải chịu trách nhiệm theo
như hợp đồng đã nêu.
Hệ Quản Trị Cơ SởDữ Liệu 9
2 MÔ TẢ CHỨC NĂNG HỆ THỐNG
2.1 Danh sách chức năng :
uc Primary Use Cases
Người dùng
Khách Hàng
Admin
Doanh Nghiệp
Đăng nhập
Thay đổi thông tin cánhân
Quản lý Voucher
Quản lý thẻ nạp
Quản lý đơn hàng
Đăng ký
Nạp thẻ
Thay đổi mật khẩu
Xem lịch sử nạp thẻ
Thanh toán
Xem lịch sử muahàng
Mua Voucher
Xem thông tinVoucher
Hệ Quản Trị Cơ SởDữ Liệu 10
2.2
Mô tả chi ti ế t ch ức năng
Chức năng Đăng Ký:
o Mục tiêu: khách hàng nếu muốn mua voucher trên MuaVoucher phải đăng
ký trở thành thành viên của MuaVoucher.
o Người dùng: Khách hàng (ngày sinh của của khách hàng không đượ c
trướ c 01/01/1900 và sau ngày hiện tại)
o Đầu vào:
Tên đăng nhậ p: mỗi khách hàng có một tên riêng khi đăng nhập vào
hệ thống.
Password (mật khẩu): có độ dài từ 6 ký tự tr ở lên có phân biệt chữ
hoa, chữ thường, các ký tự đặc biệt để tăng tính bảo mật.
Nhậ p lại Password: xác định xem khách hàng đã thật sự nhập đúng
password đã đặt trước đó chưa. Tránh tình trạng khách hàng sau khi
đăng ký xong lại quên password.
Họ và tên: khách hàng nên nhập đúng tên trong CMND .
Ngày sinh: hệ thống sẽ kiểm tra ngày sinh của khách hàng,ngày sinh
của của khách hàng không được trướ c 01/01/1900 và sau ngày hiện
tại
Giới tính
Chứng minh nhân dân (CMND)
Điện thoại: khách hàng nên nhập chính xác số điện thoại của mình
nếu bạn có ý muốn mua hàng trên MuaVoucher, trong trườ ng hợ p hệ
thống không gửi mail xác thật đơn hàng đượ c.
Email: khách hàng nhập đúng địa chỉ email của mình để hệ thống có
thể gửi mail xác nhận đơn hàng cũng như cậ p nhập các Voucher mớ i
cho khách hàng khi trở thành thành viên.
o Đầu ra: Hiển thị thông báo Đăng Ký thành công cho phép người dùng
đăng nhập vào hệ thống.
Hệ Quản Trị Cơ SởDữ Liệu 11
o Các bướ c thực thi:
Bướ c 1: Người dùng vào trang chủ của MuaVoucher
Bướ c 2: Người dùng chọn chức năng Đăng Ký (nếu người dùng
chưa có tài khoản trong mua voucher)
Bướ c 3: Trang dangky.aspx hiện ra, tại đây người dùng sẽ nhập các
thông tin mà MuaVoucher đề ra cho bạn. Ngườ i dùng đọc những nội
quy khi tham gia vào MuaVoucher nếu bạn chấ p nhận thìđánh dấu
vào ô vuông trướ c nội quy và tiế p tục , nếu không chấ p nhận ngườ i
dùng có thể tr ở về trang chủ đề xem các sản phẩm.
Bước 4: Sau khi điền đầy đủ các thông tin và chấ p nhận nội quy của
MuaVoucher, người dùng nhấp vào nút Đăng Ký và chờ hệ thống
xác nhận.
Bước 5: Khi người dùng nhận được câu: “Bạn đã đăng ký thành
công. Chào mừng tendangnhap đến với MuaVoucher!!!”, ngườ i
dùng đã có tài khoản trong MuaVoucher. Người dùng có thể xem
sản phẩm và mua voucher trên MuaVoucher và được hưở ng quyền
lợi khi là thành viên của MuaVoucher.
Bướ c 6: K ết thúc chức năng Đăng Ký.
Chức năng Đăng Nhập:
o Mục tiêu: Khi đăng nhập người dùng có thể mua các Voucher có trên
MuaVoucher và các quyền lợ i khi mua.
o Người dùng: Khách hàng (sau khi đăng ký thành công và có tài khoản trên
MuaVoucher), Admin, Doanh Nghiệ p.
o Đầu vào:
Tên đăng nhậ p
Password (Mật khẩu)
(Mỗi người dùng đều có một tên đăng nhậ p và mật khẩu riêng đượ c sử sụng trong
MuaVoucher)
Hệ Quản Trị Cơ SởDữ Liệu 12
o Đầu ra: Đăng nhập thành công quay về trang chủ.
o Các bướ c thực thi:
Bước 1: Người dùng vào trang chủ của MuaVoucher.
Bướ c 2: Ngườ i dùnglựa chọn chức năng Đăng Nhậ p (nếu ngườ i
dùng đã có tài khoản trong MuaVoucher), Đăng Ký (nếu người dùng
chưa có tài khoản trong mua voucher). Ở đây, bạn sẽ chọn là Đăng
Nhậ p.
Bướ c 3: Trang dangnhap.axps hiện ra, tại đây người dùng nhập tên
người dùng, mật khẩu.
Bước 4: Người dùng chọn nút Đăng Nhậ p, hệ thống sẽ kiểm tra tên
đăng nhập và mật khẩu của bạn. Nếu đúng trang chủ của
MuaVoucher và bên góc phải màn sẽ hiện câu: "Xin chào
tendangnhap !!!". Nếu sai hệ thống sẽ thông báo lỗi ngay tại chỗ bạn
nhập sai, Bướ c 3 sẽ lặ p lại cho bạn nhậ p lại thông tin.
Bướ c 5: K ết thúc chức năng Đăng Nhậ p.
Chứ c năng Thay Đổi Mật Khẩu:
o Mục tiêu: Người dùng sửa mật khẩu trên hệ thống.
o Người dùng: Khách hàng, Admin, Doanh Nghiệ p.
o Đầu vào: Người dùng đăng nhập vào hệ thống, xem thông tin cá nhân và
chọn chức năng thay đổi mật khẩu.
o Đầu ra: Thông báo thay đổi mật khẩu thành công.
o Các bướ c thực thi:
Bướ c 1: Hiển thị thông tin người dùng.
Bước 2: Người dùng chọn chức năng thay đổi mật khẩu.
Hiện From thay đổi mật khẩu.
Người dùng nhậ p:
- Mật khẩu mớ i.
Hệ Quản Trị Cơ SởDữ Liệu 13
- Mật khẩu mớ i nhậ p lại.
Hệ thống kiểm tra mật khẩu thay đổi:
- Nếu mật khẩu mớ i nhậ p lại sai thì hiện thông báo lỗi:
Mật khẩu mớ i nhậ p lại không chính xác.
Xóa mật khẩu mới và mật khẩu mớ i nhậ p lại. Quay về Bướ c 2.
Nếu các thông tin đều nhập đúng tiế p tục Bướ c 3.
Bướ c 3: Hệ thống cậ p nhật mật khẩu đã thay đổi và hiển thị thông
báo thay đổi mật khẩu thành công cho người dùng.
Bướ c 4: Quay tr ở về Bướ c 1.
Chức năng Thay Đổi Thông Tin Cá nhân:
o Mục tiêu: Người dùng sửa thông tin cá nhân trên hệ thống.
o Người dùng: Khách hàng.
o Đầu vào: khách hàng đăng nhập vào hệ thống, xem thông tin cá nhân.
o Đầu ra: Thông báo thay đổi thông tin cá nhân thành công.
o Các bướ c thực thi:
Bướ c 1: Hiển thị thông tin khách hàng.
Bướ c 2: Khách hàng thay đổi các thông tin như:
Họ và tên.
Ngày sinh.
Giới tính.
Địa chỉ.
Số điện thoại.
Email.
Hệ thống kiểm tra thông tin thay đổi có hợ p lệ:
- Nếu các thông tin thay đổi không đúng định dạng thì
hiện thông báo lỗi.
- Quay về bướ c 1.
Hệ Quản Trị Cơ SởDữ Liệu 14
Nếu các thông tin đều nhập đúng tiế p tục Bướ c 3.
Bướ c 3: Hệ thống cậ p nhật thông tin khách hàng đã thay đổi và hiện
thị thông báo thay đổi thông tin thành công cho người dùng.
Bướ c 4: Quay tr ở về Bướ c 1.
Chức năng mua Voucher:
o Mục tiêu: giúp cho khách hàng đặt mua Voucher nếu tìm đượ c Voucher
ưng ý.
o Người dùng: Khách hàng
o Đầu vào: Yêu cầu k hách hàng phải đăng nhập thanh công vào hệ thống và
chọn chức năng Đặt Mua.
o Đầu ra: Voucher đượ c bỏ vào Giỏ hàng của k hách hàng.
o Các bướ c thực thi:
Bướ c 1: Hiện danh sách Voucher.
Bướ c 2: Chọn Voucher ưng ý.
Bướ c 3: Nhậ p số lượ ng Voucher cần mua.
Bướ c 4: Hệ thống kiểm tra số lượ ng của Voucher đó.
Trườ ng hợ p nếu số lượ ng voucher nhiều hơn số lượ ng voucher
có trong hệ thống:
- Thông báo lỗi.
- Quay lại Bướ c 3.
Trườ ng hợ p nếu số lượng voucher ít hơn số lượng voucher có
trong hệ thống, tiế p tục Bướ c 5.
Bước 5: Voucher đặt mua đượ c thêm vào Giỏ Hàng của k hách hàng.
Chức năng Thanh toán:
o Mục tiêu: Khách hàng thanh toán Voucher trên hệ thống.
o Người dùng: Khách hàng.
Hệ Quản Trị Cơ SởDữ Liệu 15
o Đầu vào: Khách hàng đăng nhập vào hệ thống, vào xem Giỏ Hàng và chọn
chức năng thanh toán.
o Đầu ra: Thanh toán thành công.
o Các bướ c thực thi:
Bướ c 1: Hiển thị danh sách các Voucher có trong Giỏ Hàng.
Bướ c 2: Kiểm tra Giỏ Hàng
Trườ ng hợp khách hàng chưa có Voucher trong Giỏ hàng mà
chọn chức năng Thanh toán thì:
- Thông báo lỗi.
- Quay về Bướ c 1.
Trườ ng hợp khách hàng muốn thay đổi Voucher trướ c khi
thanh toán như thay đổi số lượ ng hoặc xóa Voucher đó ra khỏi
giỏhàng.Giỏ hàng đượ c hệ thống cậ p nhật lại.Tiế p tục Bướ c 3.
Trườ ng hợp khách hàng thanh toán hết Voucher trong giỏ
hàng thì chọn nút thanh toán và tiế p tục Bướ c 3.
Bước 3: Thanh toán ( có hai hình thức thanh toán : trả trước và trả
sau)
Hiện thị textbox Nhập vào địa chỉ giao hàng.
Nếu khách hàng chọn hình thức là: Trả trướ c
- Hệ thống kiểm tra số dư trong tài khoản của khách hàng:
Nếu tổng số tiền khi khách hàng thanh toán nhỏ
hơn số dư tài khoản của khách hàng. Nếu thỏa thì
việc mua sản phẩm đượ c chấ p nhận, đồng thờ i hệ
thống sẽ tr ừ số tiền trong thẻ Voucher của thành
viên bằng số tiền mua sản phẩm.Tiế p tục Bướ c 4.
Nếu tổng số tiền khi khách hàng mua sản phẩm
lớn hơn số dư tài khoản của khách hàng:
a. Thông báo lỗi.
Hệ Quản Trị Cơ SởDữ Liệu 16
b. Quay về Bướ c 1.
Nếu khách hàng chọn hình thức là: Trả sau
- Tiế p tục Bướ c 4.
Bướ c 4: Hiện thị thông báo Thanh toán thành công.
Bướ c 5: Quản tr ị viên sẽ gửi mail đến khách hàng mã số hóa đơn
giao hàng và thờ i gian giao phiếu.
Chức năng Xem Lịch Sử Mua Hàng:
o Mục tiêu : Người dùng xem lại lịch sử mua hàng trước đó.
o Người dùng: Khách hàng.
o Đầu vào: Khách hàng phải đăng nhập vào hệt thống và chọn chức năng
Xem lịch sử mua hàng.
o Đầu ra: Xem lịch sử mua hàng thành công.
o Các bướ c thực thi:
Bướ c 1:Chọn chức năng xem lịch sử mua hàng
Bướ c 2 Hiển thị màn hình xem lịch sử mua hàng.
Bướ c 3: Người dùng chọn xem chi tiết của một đơn hàng.
Bướ c 4: Quay về Bướ c 1 nếu khách hàng muốn xem tiếp đơn hàng
hoặc không thì kết thúc xem lịch sử mua hàng.
Chức năng Xem Thông tin Voucher:
o Mục tiêu: Khách hàng có thể xem chi tiết của Voucher như giá gốc, giá
khuyến mãi, thông tin về Voucher đó……
o Người dùng: Khách hàng.
o Đầu vào: Khách hàng đã đăng nhậ p hệ thống và khách hàng chưacó tài
khoản trong hệ thống, chọn xem chi tiết Voucher.
o Đầu ra: Hiển thị màn hình chi tiết Voucher.
o Các bướ c thực thi:
Hệ Quản Trị Cơ SởDữ Liệu 17
Bướ c 1: Hiện danh sách các Voucher
Bướ c 2 : Nhấn nút xem chi tiết Voucher cần xem
Bướ c 3: Hiền thị màn hình xem thông tin chi tiết Voucher.
Bướ c 4: Khách hàng xem thông tin Voucher.
Chức năng Nạp thẻ:
o Mục tiêu: Người dùng nạ p thẻ vào tài khoản.
o Người dùng: Khách Hàng.
o Đầu vào: Khách hàng đã đăng nhập vào hệ thống và chọn chức năng nạ p
thẻ.
o Đầu ra: Nạ p thẻ thành công.
o Các bướ c thực thi:
Bướ c 1: Chọn chức năng nạ p thẻ
Bướ c 2: Hiển thị màn hình nạ p thẻ.
Bướ c 3: Người dùng nhập vào: số Series và Code thẻ.
Bướ c 4: Hệ thống kiểm tra thẻ nạ p:
Trườ ng hợ p số Series và Code không hợ p lệ:
- Thông báo lỗi.
- Xóa số Series và Code thẻ đã nhậ p.
- Quay về Bướ c 1.
Trườ ng hợ p số Series và Code hợ p lệ. Tiế p tục Bướ c 5.
Bướ c 5: Thông báo nạ p thẻ thành công và hệ thống cậ p nhậ p lại số
dư tài khoản của khách hàng.
Chức năng Xem Lịch Sử Nạp thẻ:
o Mục tiêu: Khách hàng xem số dư tài khoản.
o Người dùng: Khách hàng.
Hệ Quản Trị Cơ SởDữ Liệu 18
o Đầu vào: Khách hàng đã đăng nhập vào hệ thống và chọn chức năng Xem
lịch sử thẻ nạ p.
o Đầu ra: Xem lịch sử thẻ nạp thành công.
o Các bướ c thực thi:
Bướ c 1: Chọn chức năng xem lịch sử thẻ nạ p
Bướ c 2: Hiển thị màn hình xem lịch sử nạ p thẻ.
Bướ c 3: Khách hàng xem số dư tài khoản, ngày nạ p thẻ gần đây và
thông tin các thẻ đã nạ p
Bướ c 4: K ết thúc xem lịch sử nạ p thẻ và quay về trang chủ.
Chức năng Quản Lý Voucher:
o Mục tiêu: Admin và Doanh Nghiệ pxem danh sách Voucher.
o Người dùng: Admin và Doanh Nghiệ p
o Đầu vào:Adminvà Doanh Nghiệ pđăng nhập thành công vào hệ thống và chọn
chức năng quản lí Voucher.
o Đầu ra: Xem danh sách Voucher thành công.
o Các bướ c thực hiện:
Bướ c 1: Chọn chức năng quản lý Voucher
Bướ c 2: Hiển thị danh sách Voucher.
Bướ c 3: Admin hoặc Doanh Nghiệp xem Voucher đượ c quyền cậ p
nhậttên Voucher, thông tin chi tiết, ngày bắt đầu, ngày kết thúc, giá gốc,
gái khuyến mãi, số lượng, hình ảnh của Voucher.
Bước 4 : Sao lưu nếu các cậ p nhật hợ p lệ .Nếu không hợ p lệ quay lại
bướ c 3
Bướ c 5: K ết thúcvà quay về Bướ c 1.
Chức năng Quản Lý Thẻ Nạp:
o Mục tiêu: Admin xem danh sách thẻ nạ p.
o Người dùng: Admin.
Hệ Quản Trị Cơ SởDữ Liệu 19
o Đầu vào:Adminđăng nhập thành công vào hệ thống và chọn chức năng quản lí
Thẻ nạ p.
o Đầu ra: Xem danh sách thẻ nạ p thành công.
o Các bướ c thực hiện:
Bướ c 1: Chọn chức năng quản lý thẻ nạ p
Bướ c 2: Hiển thị danh sách thẻ nạ p.
Bướ c 3: Admin xem thẻ nạ p và thêm thẻnạ phoặc sửa đổi tý lệ khuyến
mãi.
Bước 4 :Sao lưu nếu các thông tin hợ p lệ .Nếu không hợ p lệ quay lại
bướ c 3
Bướ c 5: K ết thúcvà quay về Bướ c 1.
Chức năng Quản Lý Đơ n Hàng:
o Mục tiêu: Admin xem danh sách đơ n hàng.
o Người dùng: Admin.
o Đầu vào:Admin đăng nhập thành công vào hệ thống và chọn chức năng quản lí
đơ n hàng.
o Đầu ra: Xem danh sách đơ n hàng thành công.
o Các bướ c thực hiện:
Bướ c 1: Chọn chức năng quản lý đơn hàng
Bướ c 2: Hiển thị danh sách đơ n hàng.
Bướ c 3: Admin xem đơn hàng và cậ p nhật lại trang thái đơn hàng
Bước 4:Sao lưu nếu các thông tin hợ p lệ .Nếu không hợ p lệ quay lại bướ c
3
Bướ c 5: K ết thúc và quay về Bướ c 1.
Hệ Quản Trị Cơ SởDữ Liệu 20
3 MÔ TẢ CƠ SỞ DỮ LIỆU
3.1 Lược đồ cơ sở d ữ l i ệu
Mô hình quan hệ:
Loại hình dịch vụ Voucherthuộc
Doanh nghiệp
cung cấp
Người dùng
Khách hàngHợp đồng có
Thẻ nạp
nạp
Chi tiết
đơn hàng
Đơn hàng
Loại hình thanh
toán
thuộc thuộc
thuộc(1,1)
(1,n)(1,1)
(1,1)
(1,1)
(1,n)
(1,1)
(1,1)(1,1)
(0, n)
(1,1)
(0, n)
(0, n)
(1, n)
thanh toán
(0, n)
(1,1)Mã loại hình
Tên loại hình
Trạng thái
Mã hợp đồng
Ngày ký
Thời hạn
Trạng thái
Ngày thành lập
Mã thẻ
Series
Code thẻ
Mệnh giá
Ngày nạp
CMND
Ngày sinh
Giới tính
Ngày
Tháng
Năm
Mã loại hình thanhtoán
Tên loại hình thanhtoán
Số lượng
Mã ĐH Địa chỉ giao hàngTổng tiền
Ngày giao
Tình trạng
Mã ND
Tên đăng nhập
Mật khẩu
Họ và tên
Địa chỉ
Đường QuậnThành phố
Số điện thoại
Trạng thái
Mã voucherTên voucher
Ngày bắt đầu
Ngày kết thúcGiá khuyến mãi
Số lượng
Giá gốc
Thông tin chi tiết
Trạng thái
Admin
Thành tiền
Trạng thái
Tài khoản thẻ nạp
Mã tài khoản
Có
(1,1)
Số dư tài khoản
Trạng thái
(0,n)
Ngày đặt hàng
Trạng thái
Tỉ lệ khuyến mãi
(1, n)
Url hình
Mô tả
Hệ Quản Trị Cơ SởDữ Liệu 21
Lƣợc đồ cơ sở dữ liệu:
3.2 Mô tả cơ sở d ữ l i ệu:
a. Các mối quan hệ trong lƣợc đồ ER:
1. Loại hình dịch vụ - Voucher:
Loại hình dịch vụ Voucherthuộc(1,1)(0, n)
- Vớ i mỗi loại hình dịch vụ có thể có nhiều hoặc không có Voucher nào thuộc loại đó.
- Mỗi Voucher chỉ thuộc duy nhất một loại hình dịch vụ .
Hệ Quản Trị Cơ SởDữ Liệu 22
2. Voucher – Doanh nghiệ p:
Voucher Doanh nghiệpcung cấp(1,1) (0, n)
- Doanh nghiệp có thể cung cấ p nhiều Voucher hoặc không cung cấp Voucher nào.
- Một Voucher chỉ thuộc duy nhất một doanh nghiệ p.
3. Doanh nghiệ p - Hợp đồng:
Doanh nghiệpHợp đồng có(1,n)(1,1)
- Mỗi doanh nghiệ p có một hoặc nhiều hợp đồng vớ i mua vocher.
- Một hợp đồng của duy nhất một doanh nghiệ p.
4. Khách hàng – Tài khoản:
Khách hàng Tài khoản thẻ nạpcó(1,n) (1, 1)
- Khách hàng có thể có một hoặc nhiều tài khoản thanh toán.
- Một tài khoản là của duy nhất một khách hàng.
5. Tài khoản - Thẻ nạ p:
Tài khoản thẻ nạp Thẻ nạpnạp(0,n) (1, 1)
- Một thẻ nạp đượ c duy nhất một toàn khoản dùng.
- Có thể có nhiều hoặc không có tài khoản nào nạ p thẻ.
6. Voucher – Chi tiết đơn hàng:
VoucherChi tiết
đơn hàngthuộc
(0,n) (1, 1)
- Một chi tiết đơn hàng diễn tả một cho một mã Voucher.
- Có không hoặc nhiều mãVoucher thuộc chi tiết đơn hàng.
Hệ Quản Trị Cơ SởDữ Liệu 23
7. Chi tiết đơn hàng – Đơn hàng:
Chi tiết
đơn hàng
Đơn hàngthuộc
(1,1) (1, n)
- Một chi tiết đơn hàng thuộc một đơn hàng.
- Đơn hàng có một hoặc nhiều chi tiết đơn hàng.
8. Đơn hàng - Loại hình thanh toán:
Đơn hàngLoại hình thanh
toánthuộc
(1,n)(1, 1)
- Một đơn hàng thuộc duy nhất một loại hình thanh toán.
- Một loại hình thanh toán có một hoặc nhiều đơn hàng.
9. Đơn hàng – Khách hàng:
Khách hàng Đơn hàngthanh toán(1,1)(0,n)
- Một đơn hàng do một khách hàng thanh toán.
- Khách hàng có thể thanh toán nhiều đơn hàng hoặc không thanh toán đơn hàng nào.
Lƣợc đồ cơ sở dữ liệu:
o Bảng LoaiHinhDichVu:cung cấp các loại hình dịch vụ mà MuaVoucher
hiện đang có (v í d ụ: Du lịch, Nhà hàng – Ăn uống, Công nghệ, Vật dụng gia
đình,….)
Loại hình dịch vụ
Mã loại hình
Tên loại hình
Trạng thái
LoaiHinhDichVu (MaLoaiHinh, TenLoaiHinh, TrangThai)
Hệ Quản Trị Cơ SởDữ Liệu 24
STT Tên thuộc tính Kiểu dữ liệu
Key Mô tả
1 MaLoaiHinh Int Primary Mỗi một loại hình dịch vụ đều khácnhau tượng trưng cho một loại dịch vụ
mà các Voucher thuộc về
2 TenLoaiHinh nvarchar(50) Unique Tên loại hình định nghĩa cho từng loại
hình dịch vụ có trong MuaVoucher 3 TrangThai Int Các loại hình dịch vụ có thể bị thay đổi
trong MuaVoucher, vì vậy tr ạng thái biểu diễn cho loại hình màMuaVoucher đang có vớ i 2 số nguyên.0: ngừng hoạt động, 1: đang hoạtđộng.
o Bảng LoaiHinhThanhToan:MuaVoucher sẽ đưa ra các hình thức thanh toán
nhằm đáp ứng nhu cầu mua hàng của khách hàng, ví dụ: tr ả sau ( thanh toán ngay khi
giao voucher ) hoặc tr ả trướ c ( nạ p thẻ voucher sau đó hệ thống sẽ tr ừ tr ực tiếp vào tài
khoản)
Loại hình thanh
toán
(1,n) Mã loại hình thanh
toán
Tên loại hình thanh
toán
Trạng thái
LoaiHinhThanhToan (MaLoaiHinhThanhToan,TenLoaiHinhThanhToan,TrangThai)
Hệ Quản Trị Cơ SởDữ Liệu 25
STT Tên thuộc tính Kiểu dữ liệu Key Mô tả 1 MaLoaiHinhThanhToan Int Primary Mỗi một loại hình thanh toán
đều khác nhau tượng trưngcho hình thức để khách hàngthanh toán trên MuaVoucher
2 TenLoaiHinhThanhToan nvarchar(50) Tên loại hình thanh toán định
nghĩa cho từng loại hìnhthanhtoáncó trongMuaVoucher
3 TrangThai Int Tr ạng thái biểu diễn cho loại
hình thanh toán màMuaVoucher đang có vớ i 2số nguyên. 0: ngừng hoạt
động, 1: đang hoạtđộng.
o Bảng Voucher:Doanh nghiệp có thể thêm, xóa, sửa các sản phẩm có Voucher do
doanh nghiệp đó cung cấp tùy theo nhu cầu của khách hàng.
Voucher(1,1)
(1,1)
(0, n)
Mã voucher Tên voucher
Ngày bắt đầu
Ngày kết thúcGiá khuyến mãi
Số lượng
Giá gốc
Thông tin chi tiết
Trạng thái
Url hình
Voucher (MaVoucher,TenVoucher,ThongTinChiTiet, NgayBatDau, NgayKetThuc,
GiaGoc, GiaKhuyenMai, SoLuong,UrlHinh,TrangThai, MaLoaiHinhDV, MaTaiKhoanQL)
Hệ Quản Trị Cơ SởDữ Liệu 26
STT Tên thuộc tính Kiểu dữ liệu Key Mô tả 1 MaVoucher Int Primary Mỗi một mã voucher
đều khác nhau đi ớ itừng sản phẩm cóVoucher
2 TenVoucher nvarchar(50) Mỗi mã Vouher đều cótên Voucher tương ứng
3 ThongTinChiTiet nvarchar(1000) Để khách hàng có cáinhìn tổng thể doanhnghiệ p cần mô tả cácthông tin có liên quanđến Voucher như ngày
bắt đầu và ngày kếtthúc rao bán voucher,số lượ ng tối đa của
Voucher trên sản phẩmđó, doanh nghiệ p cần
đưa rõ giá gốc và giákhuyến mãi khi kháchhàng mua voucher kèmvới các thông tin chitiết của voucher.
4 NgayBatDau datetime
5 NgayKetThuc datetime
6 GiaGoc decimal(18,0)
7 GiaKhuyenMai decimal(18,0)
8 SoLuong int
9 TrangThaiInt
Tr ạng thái biểu diễn
sản ph ẩm mà doanhnghiệp đăng trênMuaVoucher vớ i 2 số
nguyên. 0: ngừng hoạtđộng, 1: đang hoạt
Hệ Quản Trị Cơ SởDữ Liệu 27
động.
10 MaLoaiHinhDV Int Foreignthamchiếu đến bảng
LoaiHinhDichVu.
Một mã voucher ứngvớ i một loại hình dịch
vụ mà doanh nghiệ pcung cấ p.
11 MaDoanhNghiep Int Foreigntham
chiếu đến bảng NguoiDung.
Mỗi một Voucher đượ cquản lý bở i một doanhnghiệ p
12 UrlHinh nvachar(500) Ứ ng vớ i mỗi Voucher
sẽ có hình ảnh cụ thể
quảng cáo cho voucher đó
o Bảng HopDong:Trướ c k hi đăng các Voucher trên trang MuaVoucher doanh nghiệ p
phải ký vớ i MuaVoucher hợp đồng để hợp tác và quảng cáo sản phẩm của doanh
nghiệ p
Hợp đồng
Mã hợp đồng
Ngày ký
Thời hạn
Trạng tháiMô tả
(1,1)
HopDong (MaHopDong, NgayKy, ThoiHan, MoTa, TrangThai, MaDoanhNghiep)
STT Tên thuộc tính Kiểu dữ liệu Key Mô tả 1 MaHopDong Int Primary Mỗi một mã hợp đồng
là riêng biệt đối với cácdoanh nghiệ p hợp tácvớ i MuaVoucher
Hệ Quản Trị Cơ SởDữ Liệu 28
2 NgayKy datetime Một hợp đồng cần cóngày kí kết hợp đồng
cùng vớ i thờ i gian hết
hợp đồng kèm theo đónhững điều lệ khi 2 bênthỏa thuận vớ i nhau
3 ThoiHan datetime
4 MoTa nvarchar(1000)
5 TrangThai Int Tr ạng thái biểu diễn
doanh nghiệp có cònhay không còn hợp tácvớ i MuaVoucher, vớ i 2số nguyên. 0: ngừng
hoạt động, 1: đang hoạt
động.
6 MaDoanhNghiep Int Foreignthamchiếu đến
bảng
NguoiDung.
Chỉ ra hợp đồng thuộcdoanh nghiệ p
o Bảng TheNap:Đối với hình thức thanh toán trực tiế p MuaVoucher cung cấ p cho
thành viên thẻ mua Voucher với các mệnh giá khác nhau.
Thẻ nạp
(1,1) Mã thẻ
Series
Code thẻ
Mệnh giá
Ngày nạp
Trạng thái Tỉ lệ khuyến mãi
TheNap (MaTheNap, Series, Code, MenhGia, NgayNap, TiLeKhuyenMai,TrangThai,
MaTaiKhoan)
Hệ Quản Trị Cơ SởDữ Liệu 29
STT Tên thuộc tính Kiểu dữ liệu Key Mô tả 1 MaTheNap Int Primary Mỗi thẻ nạp là duy
nhất và chỉ sử dụng
đượ c một lần
2 Series varchar(50) Unique Mỗi thẻ nạp có số
series là duy nhất
3 Code varchar(50) Unique Mỗi thẻ nạp có codelà duy nhất
4 MenhGia decimal(18,0) Tùy theo thẻ nạ p doMuaVoucher bán cómệnh giá khác nhau,và tỉ lệ khuyến mãi vàngày nạ p thẻ.
5 NgayNap datetime
6 TiLeKhuyenMai Int
7 TrangThai Int Tr ạng thái cho biếtthẻ nạ p đã đượ c nạ phay chưa nạ p, vớ i 2số nguyên. 0: chưanạp, 1: đã đượ c nạ p
8 MaTaiKhoan Int Foreignthamchiếu đến bảng
TaiKhoanTheNap.
Mỗi thẻ nạp là củamột tài khoản.
o Bảng TaiKhoanTheNap:Sau khi nạ p thẻ khách hàng có thể xem số dư tài khoản
của mình qua bảng TaiKhoanTheNap
Tài khoản thẻ nạp
Mã tài khoản
(1,1)
Số dư tài khoản
Trạng thái
(0,n)
Hệ Quản Trị Cơ SởDữ Liệu 30
TaiKhoanTheNap (MaTaiKhoan, SoDuTaiKhoan, TrangThai, MaKhachHang)
STT Tên thuộc tính Kiểu dữ liệu Key Mô tả 1 MaTaiKhoan int Primary Mỗi mã tài khoản là duy
nhất.
2 SoDuTaiKhoan decimal(18,0) Khách hàng có thể xem
số tiền còn lại trong tàikhoản thẻ của mình.
3 TrangThai int Tr ạng thái cho biết tàikhoàn thẻ nạp còn hayhết, vớ i 2 số nguyên. 0:đã hết tiền trong tàikhoản, 1: còn tiền trongtài khoản
4 MaKhachHang int Foreignthamchiếu đến
bảng
NguoiDung,Unique
Khách hàng có một mãtài khoản.
o Bảng DonHang:Khách hàng đượ c quyền xem lại đơn hàng của mình.
Đơn hàng
(1,1)
(1, n)
(1,1)
Mã ĐH Địa chỉ giao hàngTổng tiền
Ngày giao
Tình trạng
Ngày đặt hàng
Hệ Quản Trị Cơ SởDữ Liệu 31
DonHang (MaDonHang, DiaChiGiaoHang, NgayDatHang, NgayGiao, TongTien,
TrangThai, MaKhachHang, MaLoaiHinhThanhToan)
STT Tên thuộc tính Kiểu dữ liệu Key Mô tả 1 MaDonHang Int Primary Mỗi mã đơn
hàng là duy nhất,
phân biệt vớ itừng đơn hàng.
2 DiaChiGiaoHang nvarchar(500) Trong đơn hàngkhách hàng cóthể xem cácthông tin nhưngày đặt hàngngày giao hàng,địa chỉ giao hàngvà tổng tiền hàngmà khách hàngđã đặt mua.
3 NgayDatHang Datetime
4 NgayGiao Datetime
5 TongTien decimal(18,0)
6 TrangThai Int Tình trạng biểudiễn cho một
đơn hàng vớ i 4
số nguyên : 0_ chưa xác nhận
đơn hàng ,1_ đãđược xác nhậnđơn hàng ,2_đang giaohàng , 3_đã giao.
7 MaKhachHang Int Foreigntham chiếu
đến bảng NguoiDung.
Mỗi đơn hàng làcủa một kháchhàng
8 MaLoaiHinhThanhToan Int Foreigntham chiếu Mỗi đơn hàng có
Hệ Quản Trị Cơ SởDữ Liệu 32
đến bảngLoaiHinhThanhToan.
một hình thứcthanh toán riêng
o Bảng ChiTietDonHang:Khách hàng có thể xem voucher và số lượng Voucher đã
mua thông qua bảng ChiTietDonHang.
Chi tiết
đơn hàngthuộc thuộc
(1,1)(1,1)(0, n) (1, n)
Số lượng
Thành tiền
ChiTietDonHang (MaChiTietDonHang, MaDonHang, MaVoucher, SoLuong, ThanhTien)
STT Tên thuộc tính Kiểu dữ liệu Key Mô tả 1 MaChiTietDonHang int Primary Mỗi mã chi tiết đơn
hàng là duy nhất.
2 MaDonHang int Foreigntham
chiếu đến
bảngDonHang.
Cho biết chi tiết đơnhàng đó thuộc đơn hàngnào.
3 MaVoucher int Các voucher đã mua
4 SoLuong int Số lượng voucher cũngnhư thành tiền ứng vớ isố lượng voucher màkhách hàng mua
5 ThanhTien decimal(18,0)
Hệ Quản Trị Cơ SởDữ Liệu 33
6 TrangThai int Vớ i 2 số nguyên biểudiễn 0: ngưng hoạt
động, 1: đang hoạt
động.
o Với cây phân cấp ta chia thành 2 bảng:
Doanh nghiệp
Người dùng
Khách hàng(1,n)
(1,1)
(0, n) (0, n)
Ngày thành lậpCMND
Ngày sinh
Giới tính
Ngày
Tháng
Năm
Mã ND
Tên đăng nhập
Mât khẩu
Họ và tên
Địa chỉ
Đường QuậnThành phố
Số điện thoại
Trạng thái
Admin
(1, n)
- LoaiNguoiDung (MaLoaiNguoiDung, TenLoaiNguoiDung,TrangThai)
STT Tên thuộc tính Kiểu dữ liệu Key Mô tả 1 MaLoaiNguoiDung int Primary Mỗi một loại người dùng
là khách nhau. 2 TenLoaiNguoiDung nvarchar(200) Unique Tên người dùng là
Khách hàng, Admin,Doanh Nghiệ p.
3 TrangThai int Vớ i 2 số nguyên biểu
Hệ Quản Trị Cơ SởDữ Liệu 34
diễn 0: ngưng hoạt động,1: đang hoạt động.
- NguoiDung (MaNguoiDung , TenDangNhap, MatKhau, TenKhachHang, GioiTinh,
CMND, DiaChi, DienThoai, Email, MaTaiKhoan,TrangThai,LoaiNguoiDung)
STT Tên thuộc tính Kiểu dữ liệu Key Mô tả 1 MaNguoiDung int Primary Mỗi người dùng có
một mã người dùngduy nhất.
2 TenDangNhap varchar(50) Unique
Người dùng sau khiđăng ký vàoMuaVoucher cần cómột tên người dùng vàmật khẩu đăng nhậ phệ thống.Bên cạnh đócần cung cấp thêmthông tin về tên ngườ idùng, ngày sinh, giớ itính, chứng minh nhândân, địa chỉ, điện
thoại, email của
ngườu dùng.
3 MatKhau varchar(20)
4 TenNguoiDung nvarchar(50)
5 NgaySinh datetime
6 GioiTinh int
7 CMND varchar(50) Unique
8 DiaChi nvarchar(500)
9 DienThoai varchar(50)
10 Email varchar(50) Unique
Hệ Quản Trị Cơ SởDữ Liệu 35
11 MaLoaiNguoiDung int Foreign thamchiếu đến bảng
LoaiNguoiDung.
Loại người dùng miêutả là Admin,Kháchhàng hay Doanh
Nghiệp đượ c diễn bở i2 số nguyên: 0_làAdmin, 1 _Kháchhàng, 2_ Doanh
Nghiệ p.
12 TrangThai int Admin có thể kíchhoạt hoặc vô hiệu hóangười dùng: 0_vôhiệu hóa, 1_kích hoạt
3.3 Ràng buộc c ủa cơ sở d ữ li ệu
A. Rule:
i. Tạo Rule:
o Kiểm tra giá trị dương:
CREATERULE ur_GiaTriDuong
AS @GiaTri>=0
GO
o Ràng buộc thuộc tính Trạng thái:
CREATERULE ur_TrangThaiAS @TT IN(1,0)
GO
o Ràng buộc giới tính:
CREATERULE ur_GioiTinh
AS @TT IN(1,2,3)
GO
ii. Cài đặt Rule cho các bảng:
1. Thẻ Nạp:
o Mệnh giá trong Thẻ Nạ p phải >= 0
Hệ Quản Trị Cơ SởDữ Liệu 36
sp_bindRule'ur_GiaTriDuong','TheNap.MenhGia'
o Tỉ lệ khuyến mãi trong thẻ nạ p >= 0
sp_bindRule'ur_GiaTriDuong','TheNap.TiLeKhuyenMai'
o Tr ạng thái trong thẻ nạ p phải có giá trị 0 , 1( 1: hoạt động, 0: ngừng
hoạt động)
sp_bindRule'ur_TrangThai','TheNap.TrangThai'
2. Voucher:
o Giá gốc trong Voucher >= 0
sp_bindRule'ur_GiaTriDuong','Voucher.GiaGoc'
o Giá khuyến mãi trong Voucher >= 0
sp_bindRule'ur_GiaTriDuong','Voucher.GiaKhuyenMai'
o Số lượ ng Voucher phải >= 0
sp_bindRule'ur_GiaTriDuong','Voucher.SoLuong'
o Tr ạng thái trong Voucher phải có giá trị 0 , 1( 1: hoạt động, 0:
ngừng hoạt động)
sp_bindRule'ur_TrangThai','Voucher.TrangThai'
3. Tài K hoản Thẻ Nạp:
o Số dư trong tài khoản phải >= 0
sp_bindRule'ur_GiaTriDuong','TaiKhoanTheNap.SoDuTaiKhoan'
o Tr ạng thái trong Tài Khoản Thẻ Nạ p phải có giá trị 0 , 1( 1: hoạtđộng, 0: ngừng hoạt động)
sp_bindRule'ur_TrangThai','TaiKhoanTheNap.TrangThai'
4. Ngƣờ i Dùng:
o Tr ạng thái trong Ngườ i Dùng phải có giá trị 0 , 1( 1: hoạt động, 0:ngừng hoạt động)
Hệ Quản Trị Cơ SởDữ Liệu 37
sp_bindRule'ur_TrangThai','NguoiDung.TrangThai'
o Giới tính Người Dùng phải có giá trị 1,2,3( 1: nam, 2: nữ, 3: khác)
sp_bindRule'ur_GioiTinh','NguoiDung.GioiTinh'
5. Loại Hình Thanh Toán:
o Tr ạng thái trong Loại Hình Thanh Toán phải có giá trị 0 , 1( 1: hoạtđộng, 0: ngừng hoạt động)
sp_bindRule'ur_TrangThai','LoaiHinhThanhToan.TrangThai'
6. Loại Hình Dịch Vụ:
o Tr ạng thái trong Loại Hình Dịch Vụ phải có giá trị 0 , 1( 1: hoạtđộng, 0: ngừng hoạt động)
sp_bindRule'ur_TrangThai','LoaiHinhDichVu.TrangThai'
7. Hợp Đồng:
o Tr ạng thái trong Hợp Đồng phải có giá trị 0 , 1( 1: hoạt động, 0:ngừng hoạt động)
sp_bindRule'ur_TrangThai','HopDong.TrangThai'
8. Đơn Hàng:
o Tống tiền trong Đơn Hàng > = 0
sp_bindRule'ur_GiaTriDuong','DonHang.TongTien'
o Tr ạng thái trong Đơn Hàng phải có giá trị 0 , 1( 1: hoạt động, 0:ngừng hoạt động)
sp_bindRule'ur_TrangThai','DonHang.TrangThai'
9. Chi Tiết Đơn Hàng:
o Thành tiền trong chi tiết đơn hàng >= 0
sp_bindRule'ur_GiaTriDuong','ChiTietDonHang.ThanhTien'
o Số lượ ng Voucher trong Chi Tiết Đơn Hàng phải > = 0
Hệ Quản Trị Cơ SởDữ Liệu 38
sp_bindRule'ur_GiaTriDuong','ChiTietDonHang.SoLuong'
o Tr ạng thái trong Chi Tiết Đơn Hàng phải có giá trị 0 , 1( 1: hoạt
động,0: ngừng hoạt động)
sp_bindRule'ur_TrangThai','ChiTietDonHang.TrangThai'
10. Doanh Nghiệp:
o Tr ạng thái trong Doanh Nghiệ p phải có giá trị 0 , 1( 1: hoạt động,
0: ngừng hoạt động)
sp_bindRule'ur_TrangThai','DoanhNghiep.TrangThai'
B. Trigger:
1.Trong đơn hàng : ngày giao không đƣợc trƣớc ngày đặt và ngày đặt không đƣợc đặttrƣớc ngày hiện tại.
- Bối cảnh : DonHang
- Bảng tầm ảnh hưở ng:
Tên bảng Thêm Xóa Sử aDonHang + - +
(NgayGiao,NgayDatHang)
- Cài đặt:
Nếu trong dữ liệu vừa insert có tồn tại 1 đơn hàng mà ngày giao trước ngày đặt hoặc ngàygiao trước ngày hiện tại thì hiển thị lỗi và rollback lại giao tác
CREATE TRIGGER tr_DonHang_ins_updOn DonHang
Forinsert,update
As
Begin
declare @ngayhientai datetime
set @ngayhientai=GETDATE() If exists(select*from inserted I
WhereDatediff (DD, I. NgayGiao, I. NgayDatHang)> 0
or Datediff (DD, I. NgayGiao, @ngayhientai)> 0
or Datediff (DD, I. NgayDatHang, @ngayhientai)> 0)
Begin
Hệ Quản Trị Cơ SởDữ Liệu 39
Raiserror ('Ngay dat hang hoac ngay giao khong hop le',0,1)
Rollbacktransaction
EndEnd
Go
2. Trong hợp đồng : Thờ i hạn không đƣợc trƣớc ngày ký và thờ i hạn, ngày ký khôngđƣợc trƣớc ngày hiện tại
- Bối cảnh: HopDong
- Bảng tầm ảnh hưở ng:
Tên bảng Thêm Xóa Sử aHopDong + - +
(NgayKy,ThoiHan)
-Cài đặt: Nếu trong dữ liệu vừa insert có tồn tại 1 hợp đồng mà thờ i hạn trước ngày ký hoặc ngày kýtrước ngày hiện tại, hoặc thờ i hạn trước ngày hiện tại thì hiển thị lỗi và rollback lại giao tác
CREATE TRIGGER tr_HopDong_ins_updOn HopDong
Forinsert,update
AsBegin
declare @ngayhientai datetime
set @ngayhientai=GETDATE() If exists(select*from inserted I
WhereDatediff (DD, I.Thoihan, I. NgayKy)> 0
or Datediff (DD, I. NgayKy, @ngayhientai)> 0 or Datediff (DD, I.Thoihan, @ngayhientai)> 0
)
Begin
Raiserror ('Ngay ky hop dong hoac thoi han khong hop le',0,1)Rollbacktransaction
End
End Go
3. Trong Voucher :
+ ngày kết thúc không đƣợc trƣớc ngày bắt đầu và ngày bắt đầu không đƣợc trƣớ cngày hiện tại
+ giá khuyến mãi không đƣợ c lớn hơn giá gốc
Hệ Quản Trị Cơ SởDữ Liệu 40
- Bối cảnh: Voucher
- Bảng tầm ảnh hưở ng:
Tên bảng Thêm Xóa Sử aVoucher + - +
(NgayBatDau,NgayKetThuc,GiaGoc,GiaKhuyenMai)
Cài đặt:
- Nếu trong dữ liệu vừa insert có tồn tại 1 Voucher mà ngày kết thúc trước ngày bắt đầu,
hoặc ngày bắt đầu, ngày kết thúc trước ngày hiện tại thì hiển thị lỗi và rollback lại giao tác
- Nếu trong dữ liệu vừa insert có tồn tại 1 Voucher mà giá khuyến mãi lớn hon giá gốc thìhiển thị lỗi và rollback lại giao tác
CREATE TRIGGER tr_Voucher_ins_updOn Voucher
Forinsert,update
AsBegin
declare @ngayhientai datetime
set @ngayhientai=GETDATE()
If exists(select*from inserted IWhereDatediff (DD, I. NgayKetThuc, I. NgayBatDau)> 0
or Datediff (DD, I. NgayKetThuc, @ngayhientai)> 0
or Datediff (DD, I. NgayBatDau, @ngayhientai)> 0 ) Begin
Raiserror ('Ngay bat dau hoac ngay ket thuc khong hop le',0,1)
Rollbacktransaction
End
If Exists(Select*from inserted I
where I.GiaKhuyenMai > I.GiaGoc) BeginRaiserror ('Gia Khuyen Mai khong hop le',0,1)
Rollbacktransaction
End
End Go
4. Ngày sinh của của ngƣời dùng không đƣợc trƣớc 01/01/1990 và sau ngày hiện tại
- Bối cảnh: NguoiDung
- Bảng tầm ảnh hưở ng:
Tên bảng Thêm Xóa Sử a
Hệ Quản Trị Cơ SởDữ Liệu 41
NguoiDung + - +(NgaySinh)
-Cài đặt:
Nếu trong dữ liệu vừa insert có tồn tại 1 ngườ i dùng mà năm sinh sau năm hiện tại hoặc
trước năm 1900 thì hiển thị lỗi và rollback lại giao tác
CREATE TRIGGER tr_NguoiDung_ins_upd
On NguoiDung
Forinsert,update
AsBegin
declare @ngayhientai datetime
set @ngayhientai=GETDATE() If exists(select*from inserted I
WhereDatediff (yy, I. NgaySinh, @ngayhientai)< 1
Or Datediff (yy, I. NgaySinh,'1900-1-1')> 0
)Begin
Raiserror ('Ngay sinh khong hop le',0,1)
Rollbacktransaction End
End
Go
5.Chi tiết đơn hàng – Voucher: Khách hàng không đƣợc mua quá số lƣợng còn lại của
Voucher
- Bối cảnh: Voucher, ChiTietDonHang
-Bảng tầm ảnh hưở ng:
Tên bảng Thêm Xóa Sử aVoucher + - +
(GiaKhuyenMai)
ChiTietDonHang + + +
(SoLuong,MaVoucher)
Cài đặt:
- Khi insert 1 chi tiết đơn hàng mà khách hàng mua quá số lượng còn lại thì hiển thị lỗi vàrollback lại giao tác
CREATE TRIGGER tr_ChiTietDonHang_ins_Voucher
ON ChiTietDonHang
Afterinsert
Hệ Quản Trị Cơ SởDữ Liệu 42
As
Begin
IFExists(select*from inserted I,Voucher Vwhere I.MaVoucher = V.MaVoucher And
I.SoLuong > V.SoLuong)
BeginRaiserror ('So Luong Khong Hop Le',0,1)
Rollbacktransaction
End
elseBegin
---Cap Nhat lai so luong voucher con lai
Update Voucher Set SoLuong = v.SoLuong-i.SoLuongFrom Voucher v , inserted i
Where v.MaVoucher =i.MaVoucher
---Tinh Thanh tien Voucher duoc mua trong Chi Tiet Don hang
Update ChiTietDonHang set ThanhTien =i.SoLuong*v.GiaKhuyenMaiFrom ChiTietDonHang ct ,inserted i,Voucher v
where ct.MaChiTietDonHang = i.MaChiTietDonHang and
v.MaVoucher =i.MaVoucher
End
End
Go
- Nếu khách hàng hủy Voucher thì phải cậ p nhật lại số lượ ng Voucher về tr ạng thái cũ
CREATE TRIGGER tr_ChiTietDonHang_del_Voucher
ON ChiTietDonHangAfterdelete
As
Begin
Update Voucher Set SoLuong = v.SoLuong+d.SoLuongFrom Voucher v , deleted d
Where v.MaVoucher =d.MaVoucher
End
Go
- Khi update 1 chi tiết đơn hàng mà khách hàng mua quá số lượng còn lại thì hiển thị lỗi vàrollback lại giao tác
CREATE TRIGGER tr_ChiTietDonHang_upd_Voucher
ON ChiTietDonHang
Hệ Quản Trị Cơ SởDữ Liệu 43
Afterupdate
As
Begin IFExists(select*from inserted I,Voucher V
where I.MaVoucher = V.MaVoucher And
I.SoLuong > V.SoLuong)Begin
Raiserror ('So Luong Khong Hop Le',0,1)
Rollbacktransaction
Endelse
Begin
declare @mavc1 intdeclare @mavc2 int
select @mavc1=I.MaVoucher from inserted I
select @mavc2=D.MaVoucher from deleted D
if (@mavc1=@mavc2)--Xet neu thay doi mavoucher thi phai cap nhat laiso luong
begin
---Cap Nhat lai so luong voucher con lai cua bang voucher khi
them chitietdonhang moiUpdate Voucher Set SoLuong = v.SoLuong-i.SoLuong
From Voucher v , inserted i
Where v.MaVoucher =i.MaVoucher
---Cap nhat so voucher con lai tren bang voucher khi delete
chitietdonhang cu
Update Voucher Set SoLuong = v.SoLuong+d.SoLuongFrom Voucher v , deleted d
Where v.MaVoucher =d.MaVoucher
end
---Tinh lai Thanh tien Voucher duoc mua trong Chi Tiet Don hang
Update ChiTietDonHang set ThanhTien =i.SoLuong*v.GiaKhuyenMaiFrom ChiTietDonHang ct ,inserted i,Voucher v
where ct.MaChiTietDonHang = i.MaChiTietDonHang and
v.MaVoucher =i.MaVoucher
End
EndGo
- Tính lại Thành tiền trong Chi tiết đơn hàng khi thay đổi giá khuyến mãi của Voucher
Hệ Quản Trị Cơ SởDữ Liệu 44
CREATE TRIGGER tr_Voucher_upd_ChiTietDonHang
ON Voucher
AfterupdateAs
Begin
Begin
Update ChiTietDonHang set ThanhTien=ct.SoLuong*i.GiaKhuyenMai
From ChiTietDonHang ct ,inserted i
where ct.MaVoucher = i.MaVoucher End
End
Go
6. Chi tiết đơn hàng – Đơn hàng: Tổng tiền trong Đơn hàng phải ứ ng với Thành tiềnvà Số lƣợ ng trong Chi tiết đơn hàng
- Bối cảnh: DonHang,ChiTietDonHang
- Bảng tầm ảnh hưở ng:
Tên bảng Thêm Xóa Sử aDonHang - - +
(TongTien)
ChiTietDonHang + + +(ThanhTien,MaDonHang)
Cài đặt:
- Cậ p nhật lại Tổng tiền trong Đơn hàng khi thêm 1 Chi tiết đơn hàng
CREATE TRIGGER tr_ChiTietDonHang_ins_DonHang
ON ChiTietDonHangForinsert
As
Begin
--Cap nhat lai tong tien khi them 1 chi tiet don hangUpdate DonHang Set TongTien = dh.TongTien+i.ThanhTien
From DonHang dh ,inserted i
Where dh.MaDonHang = i.MaDonHangEnd
Go
- Cậ p nhật lại Tổng tiền trong Đơn hàng khi hủy Chi tiết đơn hàng
CREATE TRIGGER tr_ChiTietDonHang_del_DonHang
ON ChiTietDonHang
Hệ Quản Trị Cơ SởDữ Liệu 45
Fordelete
As
BeginUpdate DonHang Set TongTien = dh.TongTien-d.ThanhTien
From DonHang dh ,deleted d
Where dh.MaDonHang = d.MaDonHangEnd
Go
- Cậ p nhật lại Tổng tiền trong Đơn hàng khi update 1 Chi tiết đơn hàng
CREATE TRIGGER tr_ChiTietDonHang_upd_DonHang
ON ChiTietDonHangForupdate
As
Begin
--Cap nhat lai tong tien khi them 1 chi tiet don hang moiUpdate DonHang Set TongTien = dh.TongTien+i.ThanhTien
From DonHang dh ,inserted i
Where dh.MaDonHang = i.MaDonHang
--Cap nhat lai tong tien khi huy 1 chi tiet don hang cuUpdate DonHang Set TongTien = dh.TongTien-d.ThanhTien
From DonHang dh ,deleted d
Where dh.MaDonHang = d.MaDonHangEnd
Go
- Khi update Tổng tiền trong Đơn hàng thì phải tính lại Thành tiền trong Chi tiết đơn hàngcho phù hợ p
CREATE TRIGGER tr_DonHang_upd_ChiTietDonHang
ON DonHang
Forupdate
AsBegin
declare @tongtien decimal(18,0)
select @tongtien =Sum(ct.ThanhTien)From ChiTietDonHang ct,inserted i where ct.MaDonHang=i.MaDonHang
Update DonHang Set TongTien = @tongtien
From DonHang dh ,inserted i
Where dh.MaDonHang = i.MaDonHangEnd
Go
Hệ Quản Trị Cơ SởDữ Liệu 46
4 MÔ TẢ TÌNH HUỐNG TRANH CHẤP ĐỒNG THỜ I
4.1 Mô tả th ủ t ục c ủa h ệ th ố ng
1) Thủ tục 1: sp_KiemTraDangNhap
a. Mục đích sử dụng thủ tục: kiểm tra tài khoản hợ p lệ hay không
b. Ý nghĩa các tham số
- @TenDangNhap (varchar): tên đăng nhậ p- @TenDangNhap (varchar): mật khẩu của người dùng
- @ID (int) output: tham số đầu ra để lưu mã người dùng
- @flag (int) output: tham số đầu ra để thông báo và lưu loại người dùng
c. Các bước đặt tả thủ tục.
1. Nhận các tham số đầu vào
2. Kiểm tra @TenDangNhap và @MatKhau có tồn tại hay không?
3. - Nếu tài khoản không tồn tại, gán @flag = -1 (đăng nhậ p thất bại)
- Nếu tồn tài khoản tồn tại, thực hiện lấy LoaiNguoiDung ở bảng
NguoiDung vớ i TenDangNhap = @TenDangNhap r ồi sau đó gán vào
@flag. Lấy MaNguoiDung gán vào @ID (trườ ng hợ p mật khẩu đúng,đăng nhập thành công) vớ i TenDangNhap = @TenDangNhap vàMatKhau = @MatKhau , ngượ c lại nếu mật khẩu không đúng gán @flag= 0 (đăng nhậ p không thành công)
2) Thủ tục 2: sp_ThayDoiMatKhau
a. Mục đích sử dụng thủ tục : hỗ tr ợ người dùng thay đổi mật khẩu
b. Ý nghĩa các tham số:
- @MaND (int) : mã người dùng cần thay đổi mật khẩu
- @MatKhauMoi (varchar): mật khẩu mới người dùng muốn thay đổi
c. Các bước đặt tả thủ tục.
1. Nhận tham số đầu vào là @MaND và @MatKhauMoi 2. Cậ p nhật lại mật khẩu thành mật khẩu mớ i với mã người dùng là
@MaND
3) Thủ tục 3: sp_DangKy
a. Mục đích sử dụng thủ tục: hỗ tr ợ người dùng đăng ký tài khoản mớ i b. Ý nghĩa các tham số:
- @TenDangNhap (varchar) : tên đăng nhập người dùng muốn đăng ký
- @MatKhau (varchar): mật khẩu của người dùng
- @TenNguoiDung (nvarchar): tên người dùng
- @NgaySinh (datetime): ngày sinh của người dùng
Hệ Quản Trị Cơ SởDữ Liệu 47
- @GioiTinh (int): giới tính (1: nam, 2: nữ, 3: khác) - @CMND (varchar): chứng minh nhân dân
- @DienThoai (varchar): số điện thoại người dùng
- @DiaChi(nvarchar): địa chỉ - @Email(varchar): địa chỉ Email
- @flag(int) output: biến kiểm tra thông tin tài khoản người dùng cần đăng kýmới đã tồn tại hay chưa? (giá trị -1: đã tồn tại, 1: chưa tồn tại)
c. Các bước đặt tả thủ tục:
1. Nhận các tham số đầu vào
2. Kiểm tra tài khoản người dùng muốn đăng ký
3. Thực hiện insert vào cơ sơ dữ liệu nếu tài khoản hợ p lệ
4. Insert thêm vào bảng TheNapTaiKhoan thêm 1 tài khoản mớ i với mãkhách hàng là của khách hàng vừa mới đăng ký
4) Thủ tục 4: sp_LoadDSVoucher_all
a. Mục đích sử dụng thủ tục: Lấy danh sách tất cả Voucher đang hoạt động vàngừng hoạt động.
b. Ý nghĩa các tham số: không tham số
c. Các bước cài đặt thủ tục:
1. Lấy danh sách các Voucher từ cơ sở dữ liệu lên cho người dùng
5) Thủ tục 5: sp_LoadDSVoucher_loaidv
a. Mục đích sử dụng thủ tục: Lấy danh sách tất cả Voucher đang hoạt động theo 1
loại hình dịch vụ nào đó
b. Ý nghĩa các tham số:
- @maloai (int) : mã loại hình dịch vụ
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào là @maloai 2. Chọn các Voucher có mã loại hình dịch vụ ứng với @maloai và trạng
thái là đang hoạt động
6) Thủ tục 6 : sp_LoadDSVoucher_doanhnghiep
a. Mục đích sử dụng thủ tục: Lấy danh sách Voucher đang hoạt động của 1 doanh
nghiệp nào đó
b. Ý nghĩa các tham số:
- @madn (int) : mã doanh nghiệ p
Hệ Quản Trị Cơ SởDữ Liệu 48
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào là @madn
2. Chọn các Voucher đang hoạt động có mã doanh nghiệp tương ứng vớ i
@madn
7) Thủ tục 7: sp_XemChiTietVoucher
a. Mục đích sử dụng thủ tục: Xem thông tin chi tiết của 1 Voucher
b. Ý nghĩa các tham số:
- @MaVoucher (int) : mã Voucher cần xem thông tinc. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào là @MaVoucher
2. Lấy thông tin chi tiết của Voucher có mã là @MaVoucher và TrangThai
= 1 (đang hoạt động)
8) Thủ tục 8: sp_LoadDSLoai
a. Mục đích sử dụng thủ tục: Lấy danh sách loại hình dịch vụ
b. Ý nghĩa các tham số: không tham số
c. Các bước cài đặt thủ tục:
1. Lấy danh sách loại hình dịch vụ đang hoạt động
9) Thủ tục 9: sp_LoadDSDoanhNghiep
a. Mục đích sử dụng thủ tục: Lấy danh sách doanh nghiệ p b. Ý nghĩa các tham số: không tham số
c. Các bước cài đặt thủ tục:
1. Lấy danh sách người dùng đang hoạt động với mã loại người dùng là 2
(doanh nghiệ p)
10) Thủ tục 10: sp_XemThongTinTaiKhoanTheNap
a. Mục đích sử dụng thủ tục: Xem số dư tài khoản của khách hàng b. Ý nghĩa các tham số:
- @MaNguoiDung (int) : mã khách hàng
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào là @MaNguoiDung
Hệ Quản Trị Cơ SởDữ Liệu 49
2. Lấy thông tin tài khoản đang hoạt động với mã khách hàng ứng vớ i
@MaNguoiDung
11) Thủ tục 11: sp_LayIDTaiKhoanTheNap
a. Mục đích sử dụng thủ tục: Lấy Mã tài khoản của người dùng
b. Ý nghĩa các tham số:
- @MaKH (int): mã khách hàng
- @MaTaiKhoan (int) output: mã tài khoản tr ả về
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào là @MaKH và @MaTaiKhoan
2. Lấy mã tài khoản của khách hàng có mã khách hàng là @MaKH và gán
cho @MaTaiKhoan
12) Thủ tục 12: sp_LoadLichSuNapThe
a. Mục đích sử dụng thủ tục: Xem lịch sử nạ p thẻ của 1 khách hàng
b. Ý nghĩa các tham số:
- @MaNguoiDung (int): mã khách hàng
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào là @MaNguoiDung
2. Tạo biến @matk (output) để nhận mã tài khoản lấy đượ c từ k ết quả thực
thi thủ tục sp_LayIDTaiKhoanTheNap vớ i tham số đầu vào là
@MaNguoiDung
3. Lấy thông tin nạ p thẻ với Mã tài khoản tương ứng vớ i @matk
13) Thủ tục 13 : sp_KiemTraTheNap
a. Mục đích sử dụng thủ tục: kiểm tra tính hợ p lệ của thẻ nạ p b. Ý nghĩa các tham số:
- @Series (varchar): số Series của thẻ nạ p- @Code (varchar): mã thẻ nạ p- @flag (int) output: biến nhận giá trị đầu ra (giá trị 0: thẻ nạp không đúng,ngượ c lại giá tr ị là mã thẻ nếu đúng)
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào là @Series và @Code
Hệ Quản Trị Cơ SởDữ Liệu 50
2. Lấy MaTheNap từ bảng TheNap với điều kiện Series = @Series và Code
@Code và trạng thái đang hoạt động r ồi gán cho tham số @flag
14) Thủ tục 14: sp_ThemTientaiKhoanTheNap
a. Mục đích sử dụng thủ tục: thêm tiền vào tài khoản của khách hàng
b. Ý nghĩa các tham số:
- @MaKH (int) : mã khách hàng
- @MenhGia (decimal) : số tiền thêm vào tài khoản
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào là @MaKH và @MenhGia
2. Cộng thêm vào số dư tài khoản giá trị là @MenhGia cho khách hàng có
mã là @MaKH
15) Thủ tục 15: sp_NapThe
a. Mục đích sử dụng thủ tục: hỗ tr ợ khách hàng nạ p thẻ vào tài khoản
b. Ý nghĩa các tham số:
@MaKH (int) : mã khách hàng
@Series (varchar) : số Series của thẻ @Code (varchar) : mã thẻ
@flag (int) output: mã thẻ nạ p của khách hàng
c. Các bước cài đặt thủ tục:
1. Nhận các tham số đầu vào
2. Thực thi thủ tục sp_KiemTraTheNap để kiếm tra tính hợ p lệ của số Series
,Code thẻ và gán đầu ra (mã thẻ nạp) vào tham số flag
3. Nếu thẻ hợ p lệ thì thực hiện các bướ c 4 , ngượ c lại k ết thúc thủ tục
4. Tạo biến @TrangThai (int) để lấy tr ạng thái của thẻ nạ p vớ i Series =
@Series và Code = @Code. Nếu @TrangThai = 1 thì thực hiện tiếp bướ c
5,6,7,8. Ngượ c lại k ết thúc thủ tục.
5. Thực thi thủ tục sp_LayIDTaiKhoanTheNap để lấy mã tài khoản của
khách hàng
6. Lấy mệnh giá và tỉ lệ khuyến mãi của thẻ vùa nạ p
Hệ Quản Trị Cơ SởDữ Liệu 51
7. Thực thi thủ tục sp_ThemTientaiKhoanTheNap để thêm tiền vào tài
khoản cho khách hàng
8. Cậ p nhật lại tình trạng thành thẻ đã nạ p cho Thẻ nạp có MaTheNap
=@flag
16) Thủ tục 16: sp_KhuyenMai
a. Mục đích sử dụng thủ tục: cậ p nhật tỉ lệ khuyến mãi cho thẻ nạ p b. Ý nghĩa các tham số:
- @MenhGia (decimal): mệnh giá được áp dụng khuyến mãi của thẻ nạ p- @TileKM (int): tỉ lệ khuyến mãi của mệnh giá đó
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào là @MenhGia và @TileKM
2. Cậ p nhật lại tỉ lệ khuyến mãi cho các thẻ nạ p chưa đượ c sử dụng có mệnh
giá bằng vớ i @MenhGia. Nếu @TileKM < 0 hoặc @TileKM > 100 thìrollback.
17) Thủ tục 17: sp_ThemTheNap
a. Mục đích sử dụng thủ tục: hỗ tr ợ chức năng thêm thẻ nạ p cho Admin
b. Ý nghĩa các tham số:
@Series (varchar) : Series của thẻ nạ p@Code (varchar): Code của thẻ nạ p@MenhGia (decimal): Mệnh giá
c. Các bước cài đặt thủ tục:
1. Nhận các tham số đầu vào
2. Kiểm tra xem trong bảng thẻ nạp đã tồn tại Series = @Series và Code =@Code hay chưa?
3. Nếu chưa thì thực hiện insert vô database
18) Thủ tục 18 : sp_ThemVoucher
a. Mục đích sử dụng thủ tục: hỗ tr ợ chức năng thêm Voucher b. Ý nghĩa các tham số:
- @TenVoucher (nvarchar): tên Voucher - @ThongTinChiTiet (nvarvchar): thông tin chi tiết của Voucher
- @NgayBatDau (datetime): ngày bắt đầu Voucher
- @NgayKetThuc (datetime): ngày kết thúc
Hệ Quản Trị Cơ SởDữ Liệu 52
- @GiaGoc (Decimal): giá gốc
- @GiaKhuyenMai (Decimal): giá khuyến mãi - @SoLuong (int): số lượ ng sản phẩm
- @MaLoaiHinhDV (int): mã loại hình dịch vụ
- @MaDoanhNghiep (int): mã doanh nghiệ p cung cấ p Voucher
- @UrlHinh (nvarchar): đườ ng dẫn đến file hình của Voucher
c. Các bước cài đặt thủ tục:
1. Nhận các tham số đầu vào
2. Thực hiện insert dữ liệu
19) Thủ tục 19: sp_SuaVoucher
a. Mục đích sử dụng thủ tục: hỗ tr ợ chức năng sửa Voucher
b. Ý nghĩa các tham số:
- @MaVoucher (int): Mã Voucher - @TenVoucher (nvarchar): tên Voucher - @ThongTinChiTiet (nvarvchar): thông tin chi tiết của Voucher
- @NgayBatDau (datetime): ngày bắt đầu Voucher
- @NgayKetThuc (datetime): ngày kết thúc
- @GiaGoc (Decimal): giá gốc
- @GiaKhuyenMai (Decimal): giá khuyến mãi - @SoLuong (int): số lượ ng sản phẩm
- @MaLoaiHinhDV (int): mã loại hình dịch vụ
- @MaDoanhNghiep (int): mã doanh nghiệ p cung cấ p Voucher
- @UrlHinh (nvarchar): đườ ng dẫn đến file hình của Voucher
c. Các bước cài đặt thủ tục:
1. Nhận các tham số đầu vào
2. Thực hiện update thông tin của Voucher có mã là @MaVoucher (tr ừ
@UrlHinh)
3. Kiểm tra nếu @UrlHinh khác rỗng thì thực hiện update UrlHinh =
@UrlHinh có MaVoucher = @MaVoucher
20) Thủ tục 20: sp_CapNhatTrangThaiVoucher
a. Mục đích sử dụng thủ tục: cậ p nhật lại tr ạng thái Voucher (đang hoạt động hoặc
ngưng hoạt động)
b. Ý nghĩa các tham số:
- @MaVoucher (int): mã Voucher cần cậ p nhật
c. Các bước cài đặt thủ tục:
Hệ Quản Trị Cơ SởDữ Liệu 53
1. Nhận tham số đầu vào
2. Tạo biến @TrangThaiCu (int) để lấy tr ạng thái của Voucher có mã là@MAVoucher
3. Tạo biến @TrangThaiMoi. Xét nếu @TrangThaiCu = 0 thì@TrangThaiMoi = 1 và ngượ c lại.
4. Thực hiện update lại tr ạng thái vớ i TrangThai = @TrangThaiMoi của
Voucher có mã là @MaVoucher
21) Thủ tục 21: sp_LoadDSDonHang_all
a. Mục đích sử dụng thủ tục: Lấy danh sách tất cả đơn hàng
b. Ý nghĩa các tham số: không tham số
c. Các bước cài đặt thủ tục:
1. Thực hiện câu lệnh select tất cả đơn hàng
22) Thủ tục 22 : sp_LoadDSDonHang_ChuaThanhToan
a. Mục đích sử dụng thủ tục: Lấy danh sách các đơn hàng chưa được khách hàngthanh toán
b. Ý nghĩa các tham số: không tham số
c. Các bước cài đặt thủ tục:
1. Thực hiện select các Đơn hàng có trạng thái bằng 0 (chưa đượ c thanh
toán)
23) Thủ tục 23: sp_LoadDSDonHang_DaThanhToan
a. Mục đích sử dụng thủ tục: Lấy danh sách các đơn hàng đã được khách hàngthanh toán
b. Ý nghĩa các tham số: không tham số
c. Các bước cài đặt thủ tục:
1. Thực hiện select các Đơn hàng có trạng thái bằng 1 (đã được thanh toán)
24) Thủ tục 24: LaySanPhamCungLoai
a. Mục đích sử dụng thủ tục: lấy danh sách các sản phẩm cùng loại vớ i sản phẩm
mà khách hàng đang xem
b. Ý nghĩa các tham số
@mavoucher (int): mã voucher
Hệ Quản Trị Cơ SởDữ Liệu 54
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Tạo biến @maloai (int) để lấy MaLoaiHinhDV của Voucher có mã@mavoucher
3. Lấy ra danh sách Voucher đang hoạt động và có MaLoaiHinhDV =@maloai.
25) Thủ tục 25: LayThongTinDoanhNghiep
a. Mục đích sử dụng: lấy ra thông tin doanh nghiệp đang bán voucher đó.
b. Ý nghĩa các tham số:
@mavoucher (int): mã voucher
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Tạo biến @madoanhnghiep (int) để lấy MaDoanhNghiep của Voucher có
mã @mavoucher.
3. Lấy ra doanh nghiệp có mã là @madoanhnghiep trong bảng NguoiDung
26) Thủ tục26 : sp_LoadDSDonHangChuaThanhToan
a. Mục đích sử dụng thủ tục: Ngườ i xem các đơn hàng chưa thanh toán. b. Ý nghĩa các tham số:
@MaNguoiDung (int): mã người dùng
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào2. Load danh sách đơn hàng có MaNguoiDung = @MaNguoiDung và có
TrangThai = 0 (chưa thanh toán).
27) Thủ tục 27: sp_LoadChiTietDonHang
a. Mục đích sử dụng thủ tục: Khách hàng xem các đơn hàng chưa thanh toán. b. Ý nghĩa các tham số:
@MaDonHang (int): mã đơn hàng
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
Hệ Quản Trị Cơ SởDữ Liệu 55
2. Load chi tiết đơn hàng có MaDonHang = @MaDonHang và cóTrangThai = 1 (đang hoạt động).
28) Thủ tục 28: sp_ThemDonHang
a. Mục đích sử dụng thủ tục: thêm một đơn hàng cho khách hàng
b. Ý nghĩa các tham số:
1. @DiaChiGiaoHang (nvarchar(100)): địa chỉ giao hàng
2. @NgayGiao (datetime): ngày giao hàng
3. @MaKhachHang (int): mã khách hàng
4. @MaLoaiHinhThanhToan (int): mã loại hình thanh toán
5. @MaDonHang (int) output: mã đơn hàng c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào.
2. Đếm các mã đơ n hàng có trong bảng Đơn Hàng.
3. Mã đơn hàng hiện tại sẽ bằng vớ i số lượng các mã đơn hàng trong bảng
Đơn Hàng + 1.
4. declare @NgayDatHang datetime:lấy ngày hiện tại của hệ thống
5. Tạo biến @trangthai. Nếu @MaLoaiHinhThanhToan = 1 thì @trangthai
= 1 và ngượ c lại.
6. Thực hiện insert vào database.
29) Thủ tục 29: sp_ThemChiTietDonHang
a. Mục đích sử dụng thủ tục: thêm chi tiết đơn hàng cho một đơn hàng.
b. Ý nghĩa các tham số:
1. @MaDonHang (int ): mã đơn hàng
2. @MaVoucher (int): mã Voucher 3. @SoLuong ( int): số lượ ng của một Voucher được khách hàng mua.
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào.
2. @soluongconlai = số lượ ng của Voucher = @MaVoucher có tr ong bảng
Voucher
3. Nếu @SoLuong<@soluongconlai
Hệ Quản Trị Cơ SởDữ Liệu 56
i. @GiaKhuyenMai = lấy GiaKhuyenMai có trong bảng Voucher vớ i
MaVoucher = @MaVoucher
ii. @ThanhTien = giá khuyến mãi * số lượ ng (@GiaKhuyenMai *
@SoLuong)
iii. Cậ p nhật số lượng còn lại = @soluongconlai - @soluong vớ i trong
bảng Voucher vớ i MaVoucher = @ MaVoucher
iv. Thực hiện insert vào database.
30) Thủ tục 30: sp_ChuyenTien_Admin
a. Mục đích sử dụng thủ tục: chuyển tiền từ tài khoản của khách hàng sang tàikhoản của Admin sau khi khách hàng thanh toán đơn hàng
b. Ý nghĩa các tham số:
- @MaKhachHang (int): mã khách hàng
- @TienChuyen (decimal): số tiền chuyển từ tài khoản khách hàng sang tàikhoản của Admin
c. Các bước cài đặt thủ tục:
1. Nhận các tham số đầu vào
2. Lấy số dư tại khoản của Admin tại MaTaiKhoan = 1 ( Admin có 1 tàikhoản mặc định có mã là 1) trong bảng TaiKhoanTheNap
3. Lấy số dư tài khoản của khách hàng tại MaKhanHang = @MaKhachHang
trong bảng TaiKhoanTheNap
4. Cộng thêm vào số dư tài khoản của Amin với giá trị thêm là@TienChuyen
5. Tr ừ số dư tài khoản của khách hàng cới giá trị tr ừ là @TienChuyen
6. Cậ p nhật lại số dư tài khoản của Admin và khách hàng
31) Thủ tục 31: sp_TinhLaiTongTien
a. Mục đích sử dụng thủ tục: Tính lại tổng tiền trong Đơn hàng khi thêm hoặc cậ pnhật lại Chi tiết đơn hàng thuộc về Đơn hàng đó
b. Ý nghĩa các tham số:
@MaDonHang (int): mã đơn hàng
@tongtien (decimal) output: tổng tiền của đơn hàng
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
Hệ Quản Trị Cơ SởDữ Liệu 57
2. Tính tổng các ThanhTien trong bảng ChiTietDonHang vớ i MaDonHang
là @MaDonHang
3. Cậ p nhật lại Tổng tiền của đơn hàng có mã là @MaDonHang và gán cho@tongtien.
32) Thủ tục 32: sp_LoadThongTinNguoiDung
a. Mục đích sử dụng thủ tục: lấy thông tin người dùng
b. Ý nghĩa các tham số:
@MaNguoiDung (int): mã người dùng
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào là @MaNguoiDung
2. Thực hiện select với mã người dùng là @MaNguoiDung
33) Thủ tục 33: Load3SanPhamReNhat
a. Mục đích sử dụng: lấy các voucher có giá bán rẻ nhất
b. Ý nghĩa các tham số: không có tham số
c. Các bước cài đặt thủ tục:
1. Sắ p xếp danh sách các Voucher đang hoạt động tăng dần theo
GiaKhuyenMai. Lấy ra 6 voucher đầu tiên.
34) Thủ tục 34: LoadDealHot
a. Mục đích sử dụng: lấy các voucher có giá bán rẻ nhất
b. Ý nghĩa các tham số: không có tham số
c. Các bước cài đặt thủ tục:
1. Sắ p xếp danh sách các Voucher đang hoạt động tăng dần theo SoLuong.
Lấy ra 3 voucher đầu tiên.
35) Thủ tục 35: LoadDealMoi
a. Mục đích sử dụng: lấy các voucher có giá bán rẻ nhất
b. Ý nghĩa các tham số: không có tham số
c. Các bước cài đặt thủ tục:
Hệ Quản Trị Cơ SởDữ Liệu 58
1. Sắ p xếp danh sách các Voucher đang hoạt động tăng dần theo
NgayBatDau. Lấy ra 18 voucher đầu tiên.
36) Thủ tục 36: LoadDSVoucher_DN_NgungHD
a. Mục đích sử dụng: lấy danh sách các voucher ngừng hoạt động của 1 doanh
nghiệ p.
b. Ý nghĩa các tham số:
@madn (int): mã doanh nghiệ p
c. Các bước cài đặt thủ tục:
1. Lấy ra doanh sách các voucher có MaDoanhNghiep = @madn và
TrangThai = 0 (ngừng hoạt động).
37) Thủ tục 37: sp_CapNhatHopDong
a. Mục đích sử dụng: Admin cậ p nhật lại tr ạng thái của hợp đồng.
b. Ý nghĩa các tham số:
@MaHopDong (int): mã hợp đồng
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Tạo biến @TrangThaiCu (int) để lấy tr ạng thái của HopDong có mã là@MaHopDong
3. Tạo biến @TrangThaiMoi. Xét nếu @TrangThaiCu = 0 thì@TrangThaiMoi = 1 và ngượ c lại.
4. Thực hiện update lại tr ạng thái vớ i TrangThai = @TrangThaiMoi của
HopDong có mã là @MaHopDong
38) Thủ tục 38: sp_CapNhatTrangThaiDonHang
a. Mục đích sử dụng: Admin cậ p nhật lại tr ạng thái đơn hàng
b. Ý nghĩa các tham số:
@MaDonHang (int): mã đơn hàng
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Tạo biến @TrangThaiCu (int) để lấy tr ạng thái của DonHang có mã là@MaDonHang
Hệ Quản Trị Cơ SởDữ Liệu 59
3. Tạo biến @TrangThaiMoi. Xét nếu @TrangThaiCu = 0 thì@TrangThaiMoi = 1 và ngượ c lại.
4. Thực hiện update lại tr ạng thái vớ i TrangThai = @TrangThaiMoi của
DonHang có mã là @MaDonHang
39) Thủ tục 39: sp_DanhSachVoucherDangHoatDong_DoanhNghiep
a. Mục đích sử dụng: Lấy danh sách các voucher đang hoạt động của 1 doanh
nghiệ p.
b. Ý nghĩa các tham số:
@MaDN (int): mã doanh nghiệ p
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Lay danh sách Voucher có MaDoanhNghiep = @MaDN và Trangthai = 1
40) Thủ tục 40: sp_DanhSachVoucherNgungHoatDong_DoanhNghiep
a. Mục đích sử dụng: Lấy danh sách các voucher ngừng hoạt động của 1 doanh
nghiệ p.
b. Ý nghĩa các tham số:
@MaDN (int): mã doanh nghiệ p
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Lấy danh sách Voucher có MaDoanhNghiep = @MaDN và Trangthai = 0
41) Thủ tục 41: sp_GiamGiaKhuyenMai
a. Mục đích sử dụng: giảm giá khuyến mãi của 1 voucher
b. Ý nghĩa các tham số:
@MaVoucher (int): mã voucher
@GiaGiam (decimal): giá giảm
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Tạo biến @GiaKhuyenMai nhận giá trị GiaKhuyenMai từ Voucher cóMaVoucher = @MaVoucher
3. @GiaKhuyenMai = @GiaKhuyenMai + @GiaGiam
Hệ Quản Trị Cơ SởDữ Liệu 60
4. Cậ p nhật lại GiaKhuyenMai = @GiaKhuyenMai của Voucher cóMaVoucher = @MaVoucher.
42) Thủ tục 42: sp_LayDSThe_TT0
a. Mục đích sử dụng: lấy danh sách thẻ nạp đã sử dụng
b. Ý nghĩa các tham số: không có tham số
c. Các bước cài đặt thủ tục:
1. Lấy danh sách thẻ nạp có TrangThai = 0
43) Thủ tục 43: sp_LayDSThe_TT1
a. Mục đích sử dụng: lấy danh sách thẻ nạp chưa đượ c sử dụng
b. Ý nghĩa các tham số: không có tham số
c. Các bước cài đặt thủ tục:
1. Lấy danh sách thẻ nạ p có TrangThai = 1
44) Thủ tục 44: sp_LaySanPhamTheoNgay
a. Mục đích sử dụng: lấy sản phẩm theo ngày
b. Ý nghĩa các tham số:
@giatri (int): giá trị
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Tạo biến @ngayhn (datetime). Nếu @giatri = 1 thì select danh sáchvoucher đang hoạt động co NgayBatDau = @ngayhn và ngượ c lại.
45) Thủ tục 45: sp_LayThongTinTaiKhoan
a. Mục đích sử dụng: lấy thông tin tài khoản khách hàng
b. Ý nghĩa các tham số:
@MaKh (int): mã khách hàng
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Select bảng TaiKhoanTheNap vớ i MaKhachHang = @MaKH
Hệ Quản Trị Cơ SởDữ Liệu 61
46) Thủ tục 46: sp_LoadDN
a. Mục đích sử dụng: load danh sách doanh nghiệ p
b. Ý nghĩa các tham số: không có tham số
c. Các bước cài đặt thủ tục:
1. Lấy danh sách sách doanh nghiệ p trong bảng NguoiDung vóiMaLoaiNguoiDung = 2 (doanh nghiệp) và TrangThai = 1 (đang hoạtđộng)
47) Thủ tục 47: sp_LoadDoanhNghiep
a. Mục đích sử dụng: load danh sách doanh nghiệ p
b. Ý nghĩa các tham số: không có tham số
c. Các bước cài đặt thủ tục:
1. Lấy danh sách sách doanh nghiệ p trong bảng NguoiDung vóiMaLoaiNguoiDung = 2 (doanh nghiệp) và TrangThai = 1 (đang hoạtđộng)
48) Thủ tục 48: sp_LoadDonHangKH
a. Mục đích sử dụng: load danh sách đơn hàng của 1 khách hàng
b. Ý nghĩa các tham số:
@makh (int): mã khách hàng
@soluong (int) output: số lượ ng
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Đếm số lượng đơn hàng của khách hàng có MaKhachHang = @makh gán
cho @soluong
3. Lấy danh sách đơn hàng của khách hàng có mã @makh
49) Thủ tục 49: sp_LoadDSHopDong
a. Mục đích sử dụng: Admin xem danh sách hợp đồng
Hệ Quản Trị Cơ SởDữ Liệu 62
b. Ý nghĩa các tham số: không có tham số
c. Các bước cài đặt thủ tục:
1. Lấy danh sách hợp đồng từ cơ sở dữ liệu
50) Thủ tục 50: sp_LoadDSMenhGia
a. Mục đích sử dụng: Load danh sách các mệnh giá của thẻ nạ p
b. Ý nghĩa các tham số: không có tham số
c. Các bước cài đặt thủ tục:
1. Lấy danh sách các mệnh giá trong bảng TheNap
51) Thủ tục 51: sp_LoadDSVoucher_doanhnghiep_all
a. Mục đích sử dụng: load danh sách voucher theo doanh nghiệ p
b. Ý nghĩa các tham số:
@madn (int): mã doanh nghiệ p
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Lấy danh sách voucher có MaDoanhNghiep = @madn
52) Thủ tục 52: Sp_LoadDSVoucher_TheoDoanhNghiep
a. Mục đích sử dụng: load danh sách voucher theo doanh nghiệ p
b. Ý nghĩa các tham số:
@madn (int): mã doanh nghiệ p
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Lấy danh sách voucher có MaDoanhNghiep = @madn và
TrangThai = 1 (đang hoạt động).
53) Thủ tục 53: sp_ThemHopDong
a. Mục đích sử dụng: admin thêm một hợp đồng mớ i
Hệ Quản Trị Cơ SởDữ Liệu 63
b. Ý nghĩa các tham số:
@ngayky (datetime): ngày ký
@thoihan (datetime): thờ i hạn
@mota (nvarchar): mô tả
@madn (int): mã doanh nghiệ p
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Insert thông tin của hợp đồng mớ i xuống csdl
54) Thủ tục 54: sp_ThongTinHopDong_DoanhNghiep
a. Mục đích sử dụng: Lấy danh sách các hợp đồng của 1 doanh nghiệ p
b. Ý nghĩa các tham số:
@MaDN (int): mã doanh nghiệ p
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Lấy danh sách hợp đồng có MaDoanhNghiep = @MaDN.
55) Thủ tục 55: sp_TimKiemTheoGia
a. Mục đích sử dụng: Lấy danh sách các voucher theo giá đã chọn
b. Ý nghĩa các tham số:
@MucGia1 (decimal): giá nằm trong khoảng từ mức giá 1
@MucGia2 (decimal): đến mức giá 2
@soluong (int) output: số lượ ng
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Đếm số lượng voucher đang hoạt động có GiaKhuyenMai nằm trong
khỏang từ @MucGia1 đến @MucGia2 và gán cho @soluong
3. Select các voucher đang hoạt động có GiaKhuyenMai nằm trong khỏang
từ @MucGia1 đến @MucGia2
Hệ Quản Trị Cơ SởDữ Liệu 64
56) Thủ tục 56: sp_TimKiemTheoTen
a. Mục đích sử dụng: Lấy danh sách các voucher theo tên đượ c nhậ p
b. Ý nghĩa các tham số:
@Ten (nvarchar): tên
@soluong (int) output: số lượ ng
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào
2. Đếm số lượng voucher đang hoạt động có TenVoucher có chứa @Ten
3. Select các voucher đang hoạt động có TenVoucher có chứa @Ten
57) Thủ tục 57: sp_XemChiTietVoucher0
a. Mục đích sử dụng thủ tục: Xem thông tin chi tiết của 1 Voucher đang ngừng
hoạt động
b. Ý nghĩa các tham số:
@MaVoucher (int) : mã Voucher cần xem thông tinc. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào là @MaVoucher
2. Lấy thông tin chi tiết của Voucher có mã là @MaVoucher và
TrangThai = 0 (ngừng hoạt động).
58) Thủ tục 58: sp_XemDanhSachHopDongConThoiHan
a. Mục đích sử dụng thủ tục: Xem danh sách hợp đồng còn thờ i hạn
b. Ý nghĩa các tham số:
- @maDN (int) : mã doanh nghiệ p- @soluong (int) output: số lượ ng
c. Các bướ c cài đặt thủ tục:
1. Nhận tham số đầu vào là @MaVoucher
2. Đếm số lượ ng hợp đồng của doanh nghiệp có mã là @maDN và
TrangThai = 1
3. Lấy danh sách hợp đồng của doanh nghiệp có mã là @maDN và
TrangThai = 1
59) Thủ tục 59: sp_XemDanhSachHopDongHetThoiHan
Hệ Quản Trị Cơ SởDữ Liệu 65
a. Mục đích sử dụng thủ tục: Xem danh sách hợp đồng hết thờ i hạn b. Ý nghĩa các tham số:
- @maDN (int) : mã doanh nghiệ p- @soluong (int) output: số lượ ng
c. Các bước cài đặt thủ tục:
1. Nhận tham số đầu vào là @MaVoucher
2. Đếm số lượ ng hợp đồng của doanh nghiệp có mã là @maDN và
TrangThai = 0
3. Lấy danh sách hợp đồng của doanh nghiệp có mã là @maDN và
TrangThai = 0
4.2 Mô tả tình huố ng tranh ch ấp đồng th ờ i
1.
Trƣờ ng hợ p 1:
a. Tình huống:
Hai giao tác T1 và T2 cùng cậ p nhật lại giá khuyến mãi của một Voucher trong
cùng một thời điểm.
b. Mô Tả:
Mô tả T1:
T1 nhận các tham số đầu vào
Đọc gía khuyến mãi của Voucher
Cậ p nhật lại giá khuyến mãi của Voucher
Mô tả T2:
T2 nhận các tham số đầu vào
Đọc gía khuyến mãi của Voucher
Cậ p nhật lại giá khuyến mãi của Voucher
c. K ịch Bản:
T1
Cập nhật giá khuyến mãi của Voucher
T2
Cập nhật giá khuyến mãi của Voucher
Bắt đầu giao tác T1(Begin Tran)
Bắt đầu giao tác T2 (Begin Tran)
Đọc giá khuyến mãi
Đọc giá khuyến mãi
Cậ p nhật lại giá khuyến mãi
Cậ p nhật lại giá khuyến mãi
Hệ Quản Trị Cơ SởDữ Liệu 66
K ết thúc giao tác(Commit Tran)
K ết thúc giao tác(Commit Tran)
d. Nhận Xét: Hai giao tác cùng cậ p nhật đồng thời trên cùng 1 tậ p dữ liệu nhưng
chỉ có 1 giao tác thực hiện thành công , dẫn đến tình trạng mất dữ liệu cậ p nhật
(lost update)
2.
Trƣờ ng hợ p 2:
a. Tình huống:
Hai giao tác T1, T2 thêm chi tiết đơn hàng cùng 1 thời điểm với cùng mã
Voucher (2 khách hàng cùng mua 1 Voucher tạ i 1 thời điểm)
b. Mô Tả:
Mô tả T1: T1 thêm chi tiết đơn hàng và cậ p nhật lại số lượng còn lại của
voucher A
T1 nhận tham số đầu vào là @MaVoucher,@MaDonHang và
@SoLuong ( số lượ ng mua )
Lấy số lượng còn lại của voucher A từ @Mavoucher gán vào
biến @soluongconlai
Nếu số lượng còn lại lớn hơn số lượng mua thì mới cho thêm chi
tiết đơn hàng
Tính thành tiền = Giá khuyến mãi * số lượ ng
Số lượng còn lại = số lượng còn lại – số lượ ng mua
Cậ p nhật số lượng còn lại cho voucher A
Thêm chi tiết đơn hàng
Mô tả T2: T2 thêm chi tiết đơn hàng và cậ p nhật lại số lượng còn lại của
voucher A
T1 nhận tham số đầu vào là @MaVoucher,@MaDonHang và
@SoLuong ( số lượ ng mua )
Lấy số lượng còn lại của voucher A từ @Mavoucher gán vào
biến @soluongconlai
Hệ Quản Trị Cơ SởDữ Liệu 67
Nếu số lượng còn lại lớn hơn hoặc bằng số lượng mua thì mớ i
cho thêm chi tiết đơn hàng
Tính thành tiền = Giá khuyến mãi * số lượ ng
Số lượng còn lại = số lượng còn lại – số lượ ng mua
Cậ p nhật số lượng còn lại cho voucher A
Thêm chi tiết đơn hàng
c. K ịch Bản:
T1
Mua Voucher A
T2
Mua Voucher A
Bắt đầu giao tác T1 ( Begin Tran)
Bắt đầu giao tác T2 ( Begin Tran)
Lấy số lượng còn lại của Voucher
Lấy số lượng còn lại của Voucher
Tính thành tiền cho CTĐH 2
Tính thành tiền CTĐH 1
Cậ p nhật số lượng còn lại Voucher A
Thêm CTĐH 1 vào bảng Chi tiết đơn hàng
Cậ p nhật số lượng còn lại Voucher A
Thêm CTĐH 2 vào bảng Chi tiết đơn hàng
K ết thúc Giao Tác T1 ( Commit Tran)
K ết thúc Giao Tác T2 ( Commit Tran)
d. Nhận Xét: Hai giao tác cùng thêm chi tiết đơn hàng với Mã Voucher nhận vào
là như nhau (2 khách hàng cùng mua 1 Voucher), 2 giao tác cũng thực hiện trên
1đơn vị dữ liệu nhưng chỉ có 1 giao tác thực hiện thành công , dẫn đến tình
tr ạng mất dữ liệu cậ p nhật (lost update)
3.
Trƣờ ng hợ p 3:
a. Tình huống:
Giao tác T1 thực hiện cậ p nhật tỉ lệ khuyến mãi và chưa hoàn tất giao tác, trong
khi đó T2 thực hiện hành vi nạ p tiền, T2 thực hiện tính toán trên tỉ lệ khuyến
mãi của T1 vừa cậ p nhật, nhưng sau đó T1 rollback
Hệ Quản Trị Cơ SởDữ Liệu 68
b. Mô Tả:
Mô tả T1: ( T1 cậ p nhật tỉ lệ khuyến mãi– tỉ lệ khuyến mãi không đượ c
>100 và <0)
T1 nhận tham số đầu vào là tỉ lệ khuyến mãi và mệnh giá áp
dụng
Thực hiện cậ p nhật các mệnh giá tương ứng vớ i @MenhGia vớ i
tỉ lệ khuyến mãi mớ i
Tỉ lệ khuyến mãi không hợ p lệ Rollback Tran
Mô tả T2: T2 thực hiện hành vi nạ p thẻ cho khách hàng
Nhận vào @MaKH , @Serrie và @Code
Kiểm tra tính hợ p lệ của thẻ
Lấy mệnh giá và tỉ lệ khuyến mãi của thẻ
Thực hiện thêm tiền cho khách hàng có mã là @MaKH vớ i số
tiền = mệnh giá * tỉ lệ khuyến mãi
Cậ p nhật lại tình trạng của thẻ nạp (đã nạ p)
c. K ịch Bản:
T1
Cập nhật tỉ lệ khuyến mãi
T2
Nạp thẻ
Bắt đầu giao tác T1 ( Begin Tran)
Cậ p nhật tỉ lệ khuyến mãi của thẻ nạ p
Bắt đầu giao tác T2 ( Begin Tran)
Kiểm tra tính hợ p lệ của thẻ
Lấy mệnh giá và tỉ lệ khuyến mãi của thẻ
Thêm tiền cho khách hàng
Kiểm tra tính hợ p lệ của tỉ lệ khuyến mãi
Tỉ lệ khuyến mãi không hợ p lệ
Hủy Giao Tác T1 ( Rollback Tran)
Cậ p nhật lại tình trạng thẻ nạ p
K ết thúc Giao Tác T2 ( Commit Tran)
d. Nhận Xét: T2 đã đọc dữ liệu do T1 cậ p nhật trướ c khi T1 rollback T2 đọc
dữ liệu rác (Dirty Read)
Hệ Quản Trị Cơ SởDữ Liệu 69
4.
Trƣờ ng hợ p 4:
a. Tình huống:
Giao tác T1 thực hiện cậ p nhật giá khuyến mãi của Voucher mà khi cậ p nhật
giá khuyến mãi nhưng chưa hoàn tất việc ghi, trong khi đó T2 thực hiện thêm
vào chi tiết đơn hàng với giá khuyến mãi mà T1 vừa cậ p nhật, nhưng sau đó T1
rollback
b. Mô Tả:
Mô tả T1:
Nhận các tham số đầu vào
Cậ p nhật thông tin voucher
Chờ giao tác T2 thực hiện
Lấy giá gốc của @MaVoucher so sánh với giá khuyến mãi
Giá khuyến mãi không hợ p lệ => T1 bị Rollback
Mô tả T2:
Nhận các tham số đầu vào
Lấy số lượ ng của @MaVoucher gán cho @soluongconlai
Kiểm tra số lượ ng mua @MaVoucher:
o Nếu số lượ ng mua <= @soluongconlai
o Lấy giá khuyến mãi của @maVoucher
o Tính thành tiền
o Cậ p nhật @soluongconlai của @voucher
o Thêm chi tiết đơn hàng
c. K ịch Bản:
T1
Cập nhật thông tin Voucher
T2
Thêm chi tiết đơn hàng
Bắt đầu giao tác (Begin Tran)
Bắt đầu giao tác (Begin Tran)
Thực hiện cậ p nhật thông tin Voucher (cậ p
nhật giá khuyến mãi)
Đọc số lượ 0ng còn lại của Voucher
Hệ Quản Trị Cơ SởDữ Liệu 70
Cậ p nhật số lượng còn lại của Voucher
Thêm chi tiết đơn hàng
Hủy giao tác (Rollback tran)
K ết thúc giao tác (Commit tran)
d. Nhận xét: Giao tác T1 thực hiện việc cậ p nhật lại giá khuyến mãi , trong khi đó
giao tác T2 đọc giá khuyến mãi mà T1 vừa cậ p nhật để tính thành tiền thêm
vào chi tiết đơn hàng. Nhưng giá khuyến mãi mà T1 cậ p nhật lại lớn hơn giá
gốc nên T1 bị R ollback làm cho T2 đọc sai dữ liệu =>Dirty Read
5.
Trƣờ ng hợ p 5:
a. Tình huống:
Giao tác T1 thực hiện hành vi nạ p thẻ ,trong khi T2 đó cũng thực hiện hành vi
nạ p thẻ ( 2 khách hàng khác nhau cùng nạ p chung 1 thẻ cùng 1 thời điểm)
b. Mô Tả:
Mô tả T1:
Nhận tham số @MaKH, @Series , @Code
Kiểm tra thẻ nạ p hợ p lệ
Nếu thẻ nạ p hợ p lệ, thực hiện lấy Mã tài khoản theo của khách
hàng
Thực hiện cộng thêm tiền vào tài khoản cho khách hàng
Mô tả T2:
Nhận tham số @MaKH, @Series , @Code
Kiểm tra thẻ nạ p hợ p lệ
Nếu thẻ nạ p hợ p lệ, thực hiện lấy Mã tài khoản theo @MaKH
Thực hiện cộng thêm tiền vào tài khoản cho khách hàng
c. K ịch Bản:
T1
Thự c hiện nạp thẻ
T2
Thự c hiện nạp thẻ
Bắt đầu giao tác (Begin Tran)
Bắt đầu giao tác ( Begin Tran)
Kiểm tra tính thẻ hợ p lệ của thẻ nạ p
Lấy thông tin thẻ nạ p
Hệ Quản Trị Cơ SởDữ Liệu 71
Kiểm tra tính thẻ hợ p lệ của thẻ nạ p
Lấy thông tin thẻ nạ p
Cậ p nhật lại thông tin thẻ nạ p
Cộng thêm tài khoản cho khách hàng
Cậ p nhật lại thông tin thẻ nạ p
Cộng thêm tài khoản cho khách hàng
K ết thúc giao tác (Commit Tran)
K ết thúc giao tác (Commit Tran)
d. Nhận Xét: 2 giao tác T1 và T2 cùng thực hiện hành vi nạ p thẻ nhưng chỉ có 1
giao tác thực hiện thành công = > xảy ra lỗi Lost update
6. Trƣờ ng hợ p 6:
a.
Tình huống:
Giao tác T1 thực hiện hành vi tìm kiếm Voucher có giá trong khoảng từ
MucGia1 đến MucGia2, trong khi đó giao tác T2 thực hiện thêm (hoặc cậ p
nhật) Voucher cũng có giá trong khoảng từ MucGia1 đến MucGia2.
Giao tác T1 đọc số lượng Voucher có giá trong khoảng từMucGia1 đến
MucGia2
Giao tác T2 thực hiện thêm (hoặc cậ p nhật) Voucher
Giao tác T1 load danh sách Voucher tìm đượ c
b.
Mô Tả:
Mô tả T1:
Nhận tham số @MucGia1, @MucGia2 , @Soluong output
Thực hiện lấy số lượ ng sản phẩm
Thực hiện lấy danh sách sản phẩm tìm đượ c
K ết thúc giao tác
Mô tả T2:
Nhận tham số các tham số đầu vào (thông tin Voucher)
Thực hiện thêm (hoặc cậ p nhật) vào cơ sở dữ liệu
K ết thúc giao tác
Hệ Quản Trị Cơ SởDữ Liệu 72
c. K ịch Bản:
T1
Tìm kiếm Voucher
T2
Thêm (hoặc cập nhật) Voucher
Bắt đầu giao tác (Begin Tran)
Bắt đầu giao tác (Begin Tran)
Đọc số lượ ng Voucher thỏa tiêu chí
Thực hiện thêm (hoặc cậ p nhật)
Voucher mới vào cơ sở dữ liệu
K ết thúc giao tác (Commit Tran)
Lấy danh sách Voucher thỏa tiêu chí
K ết thúc giao tác (Commit Tran)
d. Nhận xét:Danh sách Voucher T1 đọc đượ c sẽ nhiều hơn số lượng mà T1 đã đọc
trước đó, dữ liệu không nhất quán (lỗi Phantom)
7. Trƣờ ng hợ p 7:
a. Tình huống:
Giao tác T1 thực hiện hành vi tìm kiếm Voucher theo 1 Từ khóa nào đó (tìm
kiếm theo tên), trong khi đó giao tác T2 thực hiện thêm (hoặc cậ p nhật)
Voucher cũng có tên chứa từ đó.
Giao tác T1 đọc số lượng Voucher có tên cần tìm
Giao tác T2 thực hiện thêm (hoặc cậ p nhật) Voucher
Giao tác T1 load danh sách Voucher tìm đượ c
b. Mô Tả:
Mô tả T1:
Nhận tham số @Ten , @Soluong output
Thực hiện lấy số lượ ng sản phẩm
Thực hiện lấy danh sách sản phẩm tìm đượ c
K ết thúc giao tác
Mô tả T2:
Nhận tham số các tham số đầu vào (thông tin Voucher)
Hệ Quản Trị Cơ SởDữ Liệu 73
Thực hiện thêm (hoặc cậ p nhật) Voucher vào cơ sở dữ liệu
K ết thúc giao tác
c. K ịch Bản:
T1
Tìm kiếm Voucher
T2
Thêm (hoặc cập nhật) Voucher
Bắt đầu giao tác (Begin Tran)
Bắt đầu giao tác (Begin Tran)
Đọc số lượ ng Voucher thỏa tiêu chí
Thực hiện thêm (hoặc cậ p nhật)
Voucher mới vào cơ sở dữ liệu
K ết thúc giao tác (Commit Tran)
Lấy danh sách Voucher thỏa tiêu chí
K ết thúc giao tác (Commit Tran)
d. Nhận xét: Danh sách Voucher T1 đọc đượ c sẽ nhiều hơn số lượng mà T1 đã
đọc trướ c đó, dữ liệu không nhất quán (lỗi Phantom)
8. Trƣờng hơp 8:
a.
Tình huống:
Giao tác T1 thực hiện lấy danh sách các hợp đồng vẫn còn thờ i hạn , trong khi
đó Giao tác T2 thực hiện thêm 1 hợp đồng mớ i
T1 đọc số lượ ng hợp đồng vẫn còn thờ i hạn
T2 thực hiện thêm hợ p đồng mớ i
T1 lấy danh sách hợp đồng vẫn còn thờ i hạn
b. Mô tả:
Mô tả T1:
Đọc số lượ ng hợp đồng vẫn còn thờ i hạn
Lấy danh sách hợp đồng vẫn còn thờ i hạn
K ết thúc giao tác
Mô tả T2:
Nhận tham số đầu vào (thông tin hợp đồng)
Thực hiện thêm vào cơ sở dữ liệu
K ết thúc giao tác
Hệ Quản Trị Cơ SởDữ Liệu 74
c. K ịch bản:
T1
Đọc số lƣợng và lấy danh sách hợ p
đồng vẫn còn thờ i hạn
T2
Thêm hợp đồng mớ i
Bắt đầu giao tác (Begin Tran)
Đọc số lượ ng hợp đồng vẫn còn thờ i
hạn
Bắt đầu giao tác (Begin Tran)
Thực hiện thêm hợp đồng vào cơ sở
dữ liệu
K ết thúc giao tác (Commit Tran)
Lấy danh sách hợp đồng vẫn còn thờ i
hạn
K ết thúc giao tác (Commit Tran)
d. Nhận xét: Danh sách hợp đồng T1 lấy đượ c sẽ nhiều hơn số lượng đã đọc
trước đó => dữ liệu không nhất quán (lỗi phantom)
9. Trƣờng hơp 9:
a. Tình huống:
Giao tác T1 thực hiện lấy danh sách các hợp đồng hết thờ i hạn , trong khi đó
Giao tác T2 thực hiện cậ p nhật lại tr ạng thái hợp đồng (đã hết hạn)
T1 đọc số lượ ng hợp đồng hết thờ i hạn
T2 thực cậ p nhật lại tr ạng thái hợp đồng
T1 lấy danh sách hợp đồng hết thờ i hạn
b.
Mô tả:
Mô tả T1:
Đọc số lượ ng hợp đồng hết thờ i hạn
Lấy danh sách hợp đồng hết thờ i hạn
K ết thúc giao tác
Mô tả T2:
Nhận tham số đầu vào (thông tin hợp đồng)
Hệ Quản Trị Cơ SởDữ Liệu 75
Thực hiện cậ p nhật lại tr ạng thái hợp đồng thành hết thờ i hạn
K ết thúc giao tác
c. K ịch bản:
T1
Đọc số lƣợng và lấy danh sách hợ p
đồng hết thờ i hạn
T2
Cập nhật lại tình trạng hợp đồng
Bắt đầu giao tác (Begin Tran)
Đọc số lượ ng hợp đồng hết thờ i hạn
Bắt đầu giao tác (Begin Tran)
Thực hiện cậ p nhật lại tr ạng thái hợ p
đồng
K ết thúc giao tác (Commit Tran)
Lấy danh sách hợp đồng hết thờ i hạn
K ết thúc giao tác (Commit Tran)
d. Nhận xét: Danh sách hợp đồng T1 lấy đượ c sẽ nhiều hơn số lượng đã đọc
trước đó => dữ liệu không nhất quán (lỗi phantom)
10. Trƣờ ng hợ p 10:
a. Tình huống:
Giao tác T1 thực hiện hành vi tìm kiếm Voucher có giá trong khoảng từ
MucGia1 đến MucGia2, trong khi đó giao tác T2 thực hiện cậ p nhật Voucher
(đang có giá trong khoảng từ MucGia1 đến MucGia2) mà sau khi cậ p nhật thì
giá không còn nằm trong khoảng MucGia1 đến MucGia2 nữa
Giao tác T1 đọc số lượng Voucher có giá trong khoảng từ MucGia1 đến
MucGia2
Giao tác T2 thực hiện cậ p nhật giá Voucher
Giao tác T1 load danh sách Voucher tìm đượ c
b.
Mô Tả:
Mô tả T1:
Nhận tham số @MucGia1, @MucGia2 , @Soluong output
Thực hiện lấy số lượ ng sản phẩm
Hệ Quản Trị Cơ SởDữ Liệu 76
Thực hiện lấy danh sách sản phẩm tìm đượ c
K ết thúc giao tác
Mô tả T2:
Nhận tham số các tham số đầu vào (thông tin Voucher)
Thực hiện cậ p nhậtVoucher
K ết thúc giao tác
c. K ịch Bản:
T1
Tìm kiếm Voucher
T2
Thêm (hoặc cập nhật) Voucher
Bắt đầu giao tác (Begin Tran)
Bắt đầu giao tác (Begin Tran)
Đọc số lượ ng Voucher thỏa tiêu chí
Thực hiện cậ p nhật Voucher
K ết thúc giao tác (Commit Tran)
Lấy danh sách Voucher thỏa tiêu chí
K ết thúc giao tác (Commit Tran)
d. Nhận xét: Danh sách Voucher T1 đọc đượ c sẽ ít hơn số lượng mà T1 đã đọc
trước đó, dữ liệu không nhất quán => lỗi Unrepeatable Read
11. Trƣờ ng hợ p 11:
a.
Tình huống:
Giao tác T1 thực hiện hành vi nạ p thẻ ,trong khi T2 đó cũng thực hiện hành vi
nạ p thẻ ( 2 khách hàng khác nhau cùng nạ p chung 1 thẻ cùng 1 thời điểm)
b.
Mô Tả:
Mô tả T1:
Nhận tham số @MaKH, @Series , @Code
Kiểm tra thẻ nạ p hợ p lệ
Nếu thẻ nạ p hợ p lệ, thực hiện lấy Mã tài khoản theo của khách
hàng
Thực hiệnhiện cộng thêm tiền vào tài khoản cho khách hàng
Mô tả T2:
Nhận tham số @MaKH, @Series , @Code
Kiểm tra thẻ nạ p hợ p lệ
Hệ Quản Trị Cơ SởDữ Liệu 77
Nếu thẻ nạ p hợ p lệ, thực hiện lấy Mã tài khoản theo @MaKH
Thực hiện hiện cộng thêm tiền vào tài khoản cho khách hàng
c. K ịch Bản:
T1
Thự c hiện nạp thẻ
T2
Thự c hiện nạp thẻ
Bắt đầu giao tác (Begin Tran)
Bắt đầu giao tác (Begin Tran)
Kiểm tra tính thẻ hợ p lệ của thẻ nạ p
Kiểm tra tính thẻ hợ p lệ của thẻ nạ p
Lấy thông tin thẻ nạ p
Cậ p nhật lại thông tin thẻ nạ p
Cộng thêm tài khoản cho khách hàng
Lấy thông tin thẻ nạ p
Cậ p nhật lại thông tin thẻ nạ p
Cộng thêm tài khoản cho khách hàng
K ết thúc giao tác (Commit Tran)
K ết thúc giao tác (Commit Tran)
d. Nhận Xét: T1 đọc giá trị lỗi thờ i ở đơn vị dữ liệu tr ạng thái do T2 cậ p nhật dẫn đến
T1 nạ p thẻ hợ p lệ nhưng không được công tiền trong tài khoản => lỗi Unrepeatable
Read
4.3 Mô tả gi ải pháp xử lí
1. Trƣờ ng hợ p 1:
a. Giải quyết:
- Sử dụng mức cô lập Repeatable Read và Lock hints (updlock) để giải quyết
- Giải thích :
o Cả 2 giao tác ban đầu sẽ đọc cùng 1 đơn vị dữ liệu(giả sử gọi là đơn vị
dữ liệu A) cùng 1 thời điểm( trên cùng 1 mã Voucher) = > cả 2 giao tác
cùng giữ Shared Lock
o Sử dụng mức cô lập Repeatable Read để cho phép T1 và T2 có thể ghi
trên dữ liệu thỏa điều kiện đang có Shared Lock (trên A)
Hệ Quản Trị Cơ SởDữ Liệu 78
o Sau đó T1 muốn thực hiện ghi trên A cần phải xin Exclusive Lock
nhưng lúc này T2 đang giữ Shared Lock trên A và cũng muốn thực
hiện ghi A nên không thể nhả Shared Lock để hệ quản tr ị cấ p Exclusive
Lock cho T1 được = > 2 giao tác rơi vào tình trạng chờ đợ i lẫn nhau (
chờ bên kia nhả khóa) => xảy ra deadlock.
o Sử dụng Updlock để nâng cấ p từ Shared Lock lên Exclusive Lock, tại 1
thời điểm chỉ có 1 Updlock được phát trên 1 đơn vị dữ liệu nên sẽ đảm
bảo đượ c việc giao tác này có thể nâng cấp Shared Lock lên Exclusive
Lock mà không cần phải chờ giao tác kia nhả khóa.
=> đảm bảo tính đúng đắn cho 2 giao tác thực hiện thành công việc cậ p
nhật thông tin trên cùng 1 Voucher tại cùng 1 thời điểm
b. Xử lý tại Stored Procedure:
T1 T2
create proc sp_GiamGiaKhuyenMai_fix
@MaVoucher int,
@GiaGiam decimal
as
begin
begin tran
set transaction isolation level
repeatable read
declare @GiaKhuyenMai
decimal
select @GiaKhuyenMai =
GiaKhuyenMai from Voucher with
(updlock ) where MaVoucher =
@MaVoucher
set @GiaKhuyenMai =
@GiaKhuyenMai + @GiaGiam
waitfor delay '00:00:15'
create proc sp_GiamGiaKhuyenMai_fix
@MaVoucher int,
@GiaGiam decimal
as
begin
begin tran
set transaction isolation level
repeatable read
declare @GiaKhuyenMai
decimal
select @GiaKhuyenMai =
GiaKhuyenMai from Voucher with
(updlock ) where MaVoucher =
@MaVoucher
Hệ Quản Trị Cơ SởDữ Liệu 79
set @GiaKhuyenMai =
@GiaKhuyenMai + @GiaGiam
waitfor delay '00:00:15'
update Voucher
set GiaKhuyenMai =
@GiaKhuyenMai where MaVoucher =
@MaVoucher
if (@@ERROR <>0)
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
end
go
update Voucher
set GiaKhuyenMai =
@GiaKhuyenMai where MaVoucher =
@MaVoucher
if (@@ERROR <>0)
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
end
go
2. Trƣờ ng hợ p 2:
a. Giải quyết:
- Sử dụng mức cô lâp Repeatable Read và Lock hints (updlock) để giải quyết
- Giải thích :
o Cả 2 giao tác ban đầu sẽ đọc cùng 1 đơn vị dữ liệu (số lượng còn lại của
Voucher, giả sử gọi là đơn vị dữ liệu A) cùng 1 thời điểm ( trên cùng 1
mã Voucher) = > cả 2 giao tác cùng giữ Shared Lock trên A
o Sử dụng cô lập Repeatable Read để cho phép T1 và T2 có thể ghi trên
dữ liệu thỏa điều kiện đang có Shared Lock (dữ liệu A)
o Sau đó T1 muốn thực hiện ghi trên A cần phải xin Exclusive Lock
nhưng lúc này T2 đang giữ Shared Lock và cũng muốn thực hiện ghi
Hệ Quản Trị Cơ SởDữ Liệu 80
trên A nên không thể nhả Shared Lock để hệ quản tr ị cấ p Exclusive
Lock cho T1 được = > 2 giao tác rơi vào tình trạng chờ đợ i lẫn nhau (
chờ bên kia nhả khóa) => xảy ra deadlock.
o Sử dụng Updlock để nâng cấ p từ Shared Lock lên Exclusive Lock, tại 1
thời điểm chỉ có 1 Updlock được phát trên 1 đơn vị dữ liệu nên sẽ đảm
bảo đượ c việc giao tác này có thể nâng cấp Shared Lock lên Exclusive
Lock mà không cần phải chờ giao tác kia nhả khóa.
=>Đảm bảo tính hợ p lệ và nhất quán dữ liệu khi 2 khách hàng cùng mua
1 Voucher tại cùng 1 thời điểm
b. Xử lý tại Stored Procedure:
T1 T2
create proc sp_ThemChiTietDonHang_fix
@MaDonHang int,
@MaVoucher int,
@SoLuong int,
@flag int output -- biến kiểm tra có thêmđượ c hay ko?
as
begin
begin tran
set transaction isolation level
repeatable read
declare @soluongconlai int
select @soluongconlai=SoLuong
from Voucher with(updlock ) where
MaVoucher =@MaVoucher
waitfor delay '00:00:05'
create proc sp_ThemChiTietDonHang_fix
@MaDonHang int,
@MaVoucher int,
@SoLuong int,
@flag int output -- biến kiểm tra có thêmđượ c hay ko?
as
begin
begin tran
set transaction isolation level
repeatable read
declare @soluongconlai int
select @soluongconlai=SoLuong
from Voucher with(updlock ) where
MaVoucher =@MaVoucher
Hệ Quản Trị Cơ SởDữ Liệu 81
waitfor delay '00:00:05'
if (@SoLuong<=@soluongconlai)
begin
declare
@GiaKhuyenMai decimal
set @GiaKhuyenMai =
(select GiaKhuyenMai from Voucher where
MaVoucher = @MaVoucher )
declare @ThanhTien
decimal
set @ThanhTien =
@GiaKhuyenMai * @SoLuong
---cap nhat lai so luong
con lai cua voucher
update Voucher set
SoLuong=@soluongconlai-@SoLuong
where MaVoucher =@MaVoucher
--Them chi tiet don
hang
insert into
ChiTietDonHang(MaDonHang,MaVoucher ,S
oLuong,ThanhTien) values
(@MaDonHang,@MaVoucher ,@SoLuong,
@ThanhTien)
set @flag = 1
end
else -- @SoLuong > @soluongconlai
begin
print N'số lượng Voucher cònlại không đủ '
set @flag = -1
end
if (@@ERROR <>0)
begin
print 'Giao tác bị lỗi'
rollback tran
return
end
commit tran
end
go
if (@SoLuong<=@soluongconlai)
begin
declare
@GiaKhuyenMai decimal
set @GiaKhuyenMai =
(select GiaKhuyenMai from Voucher where
MaVoucher = @MaVoucher )
declare @ThanhTien
decimal
Hệ Quản Trị Cơ SởDữ Liệu 82
set @ThanhTien =
@GiaKhuyenMai * @SoLuong
---cap nhat lai so luong
con lai cua voucher
update Voucher set
SoLuong=@soluongconlai-@SoLuong
where MaVoucher =@MaVoucher
--Them chi tiet don
hang
insert into
ChiTietDonHang(MaDonHang,MaVoucher ,S
oLuong,ThanhTien) values
(@MaDonHang,@MaVoucher ,@SoLuong,
@ThanhTien)
set @flag = 1
end
else -- @SoLuong > @soluongconlai
begin
print N'số lượng Voucher cònlại không đủ '
set @flag = -1
end
if (@@ERROR <>0)
begin
print 'Giao tác bị lỗi'
rollback tran
return
end
commit tran
end
go
3. Trƣờ ng hợ p 3:
a. Giải quyết :
- Sử dụng mức cô lập Read Committed cho giao tác T2
- Giải thích:
o T1 cậ p nhật tỉ lệ khuyến mãi và T2 đọc tỉ lệ khuyến mãi trên cùng 1 Thẻ
nạ p tại cùng 1 thời điểm => T1, T2 cùng thực hiện thao tác trên cùng 1
đơn vị dữ liệu tại cùng 1 thời điểm (giả sử gọi là đơn vị dữ liệu A)
o Khi T1 thực hiện ghi (update lại tỉ lệ khuyến mãi) và chưa kết thúc giao
tác, tức là T1 đang giữ Exclusive Lock trên đơn vị dữ liệu A
o Tiế p theo T2 thực hiện đọc trên đơn vị dữ liệu A, do T2 đang ở mức cô
lập Read Committed nên sẽ phải xin Shared Lock trên A, mà T1 đang giữ
Hệ Quản Trị Cơ SởDữ Liệu 83
Exclusive Lock nên T2 không thể xin được Shared Lock cho đến khi T1
hoàn tất việc ghi trên A(Commit)
o T2 chỉ đọc được A khi T1 đã Commit => đảm bảo tính đúng đắn của dữ
liệu T2 đọc đượ c
b. Xử lý tại Stored Procedure:
T1
Cập nhật tỉ lệ khuyến mãi
T2
Nạp thẻ
create proc sp_KhuyenMai
@MenhGia decimal(18,0),---menh gia dc
ap dung khuyen mai
@TileKM int---tile khuyen mai
AS
BEGIN
begin tran
set transaction isolation level read
uncommitted
UPDATE TheNap SET
TiLeKhuyenMai=@TileKM WHERE
MenhGia=@MenhGia and TrangThai=1
waitfor delay '00:00:12'
create proc sp_NapThe_fix_3
@MaKH int,
@Series varchar (50),
@Code varchar (50),
@flag int output
AS
BEGIN
set transaction isolation level read
committed
EXEC sp_KiemTraTheNap
@Series,@Code,@flag output---kiem tra the
IF(@flag<>0)---neu the hop le
Begin
begin tran
--lay trang thai the nap
declare @TrangThai int
select @TrangThai =
TrangThai from TheNap where Series =
@Series and Code = @Code
waitfor delay '00:00:05'
if (@TrangThai = 1)
begin
declare @matk
int ---lay ra ma tai khoan tu ma khach hang
Hệ Quản Trị Cơ SởDữ Liệu 84
EXEC
sp_LayIDTaiKhoanTheNap @MaKH,@matk
output
---cap nhat bang
the nap ve ngay nap va ma khach hang da nap
the , va ngung hoat dong the
declare
@menhgia decimal(18,0)
declare @tilekm
int
----Lay ra menh
gia va ti le khuyen mai cua the vua nap
Select
@menhgia=MenhGia,@tilekm=TiLeKhuyen
Mai from TheNap where MaTheNap=@flag
set @menhgia =
@menhgia+(@menhgia * @tilekm)/100 --
tinh lai menh gia the nap co khuyen mai
----Thuc hien
cong tien cho tai khoan
EXEC
sp_ThemTientaiKhoanTheNap
@MaKH,@menhgia
Update TheNap
set
MaTaiKhoan=@matk , NgayNap=GETDATE(
),TrangThai=0 where MaTheNap=@flag
end
if (@TileKM <0 or @TiLeKM > 100)
begin
raiserror ('Tỉ lệ không hợ plệ',1,0)
rollback tran
return
end
if (@@ERROR <>0 )
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
END
GO
if (@@ERROR <>0)
begin
print N'Giao tác bị lỗi'
Hệ Quản Trị Cơ SởDữ Liệu 85
rollback tran
return
end
commit tran
END
END
go
4. Trƣờ ng hợ p 4:
a. Giải quyết :
- Sử dụng mức cô lập Read Committed cho giao tác T2
- Giải thích:
o T1 cậ p nhật giá khuyến mãi và T2 đọc giá khuyến mãi( thêm chi tiết đơn
hàng) trên cùng 1 Voucher cùng 1 thời điểm => T1, T2 cùng thực hiện
thao tác trên cùng 1 đơn vị dữ liệu tại cùng 1 thời điểm (giả sử gọi là đơn
vị dữ liệu A)
o Khi T1 thực hiện ghi (update lại giá khuyến mãi) và chưa kết thúc giao
tác, tức là T1 đang giữ Exclusive Lock trên đơn vị dữ liệu A
o Tiế p theo T2 thực hiện đọc (đọc giá khuyến mãi) trên đơn vị dữ liệu A, do
T2 đang ở mức cô lập Read Committed nên sẽ phải xin Shared Lock trên
A, mà T1 đang giữ Exclusive Lock trên A nên T1 không thể xin đượ c
Shared Lock cho đến khi T1 hoàn tất việc ghi trên A(Commit)
o T2 chỉ đọc được A khi T1 đã Commit => đảm bảo tính đúng đắn của dữ
liệu T2 đọc đượ c
b. Xử lý tại Stored Procedure:
T1 T2
create proc sp_SuaVoucher
@MaVoucher int,
@TenVoucher nvarchar (200),
@ThongTinChiTiet nvarchar (200),
@NgayBatDau datetime,
@NgayKetThuc datetime,
@GiaGoc decimal,
@GiaKhuyenMai decimal,
@SoLuong int,
Hệ Quản Trị Cơ SởDữ Liệu 86
@TrangThai int,
@UrlHinh nvarchar (100)
as
begin tran
set transaction isolation level read
uncommitted
update Voucher
set TenVoucher =
@TenVoucher ,ThongTinChiTiet =
@ThongTinChiTiet, NgayBatDau =
@NgayBatDau, NgayKetThuc =
@NgayKetThuc,
GiaGoc =
@GiaGoc,GiaKhuyenMai =
@GiaKhuyenMai,SoLuong =
@SoLuong,TrangThai =
@TrangThai,UrlHinh = @UrlHinh
where MaVoucher =
@MaVoucher
waitfor delay '00:00:15'
create proc
sp_dirty_ThemChiTietDonHang_fix
@MaDonHang int,
@MaVoucher int,
@SoLuong int,
@flag int output
as
begin tran
SET TRANSACTION ISOLATION
LEVEL READ COMMITTED
declare @soluongconlai int
select @soluongconlai=SoLuong
from Voucher where
MaVoucher =@MaVoucher
--waitfor delay '00:00:05'
if (@SoLuong<=@soluongconlai)
begin
declare
@GiaKhuyenMai decimal
set
@GiaKhuyenMai = (select
GiaKhuyenMai from Voucher where
MaVoucher = @MaVoucher )
declare
@ThanhTien decimal
set @ThanhTien =
@GiaKhuyenMai * @SoLuong
---cap nhat lai so
luong con lai cua voucher
update Voucher set
SoLuong=@soluongconlai-@SoLuong
where MaVoucher =@MaVoucher
Hệ Quản Trị Cơ SởDữ Liệu 87
--Them chi tiet don
hang
insert into
ChiTietDonHang(MaDonHang,MaVouch
er ,SoLuong,ThanhTien) values
(@MaDonHang,@MaVoucher ,@SoLuon
g,@ThanhTien)
set @flag = 1
end
else--@SoLuong >
@soluongconlai
begin
print N'Số lượ ng
voucher còn lại không đủ '
set @flag = -1
end
if (@GiaKhuyenMai > @GiaGoc)
begin
raiserror ('Loi',1,0)
rollback tran
return
end
if (@@ERROR <> 0)
begin
print N'Giao tac bi loi'
rollback tran
return
end
commit tran
go
if (@@ERROR <> 0)
begin
print N'Gia tác bị lỗi'
rollback tran
return
end
commit tran
go
5. Trƣờ ng hợ p 5:
a. Giải quyết:
- Sử dụng mức cô lập Repeatable Read và Lock hints (updlock) để giải quyết
- Giải thích :
o Cả 2 giao tác ban đầu sẽ đọc cùng 1 đơn vị dữ liệu cùng 1 thời điểm
(đọc tr ạng thái thẻ nạp trên trên cùng 1 mã Thẻ nạ p ) = > cả 2 giao tác
Hệ Quản Trị Cơ SởDữ Liệu 88
cùng thao tác trên 1 đơn vị dữ liệu (giả sử gọi là A) nên T1,T2 cùng giữ
Shared Lock trên A
o Sử dụng cô lập Repeatable Read để cho phép T1 và T2 có thể ghi trên
dữ liệu thỏa điều kiện đang có Shared Lock (trên A)
o Sau đó T1 muốn thực hiện ghi trên A cần phải xin Exclusive Lock
nhưng lúc này T2 đang giữ Shared Lock và cũng muốn thực hiện ghi
A nên không thể nhả Shared Lock để hệ quản tr ị cấ p Exclusive Lock
cho T1 được = > 2 giao tác rơi vào tình trạng chờ đợ i lẫn nhau ( chờ bên
kia nhả khóa) => xảy ra deadlock.
o Sử dụng cô lập Repeatable Read để cho phép T1 và T2 có thể ghi trên
dữ liệu thỏa điều kiện đang có Shared Lock (trên A)
o Sử dụng Updlock để nâng cấ p từ Shared Lock lên Exclusive Lock, tại 1
thời điểm chỉ có 1 Updlock được phát trên 1 đơn vị dữ liệu nên sẽ đảm
bảo đượ c việc giao tác này có thể nâng cấp Shared Lock lên Exclusive
Lock mà không cần phải chờ giao tác kia nhả khóa.
=> đảm bảo tính hợ p lệ cho trườ ng hợp 2 khách hàng cùng nạ p chung 1
thẻ nạ p tại cùng 1 thời điểm
b. Xử lý tại Stored Procedure:
T1 T2
create proc sp_NapThe_fix
@MaKH int,
@Series varchar (50),
@Code varchar (50),
@flag int output
AS
BEGIN tran
EXEC sp_KiemTraTheNap
@Series,@Code,@flag output---kiem tra the
IF(@flag<>0)---neu the hop le
begin --tran
set transaction isolation level
repeatable read
--lay trang thai the nap
declare @TrangThai int
select @TrangThai = TrangThai
from TheNap with(updlock ) where Series =
@Series and Code = @Code
Hệ Quản Trị Cơ SởDữ Liệu 89
waitfor delay '00:00:05'
create proc sp_NapThe_fix
@MaKH int,
@Series varchar (50),
@Code varchar (50),
@flag int output
AS
BEGIN tran
EXEC sp_KiemTraTheNap
@Series,@Code,@flag output---kiem tra the
IF(@flag<>0)---neu the hop le
begin --tran
set transaction isolation level
repeatable read
--lay trang thai the nap
declare @TrangThai int
select @TrangThai = TrangThai
from TheNap with(updlock ) where Series =
@Series and Code = @Code
waitfor delay '00:00:05'
if (@TrangThai = 1)
begin
declare @matk int ---
lay ra ma tai khoan tu ma khach hang
EXEC
sp_LayIDTaiKhoanTheNap @MaKH,@matk
output
---cap nhat bang the
nap ve ngay nap va ma khach hang da nap
the , va ngung hoat dong the
declare @menhgia
decimal(18,0)
declare @tilekm int
----Lay ra menh gia va
ti le khuyen mai cua the vua nap
Select
@menhgia=MenhGia,@tilekm=TiLeKhuyen
Mai from TheNap where MaTheNap=@flag
set @menhgia =
@menhgia+(@menhgia * @tilekm)/100 --
tinh lai menh gia the nap co khuyen mai
----Thuc hien cong tien
cho tai khoan
EXEC
sp_ThemTientaiKhoanTheNap
@MaKH,@menhgia
Update TheNap set
MaTaiKhoan=@matk , NgayNap=GETDATE
(),TrangThai=0 where MaTheNap=@flag
end
else
Hệ Quản Trị Cơ SởDữ Liệu 90
begin
set @flag=0
end
end
if (@TrangThai = 1)
begin
declare @matk int ---
lay ra ma tai khoan tu ma khach hang
EXEC
sp_LayIDTaiKhoanTheNap @MaKH,@matk
output
---cap nhat bang the
nap ve ngay nap va ma khach hang da nap
the , va ngung hoat dong the
declare @menhgia
decimal(18,0)
declare @tilekm int
----Lay ra menh gia va
ti le khuyen mai cua the vua nap
Select
@menhgia=MenhGia,@tilekm=TiLeKhuyen
Mai from TheNap where MaTheNap=@flag
set @menhgia =
@menhgia+(@menhgia * @tilekm)/100 --
tinh lai menh gia the nap co khuyen mai
----Thuc hien cong tien
cho tai khoan
EXEC
sp_ThemTientaiKhoanTheNap
@MaKH,@menhgia
Update TheNap set
MaTaiKhoan=@matk , NgayNap=GETDATE
(),TrangThai=0 where MaTheNap=@flag
end
else
begin
set @flag=0
end
end
if (@@ERROR <>0)
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
go
if (@@ERROR <>0)
Hệ Quản Trị Cơ SởDữ Liệu 91
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
go
6. Trƣờ ng hợ p 6:
a. Giải quyết:
- Sử dụng mức cô lập Serializable cho giao tác T1 để giải quyết
- Giải thích :
o Ban đầu T1 thực hiện đếm số lượng Voucher có giá từ MucGia1 đến
MucGia2 (giả sử gọi là đơn vị dữ liệu A) => T1 giữ Shared Lock trên A
o T1 đang ở mức cô lập Serializable thì sẽ giữ Shared Lock cho đến hết
giao tác và sẽ ngăn cản việc insert dữ liệu thỏa điều kiện thiết lậ p Shared
Lock (ngăn cản việc insert Voucher có giá từ MucGia1 đến MucGia2 vì
T1 đang giữ Shared Lock trên A). Do vậy, T2 không thể thực hiện việc
insert Voucher có giá từ MucGia1 đến MucGia2 cho đến khi T1 k ết thúc
(Commit)
=>đảm bảo tính đồng nhất dữ liệu
b. Xử lý tại Stored Procedure:
T1
Tìm kiếm
T2
Thêm Voucher
create proc sp_TimKiemTheoGia_fix
@MucGia1 decimal,
@MucGia2 decimal,
@soluong int output
as
begin
begin tran
set transaction isolation level
serializable
set @soluong = (select
COUNT(*) from Voucher where
GiaKhuyenMai between @MucGia1
and @MucGia2 and TrangThai = 1)
waitfor delay '00:00:10'
Hệ Quản Trị Cơ SởDữ Liệu 92
create proc sp_ThemVoucher
@TenVoucher nvarchar (200),
@ThongTinChiTiet nvarchar (200),
@NgayBatDau datetime,
@NgayKetThuc datetime,
@GiaGoc decimal,
@GiaKhuyenMai decimal,
@SoLuong int,
@MaLoaiHinhDV int,
@MaDoanhNghiep int,
@UrlHinh nvarchar (500)
as
begin
begin tran
insert into
Voucher (TenVoucher ,ThongTinChiTiet,
NgayBatDau, NgayKetThuc,GiaGoc,Gia
KhuyenMai,SoLuong,TrangThai,MaLoai
HinhDV,MaDoanhNghiep,UrlHinh)
values(@TenVoucher ,@ThongTinChiTi
et,@NgayBatDau,@NgayKetThuc,@Gia
Goc,@GiaKhuyenMai,@SoLuong,1,@M
aLoaiHinhDV,@MaDoanhNghiep,@Url
Hinh)
select * from Voucher where
GiaKhuyenMai between @MucGia1
and @MucGia2 and TrangThai = 1
if (@@ERROR <>0)
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
end
go
if (@@ERROR <>0)
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
end
go
Hệ Quản Trị Cơ SởDữ Liệu 93
7. Trƣờ ng hợ p 7:
a. Giải quyết:
- Sử dụng mức cô lậpSerializable cho giao tác T1 để giải quyết
- Giải thích :
o Giả sử T1 tìm kiếm Voucher với tên có từ khóa là “abc”
o Ban đầu T1 thực hiện đếm số lượ ng Voucher với tên có từ khóa là “abc”
(giả sử gọi là đơn vị dữ liệu A) => T1 giữ Shared Lock trên A
o T1 đang ở mức cô lập Serializable thì sẽ giữ Shared Lock cho đến hết
giao tác và ngăn cản việc insert dữ liệu thỏa điều kiện thiết lậ p Shared
Lock (ngăn cản việc insert Voucher với tên có từ khóa là “abc” vì T1
đang giữ Shared Lock trên A). Do vậy, T2 không thể thực hiện việc
insert Voucher với tên có từ khóa là “abc”cho đến khi T1 k ết thúc
(Commit)
=>đảm bảo tính đồng nhất dữ liệu
b. Xử lý tại Stored Procedure:
T1
Tìm kiếmT2
Thêm Voucher create proc sp_TimKiemTheoTen_fix
@Ten nvarchar (200),
@soluong int output
as
begin
begin tran
set transaction isolation level
serializable
set @soluong = (select
COUNT(*) from Voucher where
TenVoucher like N'%'+@Ten+'%' and
TrangThai = 1)
waitfor delay '00:00:10'
create proc sp_ThemVoucher
@TenVoucher nvarchar (200),
@ThongTinChiTiet nvarchar (200),
@NgayBatDau datetime,
@NgayKetThuc datetime,
@GiaGoc decimal,
@GiaKhuyenMai decimal,
@SoLuong int,
@MaLoaiHinhDV int,
@MaDoanhNghiep int,
Hệ Quản Trị Cơ SởDữ Liệu 94
@UrlHinh nvarchar (500)
as
begin
begin tran
insert into
Voucher (TenVoucher ,ThongTinChiTiet, N
gayBatDau, NgayKetThuc,GiaGoc,GiaKh
uyenMai,SoLuong,TrangThai,MaLoaiHin
hDV,MaDoanhNghiep,UrlHinh)
values(@TenVoucher ,@ThongTinChiTiet
,@NgayBatDau,@NgayKetThuc,@GiaGo
c,@GiaKhuyenMai,@SoLuong,1,@MaLo
aiHinhDV,@MaDoanhNghiep,@UrlHinh
)
select * from Voucher where
TenVoucher like N'%'+@Ten+'%' and
TrangThai = 1
if (@@ERROR <>0)
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
end
go
if (@@ERROR <>0)
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
end
go
8. Trƣờ ng hợ p 8:
a. Giải quyết:
- Sử dụng mức cô lậpSerializable cho giao tác T1 để giải quyết
- Giải thích :
o Ban đầu T1 thực hiện đếm số lượ ng hợp đồng còn thờ i hạn
(TrangThai=1), (giả sử gọi là đơn vị dữ liệu A) => T1 giữ Shared Lock
trên A
Hệ Quản Trị Cơ SởDữ Liệu 95
o T1 đang ở mức cô lập Serializable thì sẽ giữ Shared Lock cho đến hết
giao tác và ngăn cản việc insert dữ liệu thỏa điều kiện thiết lậ p Shared
Lock (ngăn cản việc insert thêm hợp đồng có TrangThai=1 vì T1 đang
giữ Shared Lock trên A). Do vậy, T2 không thể thực hiện việc insert
thêm hợp đồng có TrangThai=1 cho đến khi T1 k ết thúc (Commit)
=>đảm bảo tính đồng nhất dữ liệu
b. Xử lý tại Stored Procedure:
T1
Lấy danh sách hợp đồng còn thờ ihạn
T2Thêm hợp đồng
create proc
sp_XemDanhSachHopDongConThoiHan
_fix
@maDN int,
@soluong int output
as
begin
begin tran
set transaction isolation level
serializable
set @soluong = (select
COUNT(*) from HopDong where
TrangThai = 1 and MaDoanhNghiep =
@maDN)
waitfor delay '00:00:15'
create proc sp_ThemHopDong
@NgayKy datetime,
@ThoiHan datetime,
@MoTa ntext,
@MaDoanhNghiep int
as
begin
begin tran
insert into
HopDong( NgayKy,ThoiHan,MoTa,TrangT
hai,MaDoanhNghiep)
values(@NgayKy,@ThoiHan,@MoTa,1,@
MaDoanhNghiep)
select * from HopDong where TrangThai
= 1 and MaDoanhNghiep = @maDN
if (@@ERROR <>0 )
begin
Hệ Quản Trị Cơ SởDữ Liệu 96
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
end
go
if (@@ERROR <>0 )
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
end
go
9. Trƣờ ng hợ p 9:
a. Giải quyết:
- Sử dụng mức cô lậpSerializable cho giao tác T1 để giải quyết
- Giải thích :
o Ban đầu T1 thực hiện đếm số lượ ng hợp đồng hết thờ i hạn
(TrangThai=0), (giả sử gọi là đơn vị dữ liệu A) => T1 giữ Shared Lock
trên A
o T1 đang ở mức cô lậ p Serializable thì sẽ giữ Shared Lock cho đến hết
giao tác và ngăn cản việc insert dữ liệu thỏa điều kiện thiết lậ p Shared
Lock (ngăn cản việc insert thêm hoặc update hợp đồng có TrangThai=0
vì T1 đang giữ Shared Lock trên A). Do vậy, T2 không thể thực hiện
việc insert thêm hoặc update hợp đồng có TrangThai=0 cho đến khi T1
k ết thúc (Commit)
=>đảm bảo tính đồng nhất dữ liệu
Hệ Quản Trị Cơ SởDữ Liệu 97
b. Xử lý tại Stored Procedure:
T1
Lấy danh sách hợp đồng hết thờ ihạn
T2
Cập nhật lại trạng thái hợ pđồng (hết hạn)
create proc
sp_XemDanhSachHopDongHetThoiHan_fix
@maDN int,
@soluong int output
as
begin
begin tran
set transaction isolation level
serializable
set @soluong = (select
COUNT(*) from HopDong where TrangThai
= 0 and MaDoanhNghiep = @maDN)
waitfor delay '00:00:05'
create proc sp_CapNhatHopDong
@MaHopDong int
as
begin tran
Declare @TrangThaiCu int
select @TrangThaiCu=
TrangThai from HopDong where
MaHopDong = @MaHopDong
declare @TrangThaiMoi int
if (@TrangThaiCu = 0)
set @TrangThaiMoi = 1
else
set @TrangThaiMoi = 0
update HopDong set TrangThai
= @TrangThaiMoi where MaHopDong
= @MaHopDong
select * from HopDong where TrangThai = 0
and MaDoanhNghiep = @maDN
if (@@ERROR <>0 )
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
end
go
if (@@ERROR <>0 )
Hệ Quản Trị Cơ SởDữ Liệu 98
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
go
10. Trƣờ ng hợ p 10:
a. Giải quyết:
- Sử dụng mức cô lập Repeatable Read cho giao tác T1 để giải quyết
- Giải thích :
o Ban đầu T1 thực hiện đếm số lượng Voucher có giá từ MucGia1 đến
MucGia2 (giả sử gọi là đơn vị dữ liệu A) => T1 giữ Shared Lock trên A
o T1 đang ở mức cô lập Repeatable Readthì sẽ giữ Shared Lock cho đến
hết giao tác
o Do vậy, T2 muốn cậ p nhật lại thông tin Voucher trên đơn vị dữ liệu A
thì phải xin cấp Exclusive Lock trên A, nhưng lúc này T1 đang giữ
Shared Lock nên T2 không thể xin được Exclusive Lock cho đến khi T1
hoàn tất (Commit)
=>đảm bảo tính đồng nhất dữ liệu.
b. Xử lý tại Stored Procedure:
T1
Tìm kiếm
T2
Cập nhật Voucher
create proc
sp_TimKiemTheoGia_unrepeatable_fix
@MucGia1 decimal,
@MucGia2 decimal,
@soluong int output
as
begin
begin tran
set transaction isolation level repeatable
read
set @soluong = (select COUNT(*) from
Voucher where GiaKhuyenMai between
@MucGia1 and @MucGia2 and TrangThai = 0)
waitfor delay '00:00:05'
create proc sp_SuaVoucher
Hệ Quản Trị Cơ SởDữ Liệu 99
@MaVoucher int,
@TenVoucher nvarchar (200),
@ThongTinChiTiet nvarchar (200),
@NgayBatDau datetime,
@NgayKetThuc datetime,
@GiaGoc decimal,
@GiaKhuyenMai decimal,
@SoLuong int,
@TrangThai int,
@UrlHinh nvarchar (100)
as
begin tran
update Voucher
set TenVoucher = @TenVoucher
,ThongTinChiTiet =
@ThongTinChiTiet, NgayBatDau =
@NgayBatDau, NgayKetThuc =
@NgayKetThuc,
GiaGoc =
@GiaGoc,GiaKhuyenMai =
@GiaKhuyenMai,SoLuong =
@SoLuong,TrangThai = @TrangThai,UrlHinh
= @UrlHinh
where MaVoucher = @MaVoucher
waitfor delay '00:00:15'
if (@GiaKhuyenMai > @GiaGoc)
begin
raiserror ('Loi',1,0)
rollback tran
return
end
select * from Voucher where GiaKhuyenMai
between @MucGia1 and @MucGia2 and
TrangThai = 0
if (@@ERROR <>0)
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
end
go
if (@@ERROR <> 0)
begin
print N'Giao tac bi loi'
rollback tran
return
end
commit tran
go
Hệ Quản Trị Cơ SởDữ Liệu 100
11. Trƣờ ng hợ p 11:
c. Giải quyết:
- Sử dụng mức cô lâp Repeatable Read và Lock hints (updlock) để giải quyết
- Giải thích :
o Cả 2 giao tác ban đầu sẽ đọc cùng 1 đơn vị dữ liệu cùng 1 thời điểm
(đọc tr ạng thái thẻ nạp trên trên cùng 1 mã Thẻ nạ p ) = > cả 2 giao tác
cùng thực hiện trên 1 đơn vị dữ liệu (giả sử gọi là A) nên T1,T2 cùng
giữ Shared Lock trên A
o Sử dụng cô lập Repeatable Read để cho phép T1 và T2 có thể ghi trên
dữ liệu thỏa điều kiện đang có Shared Lock (trên A)
o Sau đó T1 muốn thực hiện ghi trên A cần phải xin Exclusive Lock
nhưng lúc này T2 đang giữ Shared Lock và cũng muốn thực hiện ghi
A nên không thể nhả Shared Lock để hệ quản tr ị cấ p Exclusive Lock
cho T1 được = > 2 giao tác rơi vào tình trạng chờ đợ i lẫn nhau ( chờ bên
kia nhả khóa) => xảy ra deadlock.
o Sử dụng Updlock để nâng cấ p từ Shared Lock lên Exclusive Lock, tại 1
thời điểm chỉ có 1 Updlock được phát trên 1 đơn vị dữ liệu nên sẽ đảm
bảo đượ c việc giao tác này có thể nâng cấp Shared Lock lên Exclusive
Lock mà không cần phải chờ giao tác k ia nhả khóa.
=> đảm bảo tính hợ p lệ cho trườ ng hợp 2 khách hàng cùng nạ p chung 1
thẻ nạ p tại cùng 1 thời điểm
d. Xử lý tại Stored Procedure:
T1 T2
create proc sp_NapThe_fix
@MaKH int,
@Series varchar (50),
@Code varchar (50),
@flag int output
AS
BEGIN
EXEC sp_KiemTraTheNap
@Series,@Code,@flag output---kiem tra the
IF(@flag<>0)---neu the hop le
Begin
Hệ Quản Trị Cơ SởDữ Liệu 101
begin tran
set transaction isolation level
repeatable read
--lay trang thai the nap
declare @TrangThai int
select @TrangThai =
TrangThai from TheNap with (updlock )
where Series = @Series and Code = @Code
waitfor delay '00:00:05'
create proc sp_NapThe_fix
@MaKH int,
@Series varchar (50),
@Code varchar (50),
@flag int output
AS
BEGIN
EXEC sp_KiemTraTheNap
@Series,@Code,@flag output---kiem tra the
IF(@flag<>0)---neu the hop le
Begin
begin tran
set transaction isolation level
repeatable read
--lay trang thai the
nap
declare @TrangThai
int
select @TrangThai =
TrangThai from TheNap with (updlock )
where Series = @Series and Code = @Code
waitfor delay '00:00:05'
if (@TrangThai = 1)
begin
declare @matk
int ---lay ra ma tai khoan tu ma khach hang
EXEC
sp_LayIDTaiKhoanTheNap @MaKH,@matk
output
---cap nhat bang
the nap ve ngay nap va ma khach hang da nap
the , va ngung hoat dong the
declare
@menhgia decimal(18,0)
declare @tilekm
int
----Lay ra menh
gia va ti le khuyen mai cua the vua nap
Select
@menhgia=MenhGia,@tilekm=TiLeKhuyen
Mai from TheNap where MaTheNap=@flag
Hệ Quản Trị Cơ SởDữ Liệu 102
set @menhgia =
@menhgia+(@menhgia * @tilekm)/100 --
tinh lai menh gia the nap co khuyen mai
----Thuc hien
cong tien cho tai khoan
EXEC
sp_ThemTientaiKhoanTheNap
@MaKH,@menhgia
Update TheNap
set
MaTaiKhoan=@matk , NgayNap=GETDATE(
), TrangThai=0 where MaTheNap=@flag
end
if (@TrangThai = 1)
begin
declare
@matk int ---lay ra ma tai khoan tu ma
khach hang
EXEC
sp_LayIDTaiKhoanTheNap
@MaKH,@matk output
---cap nhat
bang the nap ve ngay nap va ma khach hang
da nap the , va ngung hoat dong the
declare
@menhgia decimal(18,0)
declare
@tilekm int
----Lay ra
menh gia va ti le khuyen mai cua the vua
nap
Select
@menhgia=MenhGia,@tilekm=TiLeKhuye
nMai from TheNap where
MaTheNap=@flag
set @menhgia
= @menhgia+(@menhgia * @tilekm)/100 --
tinh lai menh gia the nap co khuyen mai
----Thuc hien
cong tien cho tai khoan
EXEC
sp_ThemTientaiKhoanTheNap
@MaKH,@menhgia
Update
TheNap set
MaTaiKhoan=@matk , NgayNap=GETDAT
E(),
TrangThai=0 where MaTheNap=@flag
end
Hệ Quản Trị Cơ SởDữ Liệu 103
Trang Chủ
DS Deal
Theo loại
TheoDoanhNghiệp
Hôm nay
Gần đây
Chi tiếtvoucher
Muavoucher
Giỏ hàng
Thanh toán
Thanh toán thành công
Tìm kiếm Liên Hệ Đăng nhập
Thông tincá nhân
Logout Đổi MK Nạp thẻ
Xem TTnạp thẻ
Xem LSmua hàng
Chi tiết LSmua hàng
Đăng ký
Đăng ký thành công
MuaVoucher
if (@@ERROR <>0)
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
END
END
if (@@ERROR <>0)
begin
print N'Giao tác bị lỗi'
rollback tran
return
end
commit tran
END
END
5 Ứ NG DỤNG DEMO
5.1 Mô tả c ấu trúc ứ ng d ụng
- [Mô tả sitemap của website]
a. Khách Hàng
Hệ Quản Trị Cơ SởDữ Liệu 104
b. Admin
c. Doanh Nghiệp
- [Thông tin của link download project, phim…]
Project : http://www.mediafire.com/download/rc51otc7j9ob7dm/15_PROJECTDEMO.rar
Video demo : http://www.mediafire.com/download/l40djs5504nv0p2/15_VIDEODEMO.rar
Admin
QL Voucher
Xem VCĐang HĐ
Xem VCNgưng HĐ
Giảm giá KM
Xóa/SửaVoucher
QL Thẻ Nạp
Xem thẻchưa dùng
Xem thẻdùng rồi
Thêm thẻmới
Cập nhật tỉlệ KM
QL ĐơnHàng
Đã thanhtoán
Chưa thanhtoán
Thanh toánĐH trả sau
QL DoanhNghiệp
QL hợpđồng
Cài đặt
Thay đổimật khẩu
Logout
DoanhNghiệp
Đổi MậtKhẩu
Quản LýVoucher
DS Voucherđang HĐ
DS Voucherngưng HĐ
DS Voucher _All
ThêmVoucher
Cập nhật giáKM
Xem Thông TinHợp Đồng
Hệ Quản Trị Cơ SởDữ Liệu 105
5.2 Tình huố ng tranh ch ấp đồng th ờ i
[Với m ỗi tình huống tranh ch ấ p chụp hình giao diện của các chức năng gây tranh chấ p
(có dữ liệu test)]
a. Tình huống gây lỗi 1:
Giao tác 1:Admin(admin-admin1702)
Giao tác 2:Doanh nghiệ p (tokyodeli-tokyodeli123)
Hệ Quản Trị Cơ SởDữ Liệu 106
b. Tình huống gây lỗi 2:
Giao tác 1:Khách hàng 1 (huynhtuytram – huynhtuytram760)
Bước 1: Đặt hàng
Bước 2: Thanh toán
Hệ Quản Trị Cơ SởDữ Liệu 107
Giao tác 2:Khách hàng 2 (khuctuandinh-khuctuandinh500)
Bước 1: Đặt hàng
Bước 2: Thanh toán
Hệ Quản Trị Cơ SởDữ Liệu 108
c. Tình huống gây lỗi 3:
Giao tác 1:Khách hàng 1 (huynhtuytram – huynhtuytram760)
Giao tác 2:Admin(admin-admin1702)
Hệ Quản Trị Cơ SởDữ Liệu 109
d. Tình huống gây lỗi 4:
Giao tác 1:Khách hàng 1 (huynhtuytram – huynhtuytram760).
Bước 1: Đặt hàng
Bước 2: Thanh toán
Hệ Quản Trị Cơ SởDữ Liệu 110
Giao tác 2:Admin(admin-admin1702)
Bướ c 1 : Quản lý voucher
Bướ c 2: Sửa voucher
Hệ Quản Trị Cơ SởDữ Liệu 111
e. T ình huống gây lỗi 5:
Giao tác 1:Khách hàng 1 (huynhtuytram – huynhtuytram760).
Giao tác 2:Khách hàng 2 (khuctuandinh-khuctuandinh500)
Hệ Quản Trị Cơ SởDữ Liệu 112
f. Tình huống gây lỗi 6:
Giao tác 1:Khách hàng (vãng lai )
Giao tác 2:Doanh nghiệ p (tokyodeli-tokyodeli123)
Hệ Quản Trị Cơ SởDữ Liệu 113
g. Tình huống gây lỗi 7:
Giao tác 1:Khách hàng (vãng lai )
Giao tác 2:Doanh nghiệ p (tokyodeli-tokyodeli123)
Hệ Quản Trị Cơ SởDữ Liệu 114
h. Tình huống gây lỗi 8:
Giao tác 1:Doanh nghiệ p (tokyodeli-tokyodeli123)
Giao tác 2:Admin(admin-admin1702)
Hệ Quản Trị Cơ SởDữ Liệu 115
i. Tình huống gây lỗi 9:
Giao tác 1:Doanh nghiệ p (tokyodeli-tokyodeli123)
Giao tác 2:Admin(admin-admin1702) (Doanh nghiệ p >>Quản lý hợ p
đồng )
Hệ Quản Trị Cơ SởDữ Liệu 116
j. Tình huống gây lỗi 10:
Giao tác 1:Khách hàng (vãng lai )
Giao tác 2:Admin(admin-admin1702) (Voucher đang hoạtđộng >> Sửa
voucher )
Hệ Quản Trị Cơ SởDữ Liệu 117
k. Tình huống gây lỗi 11:
Giao tác 1:Khách hàng 1 (huynhtuytram – huynhtuytram760)
Giao tác 2:Khách hàng 2 (khuctuandinh-khuctuandinh500)
Hệ Quản Trị Cơ SởDữ Liệu 118
5.3 Bộ dữ liệu test các tình huống
[Mô tả bộ dữ liệu test tình huống tranh ch ấp trên ứng dụng]
1. Trƣờ ng hợ p 1:
a. Bộ dữ liệu test:
- Tài khoản: admin và tokyodeli
- Mã sản phẩm cậ p nhật : 18
- Giá khuyến mãi cậ p nhật:
admin: +10K
tokyodeli: -20K
b. Tình huống gây lỗi:
- Chức năng: Admin và doanh nghiệp cùng cậ p nhật lại giá khuyến mãi của
Voucher có MaVoucher = 18 tại 1 thời điểm.
- Dữ liệu:
Admin: đăng nhập vào tài khoản admin vào quản lí Voucher ->
Sửa giá khuyến mãi. Tìm Voucher có MaVoucher = 18 với Giá
khuyến mãi = 460000. Chọn mức cậ p nhật: +10K.
Doanh nghiệp: đăng nhậ p bằng tài khoản tokyodeli vào Quản lý
Voucher -> Cậ p nhật giá khuyến mãi Voucher. Tìm Voucher có
MaVoucher = 18 với Giá khuyến mãi = 460000. Chọn mức cậ p
nhật: -20K.
- K ết quả: Sau khi admin và doanh nghiệp cùng cậ p nhật giá trên
MaVoucher = 18 thì Giá khuyến mãi hiện tại của admin và tokyodeli là
470000 (nhưng Giá khuyến mãi đúng đắn sau khi cậ p nhật phải là
450000).
2. Trƣờ ng hợ p 2:
a. Bộ dữ liệu test:
- Tài khoản: huynhtuytram và khuctuandinh
- Tên Voucher: Buffet trưa tại Nhà hàng BBQ House
- Số lượ ng – địa chỉ giao hàng – hình thức thanh toán:
Hệ Quản Trị Cơ SởDữ Liệu 119
huynhtuytram: 10 -16 Tôn Thất Tùng Quận 1 – Thanh toán sau khi
nhận hàng
khuctuandinh: 5 – 16 Tôn Đản Quận 4 – Thanh toán sau khi nhận
hàng
b. Tình huống gây lỗi:
- Chức năng: 2 khách hàng huytuytram và khuctuandinh thanh toán
Voucher có tên Buffet trưa tại Nhà hàng BBQ House vớ i số lượng đã
chọn và cậ p nhật lại số lượ ng sản phẩm còn lại của Voucher đó tại cùng
một thời điểm.
- Dữ liệu:
Khách hàng 1: tài khoản huynhtuytram mua Voucher tên Buffet
trưa tại Nhà hàng BBQ House vớ i số lượng là 10 và thanh toán sau
khi nhận hàng
Khách hàng 2: tài khoản khuctuandinh mua Voucher tên Buffet
trưa tại Nhà hàng BBQ House vớ i số lượng là 5 và thanh toán sau
khi nhận hàng
- K ết quả:
Số lượng còn lại của Voucher (Buffet trưa tại Nhà hàng BBQ
House) trước khi 2 khách hàng mua là 90.
Sau khi huynhtuytram và khuctuandinh thanh toán thì số lượng còn
lại của Voucher đó là 85 (nhưng số lượng còn lại đúng đắn phải là
75).
3. Trƣờ ng hợ p 3:
a. Bộ dữ liệu test:
- Tài khoản: admin, huytuytram
- Thẻ nạ p: Series: VC00001 – Code: 201330030
- Cậ p nhật tỉ lệ khuyến mãi: Tỉ lệ: 500% - Mệnh giá: 10000
b. Tình huống gây lỗi:
Hệ Quản Trị Cơ SởDữ Liệu 120
- Chức năng: admin cậ p nhật tỉ lệ khuyến mãi không hợ p lệ và bị hủy giao
tác trong khi đó khách hàng (huynhtuytram) nạ p thẻ có mệnh giá trùng
vớ i mệnh giá admin đang cậ p nhật.
- Dữ liệu:
Admin: đăng nhậ p bằng tài k hoản admin vào quản lí Thẻ Nạ p ->
Cậ p nhật tỉ lệ khuyến mãi. Chọn mệnh giá cậ p nhật là 10000 vớ i tỉ
lệ khuyến mãi 500%.
Khách hàng: đăng nhậ p bằng tài khoản huynhtuytram xem thông
yin cá nhân và chọn chức năng nạ p thẻ vớ i số Series: VC00001 và
Code: 201330030. Mệnh giá thẻ nạp mà huynhtuytram nạp là
10000 trùng vớ i mệnh giá mà admin đang cậ p nhật lại tỉ lệ khuyến
mãi
- K ết quả:
Vì tỉ lệ khuyến mãi > 100 so với quynh định nên tất cả thẻ nạp có
mệnh giá 10000 khi admin cậ p nhật có tỉ lệ khuyến mãi là 0
Số dư tài khoản của huynhtuytram sau khi nạ p thẻ là 60000 (giá trị
đúng đằn của số dư tài khoản của huynhtuytram phải là 10000).
4. Trƣờ ng hợ p 4:
a. Bộ test dữ liệu:
- Tài khoản: admin – huynhtuytram
- Voucher tương tác: Mã: 18 – Tên: Set ăn bê thui(2-3 ngườ i) – Quán bê
thui Bốn Mùa
- Số lượ ng mua: 1
- Thông tin Voucher: Giữa nguyên chỉ thay đổi giá KM từ 470000 =>
800000 (cao hơn giá gốc)
b. Tình huống gây lỗi:
- Chức năng: admin thực hiện cậ p nhật lại giá khuyến mãi của một
Voucher nhưng không hợ p lệ và bị hủy giao tác – khách hàng mua
Vouhcer thanh toán và đọc dữ liệu rác do admin cậ p nhật và lưu vào đơn
hàng.
Hệ Quản Trị Cơ SởDữ Liệu 121
- Dữ liệu:
Admin: đăng nhập vào tài khoản admin vào quản lí Voucher ->
Voucher đang hoạt động chọn doanh nghiệ p tokyodeli, chọn chức
năng sửa của Voucher tên Set ăn bê thui (2-3 ngườ i) – Quán bê
thui Bốn Mùa. Giữ nguyên các giá trị chỉ thay đổi giá khuyến mãi
từ 470000 => 800000.
Khách hàng: đăng nhậ p bằng tài khoản huynhtuytram và tìm mua
Voucher Set ăn bê thui (2-3 ngườ i) – Quán bê thui Bốn Mùa vớ i số
lượng là 1.
- K ết quả:
Vì tỉ lệ KM khi cậ p nhật lớn hơn giá gốc (600000) của Voucher
nên sau khi cậ p nhật giá KM vẫn là 470000.
Trong khi đó, khách hàng huynhtuytram sau khi thanh toán vào
xem lịch sử mua hàng của Voucher Set ăn bê thui (2-3 ngườ i) –
Quán bê thui Bốn Mùa có giá khuyến mãi là 800000. ( Giá khuyến
mãi đúng đắn phải là 470000).
5. Trƣờ ng hợ p 5:
a. Bộ dữ liệu test:
- Tài khoản: kieutrieukien – khuctuandinh
- Thẻ nạ p: Series: VC00002 – Code: 201330031
b. Tình huống gây lỗi:
- Chức năng: 2 khách hàng cùng nạ p 1 thẻ tại 1 thời điểm
- Dữ liệu:
Khách hàng 1: đăng nhậ p bằng tài khoản khuctuandinh vào trang
thông tin cá nhân chọn chức năng Nạ p thẻ vớ i Series: VC00002 –
Code: 201330031.
Khách hàng 2: đăng nhậ p bằng tài khoản kieutrieukien vào trang
thông tin cá nhân chọn chức năng Nạ p thẻ vớ i Series: VC00002 –
Code: 201330031.
Hệ Quản Trị Cơ SởDữ Liệu 122
- K ết quả: cả 2 khách hàng đều nạ p thẻ đượ c vớ i số dư tài khoản là 20000
nhưng thông tin lịch sử nạ p thẻ khách hàng đầu khuctuandinh bị mất (k ết
quả đúng đắn chỉ có 1 khách hàng nạ p thẻ thành công, khách hàng có
giao tác thực hiện trướ c).
6. Trƣờ ng hợ p 6:
a. Bộ dữ liệu test:
- Tài khoản: tokyodeli – khách vãng lai
- Tìm kiếm: mức giá < 100K
- Thêm sản phẩm: Tên: Bạch tuộc nướ ng – Mô tả: Yummy – Ngày bắt đầu:
15/05/2013 – Ngày kết thúc: 30/06/2013 – Giá gốc: 70000 – Giá KM:
40000 – Số lượ ng: 70 – Loại hình: Nhà hàng – quán ăn – Url hình: (tùy
chọn).
b. Tình huống gây lỗi:
- Chức năng: khách hàng tìm kiếm các sản phẩm có mức giá nằm trong
khoảng giá bất k ỳ mà khách hàng chọn, cùng lúc đó doanh nghiệp thêm 1
Voucher có mức giá nằm trong khoảng giá mà khách hàng tìm kiếm.
- Dữ liệu:
Khách hàng: có tài khoản hoặc chưa có tài khoản chọn chức năng
tìm kiếm vớ i mức giá tìm kiếm < 100K
Doanh nghiệp: đăng nhậ p bằng tài khoản tokyodeli vào Quản lí
Voucher -> Thêm Voucher với các thông tin: Tên: Bạch tuộc
nướ ng – Mô tả: Yummy – Ngày bắt đầu: 15/05/2013 – Ngày kết
thúc: 30/06/2013 – Giá gốc: 70000 – Giá KM: 40000 – Số lượ ng:
70 – Loại hình: Nhà hàng – quán ăn – Url hình: (tùy chọn).
- K ết quả: khách hàng sau khi tìm kiếm mức giá Voucher < 100K kết quà
tìm được có số lượng: 12 Voucher nhưng danh mục các Voucher đượ c
show ra lại có đến 13 Voucher (k ết quả tìm kiếm đúng đắn phải là số
lượng voucher tìm kiếm là 12 và danh mục voucher là 12).
7. Trƣờ ng hợ p 7:
a. Bộ dữ liệu test:
- Tài khoản: tokyodeli – khách vãng lai
Hệ Quản Trị Cơ SởDữ Liệu 123
- Tìm kiếm: spa
- Thêm sản phẩm: Tên: Hoa Viên Spa – Mô tả: beauty – Ngày bắt đầu:
15/05/2013 – Ngày kết thúc: 30/06/2013 – Giá gốc: 70000 – Giá KM:
30000 – Số lượ ng: 70 – Loại hình: Spa-Làm đẹ p – Url hình: (tùy chọn)
b. Tình huống gây lỗi:
- Chức năng: khách hàng tìm kiếm các voucher theo tên, cùng lúc đó doanh
nghiệp thêm 1 Voucher có tên chứa chuỗi tìm kiếm của khách hàng.
- Dữ liệu:
Khách hàng: có tài khoản hoặc chưa có tài khoản chọn chức năng
tìm kiếm với tên tìm kiếm spa
Doanh nghiệp: đăng nhậ p bằng tài khoản tokyodeli vào Quản lí
Voucher -> Thêm Voucher với các thông tin: Tên: Hoa Viên Spa –
Mô tả: beauty – Ngày bắt đầu: 15/05/2013 – Ngày kết thúc:
30/06/2013 – Giá gốc: 70000 – Giá KM: 30000 – Số lượ ng: 70 –
Loại hình: Spa-Làm đẹ p – Url hình: (tùy chọn).
- K ết quả: khách hàng sau khi tìm kiếm các voucher có tên spa k ết quà tìm
được có số lượ ng: 6 voucher nhưng danh mục các Voucher đượ c show ra
lại có đến 7 voucher (k ết quả tìm kiếm đúng đắn phải là số lượ ng voucher
tìm kiếm là 6 và danh mục voucher là 6).
8. Trƣờ ng hợ p 8:
a. Bộ dữ liệu test:
- Tài khoản: tokyodeli – admin
- Thêm hợp đồng: Doanh nghiệ p: Tokyodeli – Ngày ký: 17/05/2013 –
Ngày hết hạn: 30/06/2013 – Mô tả: Phải tuân theo mọi quy định của
MuaVoucher.
b. Tình huống gây lỗi:
- Chức năng: doanh nghiệp xem danh sách các hợp đồng còn hạn đã ký kết
vớ i MuaVoucher , cùng lúc đó admin thêm mớ i 1 hợp đồng ký kết vớ i
doanh nghiệp trên.
- Dữ liệu:
Hệ Quản Trị Cơ SởDữ Liệu 124
Doanh nghiệp: đăng nhậ p bằng tài khoản tolyodeli vào quản lí Hợ p
đồng -> Xem thông tin hợp đồng chọn xem Hợp đồng còn hạn.
Admin: đăng nhậ p bằng tải khoản admin vào quản lí Doanh nghiệ p
-> Thêm hợp đồng với các thông tin: Tên doanh nghiệ p: Tokyodeli
– Ngày ký: 17/05/2013 – Ngày hết hạn: 30/06/2013 – Mô tả: Phải
tuân theo mọi quy định của MuaVoucher.
- K ết quả: số lượ ng hợp đồng còn hạn của doanh nghiệp tokyodeli là 2
nhưng danh sách hợp đồng show ra có 3 hợp đồng (k ết quả tr ả về đúng đắn
phải là 2 hợp đồng còn hạn và danh sách hợp đồng là 2).
9. Trƣờ ng hợ p 9:
a. Bộ dữ liệu test:
- Tài khoản: tokyodeli - admin
- Hủy hợp đồng: Doanh nghiệ p: Tokyo Deli - Mã hợ p đồng: 46
b. Tình huống gây lỗi:
- Chức năng: doanh nghiệp xem danh sách các hợp đồng hết hạn đã ký kết
với MuaVoucher, cùng lúc đó admin thêm mớ i 1 hợp đồng ký kết vớ i
doanh nghiệp trên.
- Dữ liệu:
Doanh nghiệp: đăng nhậ p bằng tài khoản tolyodeli vào quản lí Hợ p
đồng -> Xem thông tin hợp đồng chọn xem Hợp đồng hết hạn.
Admin: đăng nhậ p bằng tải khoản admin vào quản lí Doanh nghiệ p
-> Quản lí hợp đồng tìm hợp đồng có mã hợp đồng là 46 của doanh
nghiệ p tokyodeli chọn chức năng kích hoạt hợp đồng từ hết thờ i
hạn chuyển sang còn thờ i hạn
- K ết quả: số lượ ng hợp đồng hết hạn của doanh nghiệp tokyodeli là 1 nhưng
danh sách khi show ra lại không có hợp đồng nào (k ết quả tr ả về đúng đắn
phải là 1 hợp đồng hết hạn và danh sách hợp đồng là 1).
10. Trƣờ ng hợ p 10:
a. Bộ dữ liệu test:
- Tài khoản: Khách vãng lai - Admin
Hệ Quản Trị Cơ SởDữ Liệu 125
- Tìm kiếm: mức giá < 100k
- Sửa Voucher: Tên: Bạch tuộc nướ ng - Mô tả: Yummy - Ngày bắt đầu:
15/05/2013 - Ngày kết thúc: 30/06/2013 - Giá gốc: 700000 - Giá KM:
400000 - Số lượ ng: 70 - Url hình:(tùy chọn)
b. Tình huống gây lỗi:
- Chức năng: khách hàng tìm kiếm các sản phẩm có mức giá nằm trong
khoảng giá bất k ỳ mà khách hàng chọn, cùng lúc đó doanh nghiệ p chỉnh
sửa giá của 1 Voucher có mức giá nằm trong khoảng giá mà khách hàng
tìm kiếm.
- Dữ liệu:
Khách hàng: có tài khoản hoặc chưa có tài khoản chọn chức năng
tìm kiếm vớ i mức giá tìm kiếm < 100K
Doanh nghiệp: đăng nhậ p bằng tài khoản tokyodeli vào Quản lí
Voucher -> Voucher đang hoạt động chọn doanh nghiệ p tokypdeli
và Sửa thông tin Voucher: Tên: Bạch tuộc nướ ng – Mô tả: Yummy
– Ngày bắt đầu: 15/05/2013 – Ngày kết thúc: 30/06/2013 – Giá
gốc: 700000 – Giá KM: 400000 – Số lượ ng: 70 – Url hình: (tùy
chọn).
- K ết quả: khách hàng sau khi tìm kiếm mức giá Voucher < 100K kết quà
tìm được có số lượ ng: 14 voucher nhưng danh mục các voucher đượ c
show ra chỉ 13 Voucher (k ết quả tr ả về đúng đắn có số lượ ng 14 voucher
và danh sách voucher là 14).
11. Trƣờ ng hợ p 11:
a. Bộ dữ liệu test:
- Tài khoản: kieutrieukien - khuctuandinh
- Thẻ nạ p: Series: VC00004 - Code: 201330033
b. Tình huống gây lỗi:
- Chức năng: 2 khách hàng cùng nạ p 1 thẻ tại 1 thời điểm
- Dữ liệu:
Hệ Quản Trị Cơ SởDữ Liệu 126
Khách hàng 1: đăng nhậ p bằng tài khoản kieutrieukien vào trang
thông tin cá nhân chọn chức năng Nạ p thẻ vớ i Series: VC00004 –
Code: 201330033.
Khách hàng 2: đăng nhậ p bằng tài khoản khuctuandinh vào trang
thông tin cá nhân chọn chức năng Nạ p thẻ vớ i Series: VC00004 –
Code: 201330033.
- K ết quả: cả 2 khách hàng đều nạ p thẻ thành công nhưng chỉ có khách
hàng kieutrieukien đượ c cộng tiền vào số dư tài khoản còn khách hàng
khuctuandinh thì không (kết quả đúng đắn chỉ 1 trong hai khách hàng nạ p
thành công, khách hàng có giao tác chạy trướ c).
6 TỔNG K ẾT
K ết quả đạt đượ c:
- Hoàn thành các yêu cầu của đồ án
- Hiểu rõ hơn các trườ ng hợp gây lỗi khi truy xuất đồng thờ i
- Thực hiện fix lỗi thành công trên giao diện
- Giao diện người dùng đẹ p, dễ sử dụng