You are on page 1of 4

Cho CSDL sau:

TAIKHOAN (MATK, SODU, SODUCO, SODUNO, MAKH)


KHACHANG (MAKH, TENKH, ĐCKH, ĐTKH)
GIAODICH (MAGD, NGAYGD, TKNO, TKCO, SOTIEN)
Trong đó, SODU cho biết giá trị của tài khoản, được tính từ SODUCO và SODUNO. Mỗi khi có một giao dịch
diễn ra (gửi hoặc rút hoặc chuyển tiền) thì sẽ có 1 dòng dữ liệu được thêm vào bảng GIAODICH. TKNO hoặc
TKCO có thể mang giá trị NULL tùy vào loại giao dịch.
1. Nếu là giao dịch gửi tiền thì TKNO mang giá trị NULL, TKCO là tài khoản được gửi tiền vào.
2. Nếu là giao dịch rút tiền thì TKCO mang giá trị NULL, TKNO là tài khoản bị rút tiền ra.
3. Trường hợp giao dịch là chuyển tiền thì TKNO và TKCO đều khác NULL.
Giả sử các giao dịch đều tuân theo ràng buộc: Mỗi giao dịch làm việc với một số tiền không được nhỏ hơn một giá
trị MIN hoặc không sinh ra tài khoản có số dư nhỏ hơn một giá trị MIN.
Hãy viết (bằng mã giả) các giao tác sau:
i) Gửi tiền.
ii) Rút tiền.
iii) Chuyển tiền.
Guitien(@matk, @sotien)
Begin tran
1. Neu khong ton tai @matk then
2. Begin
a. Bao loi
b. Rollback tran
End
3. Neu @sotien < MIN then
4. Begin
a. Bao loi
b. Rollback tran
End
5. INSERT INTO GIAODICH
VALUES(MAGD,GETDATE(),NULL,@MATK,@SOTIEN)

6. UPDATE TAIKHOAN
SET SODUCO = SODUCO + @SOTIEN
WHERE MATK = @MATK

7. UPDATE TAIKHOAN
SET SODU = SODUCO – SODUNO
WHERE MATK = @MATK
Commit tran
Ruttien(@matk, @sotien)
Begin tran
1. Neu khong ton tai @matk then
2. Begin
a. Bao loi
b. Rollback tran
End
3. Set @sd = SELECT SODU FROM TAIKHOAN WHERE MATK =
@MATK
4. Neu (@sotien < MIN) or (@sd-@sotien < MIN) then
5. Begin
a. Bao loi
b. Rollback tran
End
6. INSERT INTO GIAODICH
VALUES(MAGD,GETDATE(),@matk, NULL, @sotien)

7. UPDATE TAIKHOAN SET SODUNO = SODUNO + @sotien


WHERE MATK = @matk

8. UPDATE TAIKHOAN SET SODU = SODUCO – SODUNO


WHERE MATK = @matk

Commit tran
Chuyentien (@fromtk, @totk, @sotien)
Begin tran
1. Neu khong ton tai @fromtk hoac @totk hoac
(@sotien < MIN) then
2. Begin
a. Bao loi
b. Rollback tran
End
3. Set @sd = SELECT SODU FROM TK WHERE MATK =
@fromtk
4. Neu (@sd-@sotien < MIN) then
5. Begin
a. Bao loi
b. Rollback tran
End
6. INSERT INTO GIAODICH (MAGD, GETDATE(),@fromtk,
@totk,@sotien)
7. UPDATE TAIKHOAN SET SODUNO = SODUNO + @sotien
WHERE MATK = @fromtk
8. UPDATE TAIKHOAN SET SODUCO = SODUCO + @sotien
WHERE MATK = @totk
9. UPDATE TAIKHOAN SET SODU = SODUCO - SODUNO
WHERE MATK = @fromtk
10. UPDATE TAIKHOAN SET SODU = SODUCO - SODUNO
WHERE MATK = @totk
Commit tran

You might also like