Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

Nội'dung'chi'@ết'

!  Khái&niệm"
!  Các"đặc"trưng"của"RBTV"
'
CHƯƠNG'7'
!  Phân"loại"
!  Cài"đặt"
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" !  Khái"niệm"và"phân"loại"
của"dữ"liệu"hoặc"thể"hiện"của"dữ"liệu"trong"thực"tế"(1)." !  Các&đặc&trưng&của&RBTV&
!  RBTV"nhằm"đảm"bảo"(1):" -  Bối"cảnh"
!  Tính"đúng"của"dữ"liệu"và"mô"hình"dữ"liệu."
-  Nội"dung"
!  Ngữ"nghĩa"của"CSDL"
-  Bảng"tầm"ảnh"hưởng"
!  Khi"RBTV"được"khai"báo,""mọi"thể"hiện"của"quan"hệ"đều"
phải"thỏa"các"RBTV"này"ở"bất"kỳ"thời"điểm"nào"(1)." !  Phân"loại"
!  RBTV"được"phát"hiện"và"khai"báo"bởi"các"thiết"kế"viên" !  Cài"đặt"
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" 3& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 4&


Bối'cảnh' Bối'cảnh'(I)'
!  Bối"cảnh"của"một"RBTV" !  Ví"dụ"(R2)"
-  Là"những"quan"hệ"có"khả"năng"bị"vi"phạm"RBTV"khi"thực" -  Người"quản"lý"trực"tiếp"(của"một"giáo"viên)"phải"là"một"giáo"
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"
-  Mức"lương"của"một"người"giáo"viên"không"được"vượt"quá" –  Thêm"mới"một"giáo"viên"
trưởng"bộ"môn" •  Bối"cảnh:"GIAOVIEN"
•  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" 5& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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"
•  Cô"đọng,"chặt"chẽ"nhưng"đôi"lúc"khó"hiểu" -  Ngôn"ngữ"hình"thức""
•  Biểu"diễn"thông"qua"" (∀t)(GIAOVIEN(t) ∧ (∃s)(BOMON(s) ∧
–  Đại"số"quan"hệ" (∃u)(GIAOVIEN(u) ∧
–  Phép"tính"quan"hệ"(biến"bộ)"
s.TRUONGBM = u.MAGV ∧
–  Mã"giả"(pseudo"code)"
s.MABM = t.MABM ∧
t.LUONG ≤ u.LUONG )))

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 7& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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"
•  Người"quản"lý"trực"tiếp"của"một"giáo"viên"phải"là"một"giáo" được"thực"hiện"trên"quan"hệ"bối"cảnh"
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"
&
∀(t)(GIAOVIEN(t) ∧ (t.GVQLCM ≠ null ⇒ -  Bảng"tầm"ảnh"hưởng"tổng"hợp"
(∃s)(GIAOVIEN(s) ∧ s.MABM = t.MABM
∧ s.MAGV = t.GVQLCM )))

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 9& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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 S … … … T X 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 - + - - - +

(+) Vi phạm RBTV


(-) Không vi phạm RBTV

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 11& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 12&


Nội'dung'chi'@ết' Phân'loại'
!  Khái"niệm"
!  RBTV"được"chia"làm"3"loại"chính"(1):"
!  Các"đặc"trưng"của"RBTV"
•  RBTV"bắt"buộc"liên"quan"đến"mô"hình"dữ"liệu"(inherent"
!  Phân&loại& model"based"contraints).""
!  Cài"đặt" •  Ví"dụ:"Một"quan"hệ"không"được"chứa"các"bộ"dữ"liệu"trùng"nhau."
•  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" 13& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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ệ:"
•  Miền"giá"trị" R A B C D
•  Liên"bộ" α α 1 1
•  Liên"thuộc"tính" α β 5 7 β ∈9
{α, {1..10}
∈ β, γ}
!  RBTV"liên"quan"đến"nhiều"quan"hệ:" β β 12 3
23 9
•  Tham"chiếu" β β

•  Liên"bộ"liên"quan"hệ"
!  Miền"giá"trị"
•  Liên"thuộc"tính"liên"quan"hệ"
-  Liên"tục"
•  Thuộc"tính"tổng"hợp"
•  Chu"trình" -  Rời"rạc"

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 15& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 16&


Ví'dụ'3'' Ví'dụ'4''
!  Giới"tính"của"giáo"viên"phải"là" Nam hoặc" Nữ " !  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:"
∀(t )(GIAOVIEN(t) ∧ (t.PHAI = 'Nam' ∨ t.PHAI = -  Biểu"diễn:"
Nữ ))
hay
∀(t )(THAMGIAĐT(t) ∧ t.PHỤCẤP ≤ 20)
DOM(PHAI) = { Nam , Nữ }
-  Bảng"tầm"ảnh"hưởng:" -  Bảng"tầm"ảnh"hưởng:"

R3 Thêm Xóa Sửa R4 Thêm Xóa Sửa


GIÁOVIÊN + - + (PHAI) THAMGIAĐT + - + (PHỤCẤP)

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 17& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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ệ" -  Bối"cảnh:"" BOMON
-  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 "" hay
23 9
β β
" ∀(t1)(BOMON(t1) ∧ ¬(∃t2)(BOMON(t2) ∧
"
!  Trường"hợp"đặc"biệt" t1≠ t2 ∧ t1.TENBM = t2.TENBM) )
-  Bảng"tầm"ảnh"hưởng:"
-  RB"khóa"chính"
-  RB"duy"nhất"(unique)"
R5 Thêm Xóa Sửa
BOMON + - + (TENBM)

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 19& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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

-  Biểu"diễn:" R A B C D

α α 1 1
(∀t)(THAMGIADT(t) ∧ α β 5 7
β β 12 3
card({ s | THAMGIADT(s) ∧ s.MAGV = t.MAGV}) ≤ 5 )
β β 23 9

-  Bảng"tầm"ảnh"hưởng:"

R6 Thêm Xóa Sửa


THAMGIADT + - + (MAGV)

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 21& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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:"

R9 Thêm Xóa Sửa


R8 Thêm Xóa Sửa
ĐỀTÀI + - + (NGÀYBĐ, NGÀYKT)
GIAOVIEN + - + (GVQLCM)

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 23& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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
-  Biểu"diễn:" α β 5 7
3 2
β β 12 3

(∀t)( CÔNGVIỆC(t) ∧ t.NGÀYBĐ ≤ t.NGÀYKT) β β 23 9

-  Bảng"tầm"ảnh"hưởng:" Bắt buộc phải tồn tại trước

R10 Thêm Xóa Sửa !  Trường"hợp"đặc"biệt"


CÔNGVIỆC + - + (NGÀYBĐ, NGÀYKT) -  RB"khóa"ngoại"

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 25& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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""

-  Bối"cảnh:"" BOMON, GIAOVIEN -  Bối"cảnh:"" BOMON, GIAOVIEN


-  Biểu"diễn:" -  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:"

R11 Thêm Xóa Sửa R12 Thêm Xóa Sửa


GIAOVIEN + - + (MABM) GIAOVIEN - + + (MAGV)
BOMON - + +(MABM) BOMON + - +(TRUONGBM)

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 27& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 28&


RBTV'V'Tham'chiếu'(I)' RBTV'V'Liên'bộ,'liên'quan'hệ'
!  Còn"gọi"là"phụ"thuộc"tồn"tại" !  Là"ràng"buộc"xảy"ra"giữa"các"bộ"trên"nhiều"quan"hệ"khác"
!  Thường"có"bối"cảnh"là"hai"quan"hệ" nhau"
-  Nhưng"có"trường"hợp"suy"biến"thành"một"quan"hệ" R A B C D
-  Ví"dụ"(R2)" α α 1 1
•  Người"quản"lý"trực"tiếp"của"một"giáo"viên"phải"là"một"giáo" α β 5 7
viên"trong"cùng"bộ"môn" β β 12 3
β β 23 9
•  Bối"cảnh:"GIAOVIEN"
•  Biểu"diễn:"
∀(t)(GIAOVIEN(t) ∧ (t.GVQLCM ≠ null ⇒
S A B C
(∃s)(GIAOVIEN(s) ∧ s.MABM = t.MABM ∧ s.MAGV = t.GVQLCM ))) α 2 7
α 4 7
"  Bảng"tầm"ảnh"hưởng"
β 2 3
R2 Thêm Xóa Sửa γ 2 10
GIAOVIEN + + + (GVQLCM, MABM)
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 29& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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"

-  Bối"cảnh:" DETAI, CONGVIEC -  Bối"cảnh:" GIAOVIEN, BOMON


-  Biểu"diễn:" -  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:"

R13 Thêm Xóa Sửa R14 Thêm Xóa Sửa


DETAI + - +(MADT) BOMON + - +(MABM)
CONGVIEC - + + (MADT) GIAOVIEN - + + (MABM)

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 31& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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:""

-  Bối"cảnh:"" GIAOVIEN, BOMON


-  Biểu"diễn:"
R A B C D S 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
β β 23 9 γ 2 10
-  Bảng"tầm"ảnh"hưởng:"

R15 Thêm Xóa Sửa


GIAOVIEN - - + (NGAYSINH)
BOMON + - + (NGAYNHANCHUC, TRUONGBM)

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 33& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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"

-  Bối"cảnh:"" THAMGIADT, DETAI !  Khi"CSDL"có"thuộc"tính"tổng"hợp"


-  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:"

R16 Thêm Xóa Sửa


THAMGIADT + - + (PHUCAP)
DETAI + - + (KINHPHI)

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 35& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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"
!  Số"giáo"viên"của"một"bộ"môn"phải"bằng"tổng"số"lượng"giáo" •  Quan"hệ"
Tên quan hệ

viên"thuộc"bộ"môn"đó"đó" •  Thuộc"tính" Tên thuộc tính

-  Bối"cảnh:" GIAOVIEN, BOMON -  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
s.MABM = t.MABM})) Tên quan hệ

-  Bảng"tầm"ảnh"hưởng:"
!  Chu"trình"
R17 Thêm Xóa Sửa -  Đồ"thị"xuất"hiện"đường"đi"khép"kín"~"Lược"đồ"CSDL"có"chu"
GIAOVIEN + + + (MABM) trình"
BOMON - - + (SO_GV)
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 37& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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" của"mình"phụ"trách"
-  Bối"cảnh:" NHANVIEN, DEAN, PHANCONG
PHG=PHONG -  Biểu"diễn:"

NVDA ← NHANVIEN PHG=PHONG DEAN


NHANVIEN MANV, MADA DEAN (∀t) (PHANCONG(t) ∧ (∃s)(NVDA(s) ∧
t.MA_NVIEN = s.MANV ∧ t.MADA = s.SODA ))
-  Bảng"tầm"ảnh"hưởng:"
MANV=MA_NVIEN SODA=MADA
MA_NVIEN, SODA R17 Thêm Xóa Sửa
NHANVIEN - - + (MANV,PHG)
PHANCONG
DEAN - + + (MADA,PHONG)
PHANCONG + - + (MA_NVIEN,SODA)
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 39& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 40&
Ví'dụ'18' Nội'dung'chi'@ết'
!  DDH"(SODDH,"NGAYDH,"MAKH)"
!  Khái"niệm"
!  CT_DDH"(SODDH,"MAMH,"SOLUONG,"DONGIA)""
!  GIAOHANG(MAGH,"NGAYGH,"TONGTIEN,"SODDH)"
!  Các"đặc"trưng"của"RBTV"
!  CT_GH"(MAGH,&MAMH)" !  Phân"loại"
!  Chỉ"được"phép"giao"các"mặt"hàng"mà"khách"hàng"có"đặt." !  Cài&đặt"
MAGH=MAGH
-  Assertion"
-  Trigger"
-  Transaction"(giao"tác)"
CT_DDH MAGH, MAMH GIAOHANG
-  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" 41& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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"
-  Primary"key" điểm."
-  Foreign"key" -  Người"sử"dụng"cần"cho"biết"cái"gì"phải"đúng"
-  Check"contraint"
!  Cú"pháp"
-  Assertion"
CREATE ASSERTION <Tên_assertion> CHECK (<Điều_kiện>)
-  Trigger"
-  Transaction"
DROP ASSERTION <Tên_assertion>

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 43& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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 (

CREATE ASSERTION R12 CHECK ( NOT EXISTS (

NOT EXISTS ( SELECT *

SELECT * FROM GIAOVIEN, BOMON

FROM GIAOVIEN, BOMON WHERE MAGV=TRUONGBM

WHERE MAGV=TRUONGBM AND LUONG < 50000 )

AND NGAYSINH > NGAYNHANCHUC ) )

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 45& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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"

ALTER TABLE BOMON ( Check Constraint

TENBM NVARCHAR(50) UNIQUE, CREATE ASSERTION R16 CHECK (


MABM CHAR(10) NOT NULL, 20 >= ALL ( SELECT COUNT(MAGV)
TRUONGBM CHAR(10), FROM GIAOVIEN
NGAYNHANCHUC DATETIME, GROUP BY MABM )
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" 47& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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
Check Constraint xóa
ALTER TABLE GIAOVIEN ADD sửa Biến
cố
CONSTRAINT CHK_GV_SLGVBM CHECK ( trước
sau
20 >= ALL ( SELECT COUNT(MAGV) FROM GIAOVIEN
GROUP BY MABM ))
giá trị mới Thỏa
giá trị cũ Điều kiện Tập hợp các lệnh
row-level
Không thỏa
statement-level

Thông báo lỗi

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 49& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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 <Tên_trigger>
CREATE TRIGGER TR_BM_UPD
AFTER|BEFORE INSERT|UPDATE|DELETE ON <Tên_bảng>
AFTER UPDATE OF TRUONGBM ON BOMON
REFERENCING
REFERENCING
NEW ROW|TABLE AS <Tên_1>
NEW ROW AS NewTuple
OLD ROW|TABLE AS <Tên_2>
FOR EACH ROW
FOR EACH ROW | FOR EACH STATEMENT
WHEN (50000 >= (SELECT LUONG FROM GIAOVIEN
WHEN (<Điều kiện>)
WHERE MAGV=NewTuple.TRUONGBM))
<Tập_lệnh_SQL>
Thông báo lỗi cho người dùng

DROP TRIGGER <Tên_trigger>

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 51& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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
WHERE TRUONGBM=NewTuple.TRUONGBM WHERE LUONG=NewTuple.LUONG

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 53& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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""
dụng"CSDL,"sao"cho" -  Tính"nguyên"tố"(atomicity)"
-  Hoặc"là"tất"cả"các"lệnh"đều"được"thực"hiện"thành"công" -  Tính"nhất"quán"của"CSDL"(consistency)"
-  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"
!  Ví"dụ:"xử"lý"chuyển"tiền"trong"ngân"hàng" –  Trước"và"sau"khi"thực"hiện"giao"tác"

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
Cuối giao tác
©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 55& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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)
Thêm t vào THIDAU Xóa s khỏi 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

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 57& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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"
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

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 59& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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" CREATE PROCEDURE Thêm_trận_đấu
t THIDAU , s THIDAU
-  Được"sử"dụng"trong"các"câu"lệnh"SQL" AS
begin tran
Thêm t vào THIDAU
!  Cú"pháp" If @@error<>0 rollback tran

CREATE PROCEDURE <Tên_thủ_tục> <DS_tham_số> Thêm s vào THIDAU


AS If @@error<>0 rollback tran
commit tran
Khai báo biến cục bộ
GO
Thân chương trình
GO
EXEC Thêm_trận_đấu x, y
EXEC <Tên_thủ_tục> <DS_ tham_số>

©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 61& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 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" 63& ©"Bộ"môn"HTTT"/"Khoa"CNTT"/"Trường"ĐH"KHTN" 64&

You might also like