Khái niệmRBTV 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 y Các thao tác làm thay đổi dữ liệu không nên được thực hiện một các
Trang 1Chương 6 Ràng buộc toàn vẹn
Trang 2Nội dung chi tiết
Khái niệm
Các đặc trưng của RBTV
Phân loại
Cài đặt
Trang 3Khá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
y 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’
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 QH đều phải thỏa ở bất kỳ thời điểm nào
Trang 4Khái niệm (tt)
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ĩathực tế
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)
Trang 5Nội dung chi tiết
Trang 6Bối cảnh
Bối cảnh của một RBTV
¾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
Ví dụ (R1)
¾Mức lương của một người nhân viên không được vượt quá trưởng phòng
y Các phép cập nhật
∗ Cập nhật lương cho nhân viên
∗ Thêm mới một NV vào một phòng ban
∗ Bổ nhiệm trưởng phòng cho một phòng ban
y Bối cảnh: NHANVIEN, PHONGBAN
Trang 8y Cô đọng, chặt chẽ nhưng đôi lúc khó hiểu
y Biểu diễn thông qua
∗ Đại số quan hệ
∗ Phép tính quan hệ
∗ Mã giả (pseudo code)
Trang 10∀t ∈ NHANVIEN ( t.MA_NQL ≠ null ∧
∃s ∈ NHANVIEN (t.MA_NQL = s.MANV ))
Trang 11Bảng tầm ảnh hưởng
Bảng tầm ảnh hưởng
¾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
Có 2 loại
¾Bảng tầm ảnh hưởng cho một RBTV
¾Bảng tầm ảnh hưởng tổng hợp
Trang 13+ -
-+ - +
Trang 14Nội dung chi tiết
y Liên bộ, liên quan hệ
y Liên thuộc tính, liên QH
y Thuộc tính tổng hợp
y Chu trình
Trang 15α β
C 1 5 12
β 23
D 1 7 3 9
α β β β
β ∈ {α, β, γ} 9 ∈ {1 10}
Trang 18RBTV - Liên bộ
Sự 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ệ
Trường hợp đặc biệt
¾RB khóa chính
¾RB duy nhất (unique)
A B α
R
α β
C 1 5 12
β 23
D 1 7 3 9
α β β β
Trang 21Ví dụ 7
THIDAU(NGAY, GIO, DOI, SOBAN)
Mỗi trận đấu là cuộc thi đấu của đúng 2 đội
¾Bối cảnh: THIDAU
¾Biểu diễn:
¾Bảng tầm ảnh hưởng
∀t ∈ THIDAU ( ∃!s ∈ THIDAU (
t ≠ s ∧ t.NGAY = s.NGAY ∧ t.GIO = s.GIO ))
Trang 22C 1 5 12 23
D 1 7 3 9
α β β β β
Trang 23Ở thời điểm thêm 1 bộ vào NHANVIEN, MA_NQL là null
Trang 24Ví dụ 9
KHOAHOC(MAKH, TENKH, BDAU, KTHUC)
Mỗi khóa học kéo dài ít nhất 3 tháng
Trang 25RBTV - Tham chiếu
Giá trị xuất hiện tại các thuộc tính trong một quan hệ nào đó phải tham chiếu đến giá trị khóa chính của một quan hệ khác cho trước
Trường hợp đặc biệt
A B α
R
α β
C 1 5 12
β 23
D 1 7 3 9
α β β β
E F 7
S
3
1 2
Bắt buộc phải tồn tại trước
Trang 26− +
+ (MANV) THANNHAN
+
− + (MA_NVIEN)
Trang 27RBTV - Tham chiếu (tt)
RBTV tham chiếu còn gọi là phụ thuộc tồn tại
Thường có bối cảnh là hai quan hệ
¾ Nhưng có trường hợp suy biến thành một QH
∀t ∈ NHANVIEN ( t.MA_NQL ≠ null ∧
∃s ∈ NHANVIEN (t.MA_NQL = s.MANV ))
R2 Thêm Xóa Sửa
Trang 28RBTV - 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
A B α
R
α β
C 1 5 12
β 23
1 7 3 9
α β β β
D
A B α
S
α
2 4 β
γ
2 2
C 7 7 3 10
Trang 29Ví dụ 11
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
+ +
+ (SOHD) CTHD
+
Trang 30RBTV - Liên thuộc tính, liên quan hệ
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
A B α
R
α β
C 1 5 12
β 23
D 1 7 3 9
α β β β
A B α
S
α
2 4 β
γ
2 2
C 7 7 3 10
Trang 31R12 NHANVIEN
Thêm Xóa Sửa
− + + (NG_NHANCHUC, TRPHG) PHONGBAN
−
−
+ (NGSINH, MANV)
Trang 33Thêm Xóa Sửa + + + (PHG)
Trang 35MANV, MADA
MA_NVIEN, SODA
Trang 36−
+ (MANV,PHG) DEAN
−
Trang 37Nội dung chi tiết
Trang 39Ví dụ (tt) Check Constraint
Số lượng bán hàng > 0
ALTER TABLE CHITIETDATHANG ADD
Constraint CHK_SLBAN CHECK (SOLUONG > 0),Constraint CHK_MUCGIAMGIA
CHECK( MUCGIAMGIA BETWEEN 0 and 10)
Trang 40Ví dụ (tt) Check Constraint
Ngày giao hàng >= ngày dặt hàng
ALTER TABLE DONDATHANG ADD
CONSTRAINT CHK_NGAYGIAO_NGAYDAT CHECK (
NGAYGIAOHANG >= NGAYDATHANG)
Trang 41Ví dụ 15 (tt) Check Constraint
Lương của trưởng phòng phải lớn hơn 50000
TENPB VARCHAR (20) UNIQUE, MAPHG INT NOT NULL ,
TRPHG CHAR (9), NG_NHANCHUC DATETIME,
TRPHG NOT IN ( SELECT MANV FROM NHANVIEN
Trang 43 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 đó
row-level statement-level
trước sau
giá trị mới giá trị cũ
thêm xóa sửa
Điều kiện Thỏa Tập hợp các lệnh
Không thỏa
Biến cố
Trang 44Trigger (tt)
Cú pháp
CREATE TRIGGER <Tên_trigger>
AFTER|BEFORE INSERT|UPDATE|DELETE ON <Tên_bảng> REFERENCING
NEW ROW|TABLE AS <Tên_1>
OLD ROW|TABLE AS <Tên_2>
FOR EACH ROW | FOR EACH STATEMENT
WHEN (<Điều kiện>)
<Tập_lệnh_SQL>
DROP TRIGGER <Tên_trigger>
Trang 45Ví dụ 15
Lương của trưởng phòng phải lớn hơn 50000
REFERENCING
FOR EACH ROW
WHEN (50000 >= ( SELECT LUONG FROM NHANVIEN
Thông báo lỗi cho người dùng
Trang 46Ví dụ 15 (tt)
Lương của trưởng phòng phải lớn hơn 50000
CREATE TRIGGER TR_PB_UPD
AFTER UPDATE OF TRPHG ON PHONGBAN
REFERENCING
NEW ROW AS NewTuple OLD ROW AS OldTuple FOR EACH ROW
WHEN (50000 >= (SELECT LUONG FROM NHANVIEN
WHERE MANV=NewTuple.TRPHG)) UPDATE PHONGBAN
SET TRPHG=OldTuple.TRPHG WHERE TRPHG=NewTuple.TRPHG
Trang 47Ví dụ 15 (tt)
Lương của trưởng phòng phải lớn hơn 50000
CREATE TRIGGER TR_PB_UPD
AFTER UPDATE OF LUONG ON NHANVIEN
REFERENCING
NEW ROW AS NewTuple OLD ROW AS OldTuple FOR EACH ROW
WHEN (NewTuple.LUONG <= 50000 AND NewTuple.MANV IN (
SELECT TRPHG FROM PHONGBAN )) UPDATE NHANVIEN
SET LUONG=OldTuple.LUONG WHERE LUONG=NewTuple.LUONG
Trang 48¾ Hoặc là không có lệnh nào được thực hiện
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
Trang 49∗ Trong khi thực hiện giao tác
∗ Trước và sau khi thực hiện giao tác
Trang 50Nếu có một thao tác thất bại thì
Quay lui giao tác
Ngược lại
Hoàn tất giao tác
Cuối nếu
Cuối giao tác
Trang 51Ví dụ 7 (tt)
Giao tác Xóa_trận_đấu(ngay, gio)
Với mọi s∈THIDAU (s.NGAY=ngay ∧ s.GIO=gio)
Xóa s khỏi THIDAU
Cuối với mọi Nếu có một thao tác thất bại thì
Quay lui giao tác
Ngược lại
Hoàn tất giao tác
Cuối nếu
Cuối giao tác
Trang 52Ví 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
Thêm HOADON Thêm chi tiết thứ 1 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ì
Quay lui giao tác
Ngược lại
Hoàn tất giao tác
Cuối nếu
Cuối giao tác
Trang 53Ví dụ 11 (tt)
Thêm HOADON Thêm chi tiết thứ 1 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ì
Quay lui giao tác
Ngược lại
Hoàn tất giao tác
Cuối nếu
Cuối giao tác
Trang 54Stored Procedure
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
¾ Được lưu trữ trong lược đồ CSDL
¾ Được sử dụng trong các câu lệnh SQL
Trang 55Ví dụ 7
Mỗi trận đấu là cuộc thi đấu của đúng 2 đội
t THIDAU , s THIDAU
AS
begin tran
Thêm t vào THIDAU
Thêm s vào THIDAU
commit tran GO
EXEC Thêm_trận_đấu x, y
Trang 56Nhậ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 ???
¾Application
¾Trigger quá nhiều → hệ thống chậm chạm
¾Stored Procedure → hiệu quả cao