Chương 6
RÀNG BUỘC TOÀN VẸN
CƠ SỞ DỮ LIỆU
Khoa Công nghệ thông tin – Đại học Sài Gòn
Nội dung chi tiết
1. Khái niệm
1. Khái niệm
•RBTV (Integrety Constraints) xuất phát từ những qui định
hay điều kiện
– Trong thực tế
– Trong mô hình dữ liệu
2. Các đặc trưng của RBTV
• Các thao tác làm thay đổi dữ liệu không nên được thực hiện
một cách tùy tiện vì có thể đưa CSDL đến một tình trạng ‘xấu’
3. Phân loại
4. Cài đặt
•RBTV là một điều kiện được định nghĩa trên một hay nhiều
quan hệ khác nhau
•Các RBTV là những điều kiện bất biến mà mọi thể hiện của
quan hệ đều phải thỏa ở bất kỳ thời điểm nào
Khoa CNTT – Đại học Sài Gòn
3
Khoa CNTT – Đại học Sài Gòn
4
1
2. Các đặc trưng của RBTV
1. Khái niệm
Tại sao cần phải có RBTV?
Bảo đảm tính kết dính của các thành phần cấu tạo nên
CSDL
Bảo đảm tính nhất quán của dữ liệu
Bảo đảm CSDL luôn biểu diễn đúng ngữ nghĩa thực tế
1. Bối cảnh
2. Nội dung
3. Bảng tầm ảnh hưởng
Ví dụ
– Mức lương của một người nhân viên không được vượt
quá trưởng phòng (R1)
– Người quản lý trực tiếp (của một nhân viên) phải là một
nhân viên trong công ty (R2)
– Giới tính của nhân viên chỉ thuộc 1 trong 2 giá trị «Nam»
hoặc «Nữ» RBTV
Khoa CNTT – Đại học Sài Gòn
Khoa CNTT – Đại học Sài Gòn
5
a. Bối cảnh
6
a. Bối cảnh
Ví dụ (R1)
Bối cảnh của một RBTV
Mức lương của một người nhân viên không được
Là những quan hệ có khả năng bị
vượt quá trưởng phòng
• Các phép cập nhật
vi phạm RBTV khi thực hiện các
– Cập nhật lương cho nhân viên
phép cập nhật
– Thêm mới một nhân viên vào một phòng ban
– Bổ nhiệm trưởng phòng cho một phòng ban
• Bối cảnh: NHANVIEN, PHONGBAN
Khoa CNTT – Đại học Sài Gòn
7
Khoa CNTT – Đại học Sài Gòn
8
2
a. Bối cảnh
b. Nội dung
Ví dụ (R2)
Nội dung của một RBTV được phát biểu bằng
Ngôn ngữ tự nhiên
• Dễ hiểu nhưng thiếu tính chặt chẽ
Người quản lý trực tiếp phải là một nhân viên trong
công ty
Ngôn ngữ hình thức
• Cô đọng, chặt chẽ nhưng đôi lúc khó hiểu
• Biểu diễn thông qua
– Đại số quan hệ
– Phép tính quan hệ
– Mã giả (pseudo code)
• Các phép cập nhật
– Cập nhật người quản lý trực tiếp của một nhân
viên
– Thêm mới một nhân viên
• Bối cảnh: NHANVIEN
Khoa CNTT – Đại học Sài Gòn
Khoa CNTT – Đại học Sài Gòn
9
b. Nội dung
b. Nội dung
Ví dụ (R1)
Ví dụ (R2)
10
o Ngôn ngữ tự nhiên
o Ngôn ngữ tự nhiên
• Mức lương của một người nhân viên không được vượt quá
• Người quản lý trực tiếp phải là một nhân viên trong công ty
trưởng phòng
o Ngôn ngữ hình thức
o Ngôn ngữ hình thức
t NHANVIEN ( t.MA_NQL null
t NHANVIEN (
u PHONGBAN ( v NHANVIEN (
u.TRPHG v.MANV
u.MAPHG t.PHG
t.LUONG v.LUONG )))
Khoa CNTT – Đại học Sài Gòn
s NHANVIEN (t.MA_NQL s.MANV ))
11
Khoa CNTT – Đại học Sài Gòn
12
3
c. Bảng tầm ảnh hưởng
Bảng tầm ảnh hưởng một RBTV
Bảng tầm ảnh hưởng
Tên_RB
– Xác định thao tác cập nhật nào cần phải kiểm tra
Thêm
Quan hệ 1
RBTV khi được thực hiện trên quan hệ bối cảnh
Quan hệ 2
Xóa
Sửa
(Thuộc tính)
…
Quan hệ n
Có 2 loại
– Bảng tầm ảnh hưởng cho một RBTV
() Vi phạm RBTV
– Bảng tầm ảnh hưởng tổng hợp
() Không vi phạm RBTV
Khoa CNTT – Đại học Sài Gòn
13
Bảng tầm ảnh hưởng tổng hợp
Khoa CNTT – Đại học Sài Gòn
14
Khoa CNTT – Đại học Sài Gòn
16
3. Phân loại
3.1. Một quan hệ
Ràng buộc 1 Ràng buộc 2
T
X
S
T
X
S
Quan hệ 1
+
-
+
+
-
+
Quan hệ 2
-
+
-
Quan hệ 3
-
-
+
3.1.1. Miền giá trị
Ràng buộc m
…
…
…
T
X
S
3.1.2. Liên bộ
+
-
+
3.1.3. Liên thuộc tính
-
+
-
-
-
+
3.2. Nhiều quan hệ
3.2.1. Tham chiếu
…
Quan hệ n
-
+
-
3.2.2. Liên bộ, liên quan hệ
3.2.3. Liên thuộc tính, liên quan hệ
3.3.4. Thuộc tính tổng hợp
3.3.5. Chu trình
Khoa CNTT – Đại học Sài Gòn
15
4
3.1.1. RBTV - Miền giá trị
Ví dụ 3
oRàng buộc qui định các giá trị cho một thuộc tính
Thời gian tham gia đề án của một nhân viên không quá 60 giờ
• Bối cảnh:
R
A
B
C
D
1
1
5
7
12
3
23
9
PHANCONG
9{,
,
{1..10}
}
• Biểu diễn:
t PHANCONG ( t.THOIGIAN 60 )
oMiền giá trị
• Bảng tầm ảnh hưởng:
• Liên tục
Thêm
R3
• Rời rạc
PHANCONG
Khoa CNTT – Đại học Sài Gòn
Xóa
(THOIGIAN)
Khoa CNTT – Đại học Sài Gòn
17
Ví dụ 4
Sửa
18
3.1.2. RBTV - Liên bộ
Giới tính của nhân viên là ‘Nam’ hoặc ‘Nu’
oSự tồn tại của một hay nhiều bộ phụ thuộc vào sự tồn tại
của một hay nhiều bộ khác trong cùng quan hệ
o Bối cảnh:
NHANVIEN
R
o Biểu diễn:
t NHANVIEN ( t.PHAI {‘Nam’, ‘Nu’} )
hay
A
B
C
D
1
1
5
7
12
3
23
9
DOM(PHAI) {‘Nam’, ‘Nu’}
oTrường hợp đặc biệt
o Bảng tầm ảnh hưởng:
R4
NHANVIEN
Thêm
Xóa
Sửa
• RB khóa chính
(PHAI)
• RB duy nhất (unique)
Khoa CNTT – Đại học Sài Gòn
19
Khoa CNTT – Đại học Sài Gòn
20
5
Ví dụ 5
Ví dụ 6
Tên phòng là duy nhất
Một nhân viên được tham gia tối đa 5 đề án
o Bối cảnh:
o Bối cảnh:
PHONGBAN
PHANCONG
o Biểu diễn:
o Biểu diễn:
t PHANCONG (
∑({ s PHANCONG | s.MA_NVIEN t.MA_NVIEN}) 5 )
t1, t2 PHONGBAN ( t1 t2 t1.TENPHG T2.TENPHG )
o Bảng tầm ảnh hưởng:
o Bảng tầm ảnh hưởng:
Thêm
R5
Xóa
PHONGBAN
Sửa
(TENPHG)
Khoa CNTT – Đại học Sài Gòn
Thêm
R6
PHANCONG
Xóa
(MA_VIEN, SODA)
Khoa CNTT – Đại học Sài Gòn
21
Ví dụ 7
Sửa
22
3.1.3. RBTV - Liên thuộc tính
THIDAU(NGAY, GIO, DOI, SOBAN)
Là ràng buộc giữa các thuộc tính trong cùng quan hệ
Mỗi trận đấu là cuộc thi đấu của đúng 2 đội
• Bối cảnh:
R
THIDAU
• Biểu diễn:
t THIDAU ( !s THIDAU ( t s t.NGAY s.NGAY t.GIO s.GIO ))
A
B
C
D
1
1
5
7
12
3
23
9
• Bảng tầm ảnh hưởng
R7
THIDAU
Thêm
Xóa
Sửa
(NGAY, GIO, DOI)
Khoa CNTT – Đại học Sài Gòn
23
Khoa CNTT – Đại học Sài Gòn
24
6
Ví dụ 8
Ví dụ 9
Một nhân viên không quản lý trực tiếp chính mình
KHOAHOC(MAKH, TENKH, BDAU, KTHUC)
Mỗi khóa học kéo dài ít nhất 3 tháng
• Bối cảnh:
• Bối cảnh:
NHANVIEN
• Biểu diễn:
KHOAHOC
• Biểu diễn:
t NHANVIEN ( t.MA_NQL t.MANV t.MA_NQL null )
t KHOAHOC ( t.KTHUC t.BDAU 3 )
• Bảng tầm ảnh hưởng:
Thêm
R8
NHANVIEN
Xóa
+
• Bảng tầm ảnh hưởng:
Sửa
(MA_NQL)
Khoa CNTT – Đại học Sài Gòn
B
C
D
1
1
5
12
23
9
(BDAU, KTHUC)
Khoa CNTT – Đại học Sài Gòn
26
• Bối cảnh:
cho trước
Sửa
Mọi thân nhân phải có mối quan hệ gia đình với một nhân
viên trong công ty
phải tham chiếu đến giá trị khóa chính của một quan hệ khác
A
Xóa
Ví dụ 10
Giá trị xuất hiện tại các thuộc tính trong một quan hệ nào đó
R
25
3.2.1. RBTV - Tham chiếu
o
Thêm
R9
KHOAHOC
Ở thời điểm thêm 1 bộ vào NHANVIEN, MA_NQL là null
S
E
F
7
7
1
3
3
2
• Biểu diễn:
THANNHAN, NHANVIEN
t THANNHAN ( s NHANVIEN ( s.MANV t.MA_NVIEN ))
hay
THANNHAN.MA_NVIEN NHANVIEN.MANV
• Bảng tầm ảnh hưởng:
Bắt buộc phải tồn tại trước
o Trường hợp đặc biệt
R10
• RB khóa ngoại
Khoa CNTT – Đại học Sài Gòn
27
Thêm
Xóa
NHANVIEN
THANNHAN
Sửa
(MANV)
(MA_NVIEN)
Khoa CNTT – Đại học Sài Gòn
28
7
3.2.1. RBTV - Tham chiếu
3.2.2. RBTV - Liên bộ, liên quan hệ
Còn gọi là phụ thuộc tồn tại
Thường có bối cảnh là hai quan hệ
Là ràng buộc xảy ra giữa các bộ trên nhiều quan hệ khác nhau
R
o Nhưng có trường hợp suy biến thành một quan hệ
o Ví dụ (R2)
• Người quản lý trực tiếp phải là một nhân viên trong công ty
• Bối cảnh: NHANVIEN
• Biểu diễn:
A
B
C
D
1
1
5
7
12
3
23
9
A
B
C
2
7
4
7
2
3
2
10
S
t NHANVIEN ( t.MA_NQL null
s NHANVIEN (t.MA_NQL s.MANV ))
• Bảng tầm ảnh hưởng
Thêm
R2
NHANVIEN
Xóa
Sửa
(MANV, MA_NQL)
Khoa CNTT – Đại học Sài Gòn
Khoa CNTT – Đại học Sài Gòn
29
Ví dụ 11
30
3.2.3. RBTV - Liên thuộc tính, liên quan hệ
HOADON(SOHD, MAKH, NGAYHD)
CTHD(SOHD, MAHH, DGIA, SLG)
Mỗi hóa đơn phải có ít nhất một chi tiết hóa đơn
Là ràng buộc xảy ra giữa các thuộc tính trên nhiều quan hệ
khác nhau
• Bối cảnh:
R
HOADON, CTHD
• Biểu diễn:
t HOADON ( s CTHD ( t.SOHD s.SOHD ))
A
B
C
D
A
B
C
1
1
S
2
7
5
7
4
7
12
3
2
3
23
9
2
10
• Bảng tầm ảnh hưởng:
R11
Thêm
Xóa
HOADON
CTHD
Sửa
(SOHD)
(SOHD)
Khoa CNTT – Đại học Sài Gòn
31
Khoa CNTT – Đại học Sài Gòn
32
8
3.2.4. RBTV - Thuộc tính tổng hợp
Ví dụ 12
Ngày sinh của trưởng phòng phải nhỏ hơn ngày nhận chức
• Bối cảnh:
• Là thuộc tính có giá trị được tính toán từ các thuộc
NHANVIEN, PHONGBAN
tính khác
• Biểu diễn:
t PHONGBAN ( s NHANVIEN (
s.MANV t.TRPHG
t.NG_NHANCHUC s.NGSINH ))
oKhi CSDL có thuộc tính tổng hợp
• RBTV bảo đảm quan hệ giữa thuộc tính tổng hợp và
các thuộc tính nguồn
• Bảng tầm ảnh hưởng:
Thêm
R12
oThuộc tính tổng hợp
Xóa
Sửa
NHANVIEN
+
(NGSINH, MANV)
PHONGBAN
(NG_NHANCHUC, TRPHG)
Khoa CNTT – Đại học Sài Gòn
Khoa CNTT – Đại học Sài Gòn
33
Ví dụ 13
3.2.5. RBTV – Chu trình
PHONGBAN(TENPHG, MAPHG, TRPHG, NG_NHANCHUC, SO_NV)
Lược đồ CSDL có thể được biểu diễn bằng đồ thị
Số nhân viên của một phòng ban phải bằng tổng số lượng
nhân viên thuộc phòng đó
• Bối cảnh:
o Đỉnh
• Quan hệ
• Thuộc tính
• Biểu diễn: NHANVIEN, PHONGBAN
Tên thuộc tính
• Đường nối một đỉnh quan hệ với một đỉnh thuộc tính trong
lược đồ CSDL
Tên quan hệ
• Bảng tầm ảnh hưởng:
Thêm
Tên quan hệ
o Cạnh
t PHONGBAN (
t.SO_NV { s NHANVIEN | s.PHG t.MAPHG} )
R13
Xóa
34
Tên thuộc tính
Chu trình
Sửa
NHANVIEN
(PHG)
PHONGBAN
(SO_NV, MAPHG)
Khoa CNTT – Đại học Sài Gòn
o Đồ thị xuất hiện đường đi khép kín ~ Lược đồ CSDL có
chu trình
35
Khoa CNTT – Đại học Sài Gòn
36
9
Ví dụ 14
Ví dụ 14
Nhân viên chỉ được phân công vào các đề án do phòng
ban của mình phụ trách
Nhân viên chỉ được phân công vào các đề án do phòng
ban của mình phụ trách
• Bối cảnh:
NHANVIEN
MANV, MADA
NHANVIEN, DEAN, PHANCONG
• Biểu diễn:
PHG=PHONG
NVDA NHANVIEN
PHG=PHONG DEAN
t PHANCONG ( s NVDA (
t.MA_NVIEN s.MANV t.MADA s.SODA ))
DEAN
• Bảng tầm ảnh hưởng:
MANV=MA_NVIEN
MA_NVIEN, SODA
SODA=MADA
PHANCONG
Khoa CNTT – Đại học Sài Gòn
R14
NHANVIEN
Thêm
Xóa
Sửa
DEAN
(MADA,PHONG)
PHANCONG
(MA_NVIEN,SODA)
37
4. Cài đặt
(MANV,PHG)
Khoa CNTT – Đại học Sài Gòn
38
Khoa CNTT – Đại học Sài Gòn
40
4. Cài đặt
oCác RBTV được cài đặt bởi
1. Assertion
• Primary key
2. Trigger
• Foreign key
3. Transaction (giao tác)
• Check contraint
4. Stored Procedure (thủ tục lưu trữ nội)
• Assertion
• Trigger
• Transaction
Khoa CNTT – Đại học Sài Gòn
39
10
Sửa bài
Sửa bài
•PHONGBAN (MAPHG, TENPHG, TRPHG, NGNC)
•PHONGBAN (MAPHG, TENPHG, TRPHG, NGNC)
Mỗi phòng ban: tên, mã phòng duy nhất. Trưởng phòng là nhân viên của công ty. Ngày
nhận chức phải lớn hơn ngày sinh của nhân viên đó.
Mỗi phòng ban: tên, mã phòng duy nhất. Trưởng phòng là
nhân viên của công ty. Ngày nhận chức phải lớn hơn ngày
sinh của nhân viên đó.
•DIADIEM_PHG (MAPHG, DIADIEM)
Mỗi phòng ban có thể có nhiều địa điểm khác nhau.
•DEAN (MADA, TENDA, DDIEM_DA, PHONG, NGBD_DK, NGKT_DK)
Mỗi đề án: tên, mã duy nhất. Ngày bắt đầu phải nhỏ hơn ngày kết thúc dự kiến của đề án.
•NHANVIEN (MANV, HONV, TENLOT, TENNV, NGSINH, PHAI, DCHI, MA_NQL,
PHONG, LUONG)
t1, t2 PHONGBAN ( t1 t2 t1.TENPHG t2.TENPHG )
2. Trưởng phòng là NV của công ty:
Phái phải là nam hoặc nữ. Lương của nhân viên phải nhỏ hơn lương của người quản lý
•PHANCONG (MANV, MADA, THOIGIAN)
t PHONGBAN ( t1 t2 t1.TENPHG t2.TENPHG )
Mỗi nhân viên chỉ có thể tham gia không quá 3 đề án và các đề án phải do phòng của
mình chủ trì. Tổng thời gian tham gia đề án của mỗi NV không quá 40h
3. Ngày nhận chức phải lớn hơn ngày sinh:
•THANNHAN (MANV, MATN, TENTN, PHAI, NGSINH, QUANHE)
t PHONGBAN ( s NHANVIEN ( s.MANV t.TRPHG
t.NGNC s.NGSINH ))
Mỗi thân nhân phải có quan hệ với nhân viên trong công ty, và chỉ có thể là quan hệ Vo
chong hoặc Con
Khoa CNTT – Đại học Sài Gòn
1. Tên phòng ban duy nhất:
Khoa CNTT – Đại học Sài Gòn
41
Sửa bài
42
Sửa bài
•DEAN (MADA, TENDA, DDIEM_DA, PHONG,
NGBD_DK, NGKT_DK)
•NHANVIEN (MANV, HONV, TENLOT, TENNV,
NGSINH, PHAI, DCHI, MA_NQL, PHONG, LUONG)
Mỗi đề án: tên, mã duy nhất. Ngày bắt đầu phải nhỏ hơn
ngày kết thúc dự kiến của đề án.
Phái phải là nam hoặc nữ. Lương của nhân viên phải nhỏ
hơn lương của người quản lý
4. Tên đề án duy nhất:
6. Phái phải là nam hoặc là nữ:
t NHANVIEN ( t.PHAI {‘Nam’, ‘Nu’} )
t1, t2 DEAN ( t1 t2 t1.TENDA t2.TENDA )
7. Lương NV nhỏ hơn lương của người quản lý:
5. Ngày bắt đầu nhỏ hơn ngày kết thúc:
t DEAN ( t.NGBD_DK < t.NGKT_DK )
t NHANVIEN ( s NHANVIEN ( t.MA_NQL = s.MANV t.LUONG < s.LUONG ))
Khoa CNTT – Đại học Sài Gòn
43
Khoa CNTT – Đại học Sài Gòn
44
11
Sửa bài
Sửa bài
•PHANCONG (MANV, MADA, THOIGIAN)
Mỗi nhân viên chỉ có thể tham gia không quá 3 đề án và các đề án
phải do phòng của mình chủ trì. Tổng thời gian tham gia đề án của
mỗi NV không quá 40h
8. NV tham gia không quá 3 đề án:
•THANNHAN (MANV, MATN, TENTN, PHAI,
NGSINH, QUANHE)
Mỗi thân nhân phải có quan hệ với nhân viên trong công
ty, và chỉ có thể là quan hệ Vo chong hoặc Con
11. Thân nhân phải có quan hệ với NV:
t PHANCONG ( ∑({ s PHANCONG | s.MANV t.MANV}) 3 )
t THANNHAN (s NHANVIEN ( s.MANV t.MANV))
9. NV tham gia đề án do phòng mình chủ trì:
NVDA NHANVIEN PHG=PHONG DEAN
t PHANCONG ( s NVDA ( t.MANV s.MANV t.MADA s.SODA ))
12. Quan hệ chỉ có thể là Vo chong hoặc Con:
t THANNHAN ( t.QUANHE {‘Vochong’, ‘Con’} )
10. Tổng thời gian tham gia đề án không quá 40h
t PHANCONG (s PHANCONG ( s.MANV t.MANV ∑ s.THOIGIAN <=40 ))
Khoa CNTT – Đại học Sài Gòn
Khoa CNTT – Đại học Sài Gòn
45
Bài tập – Xác định PK, FK, RBTV
46
a. Assertion
•KHOA (MAKHOA, TENKHOA, NAMTHANHLAP)
oLà một biểu thức SQL luôn mang giá trị TRUE tại mọi thời
điểm
Tên khoa không trùng lắp nhau.
•SVIEN (MASV, TEN, NAM, MAKH)
Người sử dụng cần cho biết cái gì phải đúng
Năm học là một trong các năm từ 1 đến 4.
•MHOC ( MAMH,TENMH, TINCHI, MAKH)
oCú pháp
Tên môn học không trùng lắp nhau. Số tín chỉ từ 1 đến 5
•DKIEN (MAMH, MAMH_TRUOC)
CREATE ASSERTION <Tên_assertion> CHECK (<Điều_kiện>)
Mỗi môn học có ít nhất một môn học bắt buộc phải học trước
•HPHAN (MAHP, MAMH, HOCKY, NAM, GV)
DROP ASSERTION <Tên_assertion>
Mỗi học phần chỉ có thể mở tối đa 2 học kì trong cùng 1 năm học
•KQUA (MASV, MAHP, DIEM)
Sinh viên chỉ theo học các khóa học mở môn học thuộc về khoa mà sinh viên đang
theo học. Ứng với một khóa học mà sinh viên theo học, sinh viên có một điểm số
duy nhất (DIEM) từ 0 đến 10 điểm
Khoa CNTT – Đại học Sài Gòn
47
oRất khó cài đặt Assertion hiệu quả, do đó một số HQT
không có Assertion.
Khoa CNTT – Đại học Sài Gòn
48
12
Ví dụ 12
Ví dụ 15
Ngày sinh của trưởng phòng phải nhỏ hơn ngày nhận chức
Lương của trưởng phòng phải lớn hơn 50000
CREATE ASSERTION R12 CHECK
CREATE ASSERTION R15 CHECK
(
(
NOT EXISTS (
NOT EXISTS (
SELECT *
SELECT *
FROM NHANVIEN, PHONGBAN
FROM NHANVIEN, PHONGBAN
WHERE MANV=TRPHG
WHERE MANV=TRPHG
AND NGSINH > NGAY_NHANCHUC )
AND LUONG < 50000 )
)
)
Khoa CNTT – Đại học Sài Gòn
Khoa CNTT – Đại học Sài Gòn
49
50
Ví dụ 16
Ví dụ 15
Lương của trưởng phòng phải lớn hơn 50000
Số lượng nhân viên của mỗi phòng ban không quá 20
người
ALTER TABLE PHONGBAN
(
Check Constraint
CREATE ASSERTION R16 CHECK
TENPB VARCHAR(20) UNIQUE,
(
MAPHG INT NOT NULL,
20 >= ALL ( SELECT COUNT(MANV)
TRPHG CHAR(9),
FROM NHANVIEN
NG_NHANCHUC DATETIME,
GROUP BY PHG )
CONSTRAINT CHK_PB_LUONGTRPHG CHECK (
)
TRPHG NOT IN (SELECT MANV FROM NHANVIEN
WHERE LUONG < 50000 ))
)
Khoa CNTT – Đại học Sài Gòn
51
Khoa CNTT – Đại học Sài Gòn
52
13
Ví dụ 16
Số lượng nhân viên của mỗi phòng ban không quá 20
người
Check Constraint
ALTER TABLE NHANVIEN ADD
CONSTRAINT CHK_NV_SLNVPB CHECK
(
ASSERTION HAY CHECK CONSTRAINT ?
20 >= ALL ( SELECT COUNT(MANV) FROM NHANVIEN
GROUP BY PHG )
)
Khoa CNTT – Đại học Sài Gòn
54
53
b. Trigger
b. Trigger
Là tập hợp các lệnh được thực hiện tự động khi xuất hiện
một biến cố nào đó
thêm
xóa
sửa
trước
sau
Cú pháp
CREATE TRIGGER <Tên_trigger>
AFTER|BEFORE
INSERT|UPDATE|DELETE
ON <Tên_bảng>
REFERENCING
Biến
cố
NEW ROW|TABLE AS <Tên_1>
OLD
ROW|TABLE AS <Tên_2>
FOR EACH ROW | FOR EACH STATEMENT
giá trị
mới giá
trị cũ
Điều kiện
Không
thỏa
Thông báo lỗi
Thỏa
WHEN (<Điều kiện>)
Tập hợp các lệnh
<Tập_lệnh_SQL>
row-level
statementlevel
Khoa CNTT – Đại học Sài Gòn
DROP TRIGGER <Tên_trigger>
55
Khoa CNTT – Đại học Sài Gòn
56
14
Trigger – FOR
Ví dụ 15
Lương của trưởng phòng phải lớn hơn 50000
CREATE TRIGGER TênTrigger ON Tên Bảng
CREATE TRIGGER TR_PB_UPD
FOR Hành động cập nhật
AFTER UPDATE OF TRPHG ON PHONGBAN
AS
REFERENCING
Khai báo biến …
NEW ROW AS NewTuple
FOR EACH ROW
Nhận dữ liệu từ bảng trung gian …
WHEN (50000 >= (SELECT LUONG
Các kiểm tra ….
FROM NHANVIEN
WHERE MANV=NewTuple.TRPHG)
GO
)
Thông báo lỗi cho người dùng
Khoa CNTT – Đại học Sài Gòn
Khoa CNTT – Đại học Sài Gòn
57
Ví dụ 15 – cách 1
Ví dụ 15 – cách 2
Lương của trưởng phòng phải lớn hơn 50000
Lương của trưởng phòng phải lớn hơn 50000
CREATE TRIGGER TR_PB_UPD
CREATE TRIGGER TR_PB_UPD
AFTER UPDATE OF TRPHG ON PHONGBAN
AFTER UPDATE OF LUONG ON NHANVIEN
REFERENCING
REFERENCING
58
NEW ROW AS NewTuple
NEW ROW AS NewTuple
OLD ROW AS OldTuple
OLD ROW AS OldTuple
FOR EACH ROW
FOR EACH ROW
WHEN (NewTuple.LUONG <= 50000 AND NewTuple.MANV IN (
WHEN (50000 >= (SELECT LUONG
SELECT TRPHG FROM PHONGBAN ))
FROM NHANVIEN
WHERE MANV=NewTuple.TRPHG))
UPDATE NHANVIEN
SET LUONG=OldTuple.LUONG
UPDATE PHONGBAN
WHERE LUONG=NewTuple.LUONG
SET TRPHG=OldTuple.TRPHG
WHERE TRPHG=NewTuple.TRPHG
Khoa CNTT – Đại học Sài Gòn
59
Khoa CNTT – Đại học Sài Gòn
60
15
c. Transaction
c. Transaction
Là tập các lệnh thực hiện một xử lý nào đó trong một ứng
dụng CSDL, sao cho
oGiao tác phải đảm bảo
• Hoặc là tất cả các lệnh đều được thực hiện thành công
• Tính nguyên tố (atomicity)
• Hoặc là không có lệnh nào được thực hiện
• Tính nhất quán của CSDL (consistency)
Các RBTV không bị vi phạm
Ví dụ: xử lý chuyển tiền trong ngân hàng
Trong khi thực hiện giao tác
Giao tác Chuyển_tiền
Trước và sau khi thực hiện giao tác
Giảm tiền trong tài khoản người gửi
Tăng tiền trong tài khoản người nhận
Nếu tất cả đều thành công thì hoàn tất giao tác
Ngược lại quay lui giao tác
Cuối giao tác
Khoa CNTT – Đại học Sài Gòn
Khoa CNTT – Đại học Sài Gòn
61
Ví dụ 7
62
Ví dụ 7
Mỗi trận đấu là cuộc thi đấu của đúng 2 đội
Giao tác Xóa_trận_đấu(ngay, gio)
Với mọi sTHIDAU (s.NGAYngay s.GIOgio)
Giao tác Thêm_trận_đấu(t, s)
Xóa s khỏi THIDAU
Thêm t vào THIDAU
Thêm s vào THIDAU
Cuối với mọi
Nếu có một thao tác thất bại thì
Nếu có một thao tác thất bại thì
Quay lui giao tác
Quay lui giao tác
Ngược lại
Ngược lại
Hoàn tất giao tác
Hoàn tất giao tác
Cuối nếu
Cuối nếu
Cuối giao tác
Cuối giao tác
Khoa CNTT – Đại học Sài Gòn
63
Khoa CNTT – Đại học Sài Gòn
64
16
Ví dụ 11
Ví dụ 11
Mỗi hóa đơn phải có ít nhất một chi tiết hóa đơn
Giao tác Thêm_hóa_đơn
Giao tác Thêm_hóa_đơn
Thêm HOADON
Thêm HOADON
Thêm chi tiết thứ 1 vào CTHD
Thêm chi tiết thứ 1 vào CTHD
Thêm chi tiết thứ 2 vào CTHD
Thêm chi tiết thứ 2 vào CTHD
…
…
Nếu có một thao tác thêm thất bại thì
Nếu có một thao tác thêm thất bại thì
Quay lui giao tác
Quay lui giao tác
Ngược lại
Ngược lại
Hoàn tất giao tác
Hoàn tất giao tác
Cuối nếu
Cuối nếu
Cuối giao tác
Cuối giao tác
Khoa CNTT – Đại học Sài Gòn
Khoa CNTT – Đại học Sài Gòn
65
d. Stored Procedure
Ví dụ 7
Các DBMS thương mại cung cấp cách thức lưu trữ các
hàm hay thủ tục
Mỗi trận đấu là cuộc thi đấu của đúng 2 đội
66
CREATE PROCEDURE Thêm_trận_đấu
t THIDAU , s THIDAU
AS
begin tran
Thêm t vào THIDAU
If @@error<>0 rollback tran
– Được lưu trữ trong lược đồ CSDL
– Được sử dụng trong các câu lệnh SQL
Cú pháp
Thêm s vào THIDAU
If @@error<>0 rollback tran
commit tran
CREATE PROCEDURE <Tên_thủ_tục> <DS_tham_số>
AS
GO
Khai báo biến cục bộ
EXEC Thêm_trận_đấu x, y
Thân chương trình
GO
EXEC <Tên_thủ_tục> <DS_ tham_số>
Khoa CNTT – Đại học Sài Gòn
67
Khoa CNTT – Đại học Sài Gòn
68
17
Nhận xét
DBMS sẽ kiểm tra RBTV
• Sau khi một thao tác cập nhật diễn ra trên CSDL
• Cuối mỗi giao tác
Thank you!
Nên cài đặt RBTV ở đâu ???
• DBMS
• Application
Trigger quá nhiều hệ thống chậm chạm
Stored Procedure hiệu quả cao
Khoa CNTT – Đại học Sài Gòn
69
18