Nội'dung'chi'@ết'
! Khái&niệm" ! Các"đặc"trưng"của"RBTV" ! Phân"loại" ! Cài"đặt"
CHƯƠNG'7'' Ràng'buộc'toàn'vẹn'(Integrety' Constraints)'
Slide&bài&giảng&môn&Cơ&sở&dữ&liệu&& ©"Bộ"môn"Hệ"Thống"Thông"Tin"/"Khoa"Công"Nghệ"Thông"Tin"/"Trường"Đại"học"Khoa"học"Tự"nhiên"""
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
2&
Khái'niệm'
Nội'dung'chi'@ết'
! RBTV"(Integrety"Constraints)"được"phát"hiện"từ"ngữ"nghĩa" của"dữ"liệu"hoặc"thể"hiện"của"dữ"liệu"trong"thực"tế"(1)."
! Khái"niệm"và"phân"loại" ! Các&đặc&trưng&của&RBTV&
! RBTV"nhằm"đảm"bảo"(1):"
! Tính"đúng"của"dữ"liệu"và"mô"hình"dữ"liệu." ! Ngữ"nghĩa"của"CSDL"
- Bối"cảnh" - Nội"dung" - Bảng"tầm"ảnh"hưởng"
! Khi"RBTV"được"khai"báo,""mọi"thể"hiện"của"quan"hệ"đều"
! Phân"loại" ! Cài"đặt"
phải"thỏa"các"RBTV"này"ở"bất"kỳ"thời"điểm"nào"(1)." ! RBTV"được"phát"hiện"và"khai"báo"bởi"các"thiết"kế"viên"
trong"quá"trình"thiết"kế"dữ"liệu"(1)."
! RBTV"được"định"nghĩa"trên"một"quan"hệ"hoặc"liên"quan"
đến"nhiều"quan"hệ"(1)."
" (1)""Trích"từ"sách:"Fundamental*of*Databases*4th*,*Ramez*Elmasri*&*Shamkant*B.*Navathe,*ISBN*
0A321A12226A7,*2003"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
3&
4&
Bối'cảnh'
Bối'cảnh'(I)'
! Bối"cảnh"của"một"RBTV"
! Ví"dụ"(R2)"
- Người"quản"lý"trực"tiếp"(của"một"giáo"viên)"phải"là"một"giáo"
- Là"những"quan"hệ"có"khả"năng"bị"vi"phạm"RBTV"khi"thực" hiện"các"phép"cập"nhật"dữ"liệu"(thêm,"xóa,"sửa"dữ"liệu)"
viên"trong"cùng"bộ"môn" • Các"phép"cập"nhật""
! Ví"dụ"(R1)"
– Cập"nhật"người"quản"lý"trực"tiếp"của"một"giáo"viên" – Thêm"mới"một"giáo"viên"
- Mức"lương"của"một"người"giáo"viên"không"được"vượt"quá"
• Bối"cảnh:"GIAOVIEN"
trưởng"bộ"môn" • Các"phép"cập"nhật""
– Cập"nhật"lương"cho"giáo"viên" – Thêm"mới"một"giáo"viên"vào"một"bộ"môn" – Bổ"nhiệm"trưởng"bộ"môn"cho"một"bộ"môn"
• Bối"cảnh:"GIAOVIEN,"BOMON"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
5&
6&
Nội'dung'
Nội'dung'(I)'
! Nội"dung"của"một"RBTV"được"phát"biểu"bằng"
! Ví"dụ"(R1)"
- Ngôn"ngữ"tự"nhiên"
- Ngôn"ngữ"tự"nhiên"
• Dễ"hiểu"nhưng"thiếu"tính"chặt"chẽ"
• Mức"lương"của"một"người"giáo"viên"không"được"vượt"quá"
trưởng"bộ"môn"của"giáo"viên"đó."
- Ngôn"ngữ"hình"thức"
- Ngôn"ngữ"hình"thức""
(∀t)(GIAOVIEN(t) ∧ (∃s)(BOMON(s) ∧
(∃u)(GIAOVIEN(u) ∧
s.TRUONGBM = u.MAGV ∧
• 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ệ"(biến"bộ)" – Mã"giả"(pseudo"code)"
s.MABM = t.MABM ∧
t.LUONG ≤ u.LUONG )))
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
7&
8&
Nội'dung'(I)'
Bảng'tầm'ảnh'hưởng'
! Ví"dụ"(R2)"
! Bảng"tầm"ảnh"hưởng"
- Ngôn"ngữ"tự"nhiên"
- Xác"định"thao"tác"cập"nhật"nào"cần"phải"kiểm"tra"RBTV"khi"
được"thực"hiện"trên"quan"hệ"bối"cảnh"
• Người"quản"lý"trực"tiếp"của"một"giáo"viên"phải"là"một"giáo"
viên"trong"cùng"bộ"môn"
! Có"2"loại"
- Ngôn"ngữ"hình"thức"
&
- Bảng"tầm"ảnh"hưởng"cho"một"RBTV" - Bảng"tầm"ảnh"hưởng"tổng"hợp"
∀(t)(GIAOVIEN(t) ∧ (t.GVQLCM ≠ null ⇒
(∃s)(GIAOVIEN(s) ∧ s.MABM = t.MABM
∧ s.MAGV = t.GVQLCM )))
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
9&
10&
Bảng'tầm'ảnh'hưởng'một'RBTV'
Bảng'tầm'ảnh'hưởng'tổng'hợp'
Ràng buộc 1 Ràng buộc 2 Ràng buộc m Tên_RB Thêm Xóa Sửa T X S T X … … … T X S S Quan hệ 1 - + + (Thuộc tính) Quan hệ 1 + + + - + + - - + Quan hệ 2 - - + Quan hệ 2 + - - … - + - + Quan hệ 3 - - Quan hệ n - - … + - + - - - Quan hệ n +
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
(+) Vi phạm RBTV (-) Không vi phạm RBTV
11&
12&
Phân'loại'
! RBTV"được"chia"làm"3"loại"chính"(1):"
• RBTV"bắt"buộc"liên"quan"đến"mô"hình"dữ"liệu"(inherent"
model"based"contraints)."" • Ví"dụ:"Một"quan"hệ"không"được"chứa"các"bộ"dữ"liệu"trùng"nhau."
Nội'dung'chi'@ết' ! Khái"niệm" ! Các"đặc"trưng"của"RBTV" ! Phân&loại& ! Cài"đặt"
• RBTV"liên"quan"đến"lược"đồ"của"mô"hình"dữ"liệu"
(schema"based"contraints)."" • Ví"dụ:"Ràng"buộc"miền"giá"trị,"ràng"buộc"trên"khóa,"ràng"buộc"
trên"giá"trị"rỗng,"ràng"buộc"tham"chiếu."
• RBTV"dựa"trên"ứng"dụng"(application"based"
contraints)."" • Ví"dụ:"Mức"lương"của"một"người"giáo"viên"không"được"vượt"
quá"trưởng"bộ"môn"
(1)""Trích"từ"sách:"Fundamental*of*Databases*4th*,*Ramez*Elmasri*&*Shamkant*B.*Navathe,*ISBN*
0A321A12226A7,*2003"
"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
13&
14&
Phân'loại'
RBTV'V'Miền'giá'trị'
! Ràng"buộc"qui"định"các"giá"trị"cho"một"thuộc"tính"
! RBTV"liên"quan"đến"một"quan"hệ:"
R
A
B
C
D
1
1
α
α
• Miền"giá"trị" • Liên"bộ" • Liên"thuộc"tính"
5
7
α
β
12
3
β
β
! RBTV"liên"quan"đến"nhiều"quan"hệ:"
23
9
β
β
! Miền"giá"trị" - Liên"tục" - Rời"rạc"
• Tham"chiếu" • Liên"bộ"liên"quan"hệ" • Liên"thuộc"tính"liên"quan"hệ" • Thuộc"tính"tổng"hợp" • Chu"trình"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
β ∈ {α, β, γ} 9 ∈ {1..10}
15&
16&
Ví'dụ'3''
Ví'dụ'4''
! Giới"tính"của"giáo"viên"phải"là"(cid:2)Nam(cid:3)(cid:1)hoặc"(cid:2)Nữ(cid:3)(cid:1)"
! Phụ"cấp"của"mỗi"công"việc"trong"đề"tài"không"được"vượt"
quá"20"triệu."
- Bối"cảnh:&
GIÁOVIÊN
- Bối"cảnh:&
THAMGIAĐT
- Biểu"diễn:"
- Biểu"diễn:"
∀(t )(GIAOVIEN(t) ∧ (t.PHAI = 'Nam' ∨ t.PHAI = (cid:2)Nữ(cid:2)))
∀(t )(THAMGIAĐT(t) ∧ t.PHỤCẤP ≤ 20)
DOM(PHAI) = {(cid:2)Nam(cid:3), (cid:2)Nữ(cid:3)}
- Bảng"tầm"ảnh"hưởng:"
- Bảng"tầm"ảnh"hưởng:"
hay
Thêm Xóa Sửa Thêm Xóa Sửa R3 R4
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
GIÁOVIÊN - THAMGIAĐT - + (PHAI) + (PHỤCẤP) + +
17&
18&
RBTV'V'Liên'bộ'
Ví'dụ'5''
! Sự"tồn"tại"của"một"hay"nhiều"bộ"phụ"thuộc"vào"sự"tồn"tại"
! Tên"bộ"môn"là"duy"nhất."""
của"một"hay"nhiều"bộ"khác"trong"cùng"quan"hệ"
BOMON
- Bối"cảnh:"" - Biểu"diễn:"
R
A
B
C
D
∀(t1, t2) (BOMON(t1) ∧ BOMON(t2) ∧
1
1
α
α
5
7
α
β
(t1≠ t2 ⇒ t1.TENBM ≠ t2.TENBM))
12
3
β
β
""
23
9
β
β
∀(t1)(BOMON(t1) ∧ ¬(∃t2)(BOMON(t2) ∧
t1≠ t2 ∧ t1.TENBM = t2.TENBM) )
" " - Bảng"tầm"ảnh"hưởng:"
! Trường"hợp"đặc"biệt" - RB"khóa"chính" - RB"duy"nhất"(unique)"
hay
Thêm Xóa Sửa R5
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
BOMON - + (TENBM) +
19&
20&
Ví'dụ'6''
RBTV'V'Liên'thuộc'bnh'
! Một"giáo"viên"được"tham"gia"tối"đa"5"công"việc"trong"tất"cả"
! Là"ràng"buộc"giữa"các"thuộc"tính"trong"cùng"quan"hệ"
đề"tài" - Bối"cảnh:"
THAMGIAĐT
R
A
B
C
D
- Biểu"diễn:"
1
1
α
α
5
7
α
β
(∀t)(THAMGIADT(t) ∧
12
3
β
β
card({ s | THAMGIADT(s) ∧ s.MAGV = t.MAGV}) ≤ 5 )
23
9
β
β
- Bảng"tầm"ảnh"hưởng:"
Thêm Xóa Sửa R6
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
THAMGIADT - + (MAGV) +
21&
22&
Ví'dụ'8''
Ví'dụ'9''
! Một"giáo"viên"không"trực"tiếp"quản"lý"chuyên"môn""chính"
! Ngày"bắt"đầu"của"đề"tài"luôn"nhỏ"hơn"ngày"kết"thúc"của"đề"
mình""
tài."
- Bối"cảnh:""
GIAOVIEN
- Bối"cảnh:""
ĐỀTÀI
- Biểu"diễn:"
- Biểu"diễn:"
(∀t)( GIAOVIEN(t) ∧ (t.GVQLCM = null ∨ t.GVQLCM ≠ t.MAGV) }
(∀t)( ĐỀTÀI(t) ∧ t.NGÀYBĐ ≤ t.NGÀYKT)
- Bảng"tầm"ảnh"hưởng:"
- Bảng"tầm"ảnh"hưởng:"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
Thêm Sửa Xóa R9 Thêm Sửa Xóa R8 - ĐỀTÀI + + (NGÀYBĐ, NGÀYKT) GIAOVIEN - + + (GVQLCM)
23&
24&
Ví'dụ'10''
RBTV'V'Tham'chiếu'
! Ngày"bắt"đầu"của"một"công"việc"luôn"nhỏ"hơn"ngày"kết"thúc"
! Giá"trị"xuất"hiện"tại"các"thuộc"tính"trong"một"quan"hệ"nào"
của"công"việc"đó."
đó"phải"tham"chiếu"đến"giá"trị"khóa"chính"của"một"quan"hệ" khác"cho"trước"
- Bối"cảnh:""
CÔNGVIỆC
R
A
B
C
D
S
E
F
1
1
α
α
7
1
5
7
- Biểu"diễn:"
α
β
3
2
12
3
β
β
23
9
β
β
(∀t)( CÔNGVIỆC(t) ∧ t.NGÀYBĐ ≤ t.NGÀYKT)
- Bảng"tầm"ảnh"hưởng:"
Bắt buộc phải tồn tại trước
! Trường"hợp"đặc"biệt" - RB"khóa"ngoại"
Thêm Sửa Xóa R10
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
- CÔNGVIỆC + + (NGÀYBĐ, NGÀYKT)
25&
26&
Ví'dụ'11''
Ví'dụ'12''
! Mọi"giáo"viên"phải"thuộc"về"một"bộ"môn"cụ"thể."
! Trưởng"bộ"môn"phải"là"một"giáo"viên""
BOMON, GIAOVIEN
BOMON, GIAOVIEN
- Bối"cảnh:"" - Biểu"diễn:"
- Bối"cảnh:"" - Biểu"diễn:"
(∀t)(GIAOVIEN(t) ∧ ∃s(BOMON(s) ∧ s.MABM = t.MABM))
(∀t)(BOMON(t) ∧ ∃s(GIAOVIEN(s) ∧ s.MAGV = t.TRUONGBM))
- Bảng"tầm"ảnh"hưởng:"
- Bảng"tầm"ảnh"hưởng:"
Thêm Xóa Sửa Thêm Xóa Sửa R11 R12 - + GIAOVIEN GIAOVIEN + - + (MABM) + (MAGV)
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
- + +(MABM) + - +(TRUONGBM) BOMON BOMON
27&
28&
RBTV'V'Tham'chiếu'(I)'
RBTV'V'Liên'bộ,'liên'quan'hệ'
! Là"ràng"buộc"xảy"ra"giữa"các"bộ"trên"nhiều"quan"hệ"khác"
nhau"
! Còn"gọi"là"phụ"thuộc"tồn"tại" ! Thường"có"bối"cảnh"là"hai"quan"hệ"
R
A
B
C
D
- Nhưng"có"trường"hợp"suy"biến"thành"một"quan"hệ" - Ví"dụ"(R2)"
1
1
α
α
5
7
α
β
• Người"quản"lý"trực"tiếp"của"một"giáo"viên"phải"là"một"giáo"
12
3
β
β
viên"trong"cùng"bộ"môn"
23
9
β
β
• Bối"cảnh:"GIAOVIEN" • Biểu"diễn:"
∀(t)(GIAOVIEN(t) ∧ (t.GVQLCM ≠ null ⇒
S
A
B
C
2
7
α
4
7
α
" Bảng"tầm"ảnh"hưởng"
2
3
β
(∃s)(GIAOVIEN(s) ∧ s.MABM = t.MABM ∧ s.MAGV = t.GVQLCM )))
2
10
γ
Thêm Sửa Xóa R2
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
GIAOVIEN + + + (GVQLCM, MABM)
29&
30&
Ví'dụ'13''
Ví'dụ'14''
! Mỗi"đề"tài"phải"có"ít"nhất"một"công"việc"thuộc"về"đề"tài"đó"
! Mỗi"bộ"môn"phải"có"ít"nhất"một"giáo"viên"
DETAI, CONGVIEC
GIAOVIEN, BOMON
- Bối"cảnh:" - Biểu"diễn:"
- Bối"cảnh:" - Biểu"diễn:"
(∀t) (DETAI(t) ∧ (∃s)(CONGIVEC(s) ∧ t.MADT = s.MADT))
(∀t) (BOMON(t) ∧ (∃s)(GIAOVIEN(s) ∧ t.MABM = s.MABM))
- Bảng"tầm"ảnh"hưởng:"
- Bảng"tầm"ảnh"hưởng:"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
Thêm Xóa Sửa Thêm Xóa Sửa R13 R14 - - DETAI +(MADT) BOMON +(MABM) + + - - CONGVIEC GIAOVIEN + + (MADT) + + (MABM)
31&
32&
RBTV'V'Liên'thuộc'bnh,'liên'quan'hệ'
Ví'dụ'15''
! Là"ràng"buộc"xãy"ra"giữa"các"thuộc"tính"trên"nhiều"quan"hệ"
! Ngày"sinh"của"trưởng"bộ"môn"phải"nhỏ"hơn"ngày"nhận"
khác"nhau"
chức:""
GIAOVIEN, BOMON
- Bối"cảnh:"" - Biểu"diễn:"
R
S
A
B
C
D
A
B
C
(∀t)(BOMON(t) ∧ ∃s(GIAOVIEN(s) ∧ s.MAGV = t.TRUONGBM
1
1
2
7
α
α
α
5
7
4
7
α
β
α
∧ s.NGAYSINH < t.NGAYNHANCHUC))
12
3
2
3
β
β
β
- Bảng"tầm"ảnh"hưởng:"
23
9
2
10
β
β
γ
Thêm Xóa Sửa R15
-
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
GIAOVIEN - + (NGAYSINH) - BOMON + + (NGAYNHANCHUC, TRUONGBM)
33&
34&
Ví'dụ'16''
RBTV'V'Thuộc'bnh'tổng'hợp'
! Phụ"cấp"của"một"công"việc"trong"đề"tài"luôn"luôn"nhỏ"hơn"
! Thuộc"tính"tổng"hợp"(còn"gọi"là"thuộc"tính"suy"diễn)"
kinh"phí"của"đề"tài"đó.""
- Là"thuộc"tính"có"giá"trị"được"tính"toán"từ"các"thuộc"tính"khác"
THAMGIADT, DETAI
! Khi"CSDL"có"thuộc"tính"tổng"hợp"
- Bối"cảnh:"" - Biểu"diễn:"
- 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"
(∀t)(THAMGIADT(t) ∧ ∃s(DETAI(s) ∧ s.MADT = t.MADT
∧ t.PHUCAP < s.KINHPHI))
- Bảng"tầm"ảnh"hưởng:"
Thêm Xóa Sửa R16
+
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
THAMGIADT - + (PHUCAP) + - DETAI + (KINHPHI)
35&
36&
Ví'dụ'17''
RBTV'–'Chu'trình'
! BOMON(MABM,"TENBM,"TRUONGBM,"NGAYNHANCHUC,"
! Lược"đồ"CSDL"có"thể"được"biểu"diễn"bằng"đồ"thị"
SO_GV)"
- Đỉnh"
Tên quan hệ
! Số"giáo"viên"của"một"bộ"môn"phải"bằng"tổng"số"lượng"giáo"
Tên thuộc tính
• Quan"hệ" • Thuộc"tính"
GIAOVIEN, BOMON
- Cạnh"
viên"thuộc"bộ"môn"đó"đó" - Bối"cảnh:" - Biểu"diễn:"
• Đường"nối"một"đỉnh"quan"hệ"với"một"đỉnh"thuộc"tính"
trong"lược"đồ"CSDL"
(∀t)(BOMON(t) ∧ t.SO_GV = card({ s|GIAOVIEN(s) ∧
Tên thuộc tính
Tên quan hệ
s.MABM = t.MABM}))
- Bảng"tầm"ảnh"hưởng:"
! Chu"trình"
- Đồ"thị"xuất"hiện"đường"đi"khép"kín"~"Lược"đồ"CSDL"có"chu"
Thêm Xóa Sửa R17
trình"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
+ GIAOVIEN + (MABM) + - - BOMON + (SO_GV)
37&
38&
Ví'dụ'17''
Ví'dụ'17'(I)''
! Nhân"viên"chỉ"được"phân"công"vào"các"đề"án"do"phòng"ban"
! 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"
NHANVIEN, DEAN, PHANCONG
PHG=PHONG PHG=PHONG
của"mình"phụ"trách" - Bối"cảnh:" - Biểu"diễn:"
NVDA ← NHANVIEN PHG=PHONG DEAN
DEAN DEAN
MANV, MADA
(∀t) (PHANCONG(t) ∧ (∃s)(NVDA(s) ∧
NHANVIEN NHANVIEN
t.MA_NVIEN = s.MANV ∧ t.MADA = s.SODA ))
- Bảng"tầm"ảnh"hưởng:"
MANV=MA_NVIEN
SODA=MADA
MA_NVIEN, SODA
PHANCONG PHANCONG
Thêm Sửa R17 Xóa - NHANVIEN -
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
- + DEAN + (MANV,PHG) + (MADA,PHONG) - PHANCONG + + (MA_NVIEN,SODA)
39&
40&
Ví'dụ'18'
Nội'dung'chi'@ết'
! Khái"niệm" ! Các"đặc"trưng"của"RBTV" ! Phân"loại" ! Cài&đặt"
! DDH"(SODDH,"NGAYDH,"MAKH)" ! CT_DDH"(SODDH,"MAMH,"SOLUONG,"DONGIA)"" ! GIAOHANG(MAGH,"NGAYGH,"TONGTIEN,"SODDH)" ! CT_GH"(MAGH,&MAMH)" ! Chỉ"được"phép"giao"các"mặt"hàng"mà"khách"hàng"có"đặt."
MAGH=MAGH
GIAOHANG
MAGH, MAMH
CT_DDH
- Assertion" - Trigger" - Transaction"(giao"tác)" - Stored"Procedure"(thủ"tục"lưu"trữ"nội)"
MAMH = MAMH
SODDH=SODDH
SODDH, MAMH
CT_DDH
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
41&
42&
Cài'đặt'
Asser@on'
! Các"RBTV"được"cài"đặt"bởi"
! Là"một"biểu"thức"SQL"luôn"mang"giá"trị"TRUE"tại"mọi"thời"
điểm." - Người"sử"dụng"cần"cho"biết"cái"gì"phải"đúng"
- Primary"key" - Foreign"key" - Check"contraint"
! Cú"pháp"
- Assertion" - Trigger" - Transaction"
CREATE ASSERTION
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
DROP ASSERTION
43&
44&
Ví'dụ'15'
Ví'dụ'19'
! Ngày"sinh"của"trưởng"bộ"môn"phải"nhỏ"hơn"ngày"nhận"
! Lương"của"trưởng"bộ"môn"phải"lớn"hơn"50000"
chức"
CREATE ASSERTION R15 CHECK (
NOT EXISTS ( CREATE ASSERTION R12 CHECK ( SELECT * NOT EXISTS ( FROM GIAOVIEN, BOMON SELECT * WHERE MAGV=TRUONGBM FROM GIAOVIEN, BOMON AND LUONG < 50000 ) WHERE MAGV=TRUONGBM ) AND NGAYSINH > NGAYNHANCHUC )
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
)
45&
46&
Ví'dụ'19'(I)'
Ví'dụ'16'
! Lương"của"trưởng"bộ"môn"phải"lớn"hơn"50000"
! Số"lượng"giáo"viên"của"mỗi"bộ"môn"không"quá"20"người"
Check Constraint ALTER TABLE BOMON (
CREATE ASSERTION R16 CHECK ( TENBM NVARCHAR(50) UNIQUE,
20 >= ALL ( SELECT COUNT(MAGV) MABM CHAR(10) NOT NULL,
FROM GIAOVIEN TRUONGBM CHAR(10),
GROUP BY MABM ) NGAYNHANCHUC DATETIME,
) CONSTRAINT CHK_BM_LUONGTRUONGBM CHECK (
TRUONGBM NOT IN (SELECT MAGV FROM GIAOVIEN
WHERE LUONG <= 50000 ))
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
)
47&
48&
Ví'dụ'16'(I)'
Trigger'
! Số"lượng"giáo"viên"của"mỗi"bộ"môn"không"quá"20"người"
! 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
Check Constraint ALTER TABLE GIAOVIEN ADD Biến cố CONSTRAINT CHK_GV_SLGVBM CHECK (
20 >= ALL ( SELECT COUNT(MAGV) FROM GIAOVIEN
Thỏa
GROUP BY MABM ))
giá trị mới giá trị cũ
Không thỏa
row-level statement-level
Điều kiện Tập hợp các lệnh
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
Thông báo lỗi
49&
50&
Trigger'(I)'
Ví'dụ'15'
! Cú"pháp"
! Lương"của"trưởng"bộ"môn"phải"lớn"hơn"50000"
CREATE TRIGGER
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
DROP TRIGGER
51&
52&
Ví'dụ'15'(I)'
Ví'dụ'15'(I)'
! Lương"của"trưởng"bộ"môn"phải"lớn"hơn"50000"
! Lương"của"trưởng"bộ"môn"phải"lớn"hơn"50000"
CREATE TRIGGER TR_BM_UPD CREATE TRIGGER TR_BM_UPD
AFTER UPDATE OF TRUONGBM ON BOMON AFTER UPDATE OF LUONG ON GIAOVIEN
REFERENCING REFERENCING
NEW ROW AS NewTuple NEW ROW AS NewTuple
OLD ROW AS OldTuple OLD ROW AS OldTuple
FOR EACH ROW FOR EACH ROW
WHEN (50000 >= (SELECT LUONG FROM GIAOVIEN WHEN (NewTuple.LUONG <= 50000 AND NewTuple.MAGV IN (
WHERE MAGV=NewTuple.TRUONGBM)) SELECT TRUONGBM FROM BOMON ))
UPDATE BOMON UPDATE GIAOVIEN
SET TRUONGBM=OldTuple.TRUONGBM SET LUONG=OldTuple.LUONG
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
WHERE TRUONGBM=NewTuple.TRUONGBM WHERE LUONG=NewTuple.LUONG
53&
54&
Transac@on'
Transac@on'(I)'
! Là"tập"các"lệnh"thực"hiện"một"xử"lý"nào"đó"trong"một"ứng"
! Giao"tác"phải"đảm"bảo""
- Tính"nguyên"tố"(atomicity)" - Tính"nhất"quán"của"CSDL"(consistency)"
dụng"CSDL,"sao"cho" - Hoặc"là"tất"cả"các"lệnh"đều"được"thực"hiện"thành"công" - Hoặc"là"không"có"lệnh"nào"được"thực"hiện"
• Các"RBTV"không"bị"vi"phạm"
– Trong"khi"thực"hiện"giao"tác" – Trước"và"sau"khi"thực"hiện"giao"tác"
! Ví"dụ:"xử"lý"chuyển"tiền"trong"ngân"hàng"
Giao tác Chuyển_tiền
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
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
Cuối giao tác
55&
56&
Ví'dụ'7'
Ví'dụ'7'(I)'
! 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)
Giao tác Thêm_trận_đấu(t, s) Với mọi s∈THIDAU (s.NGAY=ngay ∧ s.GIO=gio)
Xóa s khỏi THIDAU Thêm t vào THIDAU
Cuối với mọi Thêm s vào THIDAU 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
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
Cuối nếu Cuối nếu Cuối giao tác Cuối giao tác
57&
58&
Ví'dụ'11'
Ví'dụ'11'(I)'
! Mỗi"hóa"đơn"phải"có"ít"nhất"một"chi"tiết"hóa"đơn"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
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
59&
60&
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"
! Mỗi"trận"đấu"là"cuộc"thi"đấu"của"đúng"2"đội"
hay"thủ"tục"" - Được"lưu"trữ"trong"lược"đồ"CSDL" - Được"sử"dụng"trong"các"câu"lệnh"SQL"
! Cú"pháp"
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
CREATE PROCEDURE
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
GO EXEC Thêm_trận_đấu x, y EXEC
61&
62&
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"
! 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"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN"

