Professional Documents
Culture Documents
CTT102-Chuong 7-RBTV PDF
CTT102-Chuong 7-RBTV PDF
! 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"
! 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"
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ảng'tầm'ảnh'hưởng'một'RBTV' Bảng'tầm'ảnh'hưởng'tổng'hợp'
(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"
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)
- 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:"
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."
- Biểu"diễn:" - Biểu"diễn:"
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ảng"tầm"ảnh"hưởng:" - Bảng"tầm"ảnh"hưởng:"
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"
(∀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:"
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ả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:"
CT_DDH
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>
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"
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
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
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"
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
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"