Bài giảng Cơ sở dữ liệu - Chương 7: Ràng buộc toàn vẹn - Lưu Huỳnh Châu Pha
Nội dung chi tiết
Khái niệm
Các đặc trưng của RBTV
Phân loại
Cài đặt
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
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 quan hệ đều phải thỏa ở bất kỳ thời điểm nào
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 D 1 7 3 9 α β β β A B α S α 2 4 β γ 2 2 C 7 7 3 10 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 29 Ví 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 Bối cảnh: Biểu diễn: Bảng tầm ảnh hưởng: ∀ t ∈ HOADON ( ∃ s ∈ CTHD ( t.SOHD = s.SOHD )) R 11 HOADON Thêm Xóa Sửa + + + (SOHD) CTHD + + + (SOHD) HOADON, CTHD Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 30 RBTV - 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 31 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: Biểu diễn: Bảng tầm ảnh hưởng: ∀ t ∈ PHONGBAN ( ∃ s ∈ NHANVIEN ( s.MANV = t.TRPHG ∧ t.NG_NHANCHUC • s.NGSINH )) R 12 NHANVIEN Thêm Xóa Sửa − + + (NG_NHANCHUC, TRPHG) PHONGBAN − − + (NGSINH, MANV) NHANVIEN, PHONGBAN Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 32 RBTV - Thuộc tính tổng hợp Thuộc tính tổng hợp Là thuộc tính có giá trị được tính toán từ các thuộc tính khác Khi 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 33 Ví dụ 13 PHONGBAN(TENPHG, MAPHG, TRPHG, NG_NHANCHUC, SO_NV) 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: Biểu diễn: Bảng tầm ảnh hưởng: ∀ t ∈ PHONGBAN ( t.SO_NV = ∑ { s ∈ NHANVIEN | s.PHG = t.MAPHG} ) R 13 NHANVIEN Thêm Xóa Sửa + − + (PHG) PHONGBAN + − + (SO_NV, MAPHG) NHANVIEN, PHONGBAN Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 34 RBTV – Chu trình Lược đồ CSDL có thể được biểu diễn bằng đồ thị Đỉnh Quan hệ Thuộc tính Cạnh Đường nối một đỉnh quan hệ với một đỉnh thuộc tính trong lược đồ CSDL Chu trình Đồ thị xuất hiện đường đi khép kín ~ Lược đồ CSDL có chu trình Tên quan hệ Tên thuộc tính Tên quan hệ Tên thuộc tính Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 35 NHANVIEN DEAN PHG=PHONG 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 PHANCONG NHANVIEN DEAN PHG=PHONG PHANCONG SODA=MADA MANV=MA_NVIEN MANV, MADA MA_NVIEN, SODA Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 36 Ví dụ 14 (tt) 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: Biểu diễn: Bảng tầm ảnh hưởng: NHANVIEN, DEAN, PHANCONG R 14 NHANVIEN Thêm Xóa Sửa − − + (MANV,PHG) DEAN − − + (MADA,PHONG) PHANCONG + − + (MA_NVIEN,SODA) NVDA ← NHANVIEN PHG=PHONG DEAN ∀ t ∈ PHANCONG ( ∃ s ∈ NVDA ( t.MA_NVIEN = s.MANV ∧ t.MADA = s.SODA )) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 37 Nội dung chi tiết Khái niệm Các đặc trưng của RBTV Phân loại Cài đặt Assertion Trigger Transaction (giao tác) Stored Procedure (thủ tục lưu trữ nội) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 38 Cài đặt Các RBTV được cài đặt bởi Primary key Foreign key Check contraint Assertion Trigger Transaction Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 39 Assertion 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 Cú pháp CREATE ASSERTION CHECK () DROP ASSERTION Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 40 Ví dụ 12 Ngày sinh của trưởng phòng phải nhỏ hơn ngày nhận chức CREATE ASSERTION R12 CHECK ( NOT EXISTS ( SELECT * FROM NHANVIEN, PHONGBAN WHERE MANV=TRPHG AND NGSINH > NGAY_NHANCHUC ) ) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 41 Ví dụ 15 Lương của trưởng phòng phải lớn hơn 50000 CREATE ASSERTION R15 CHECK ( NOT EXISTS ( SELECT * FROM NHANVIEN, PHONGBAN WHERE MANV=TRPHG AND LUONG < 50000 ) ) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 42 Ví dụ 15 (tt) ALTER TABLE PHONGBAN ( TENPB VARCHAR (20) UNIQUE , MAPHG INT NOT NULL , TRPHG CHAR (9), NG_NHANCHUC DATETIME, CONSTRAINT CHK_PB_LUONGTRPHG CHECK ( TRPHG NOT IN ( SELECT MANV FROM NHANVIEN WHERE LUONG < 50000 )) ) Lương của trưởng phòng phải lớn hơn 50000 Check Constraint Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 43 Ví dụ 16 Số lượng nhân viên của mỗi phòng ban không quá 20 người CREATE ASSERTION R16 CHECK ( 20 >= ALL ( SELECT COUNT (MANV) FROM NHANVIEN GROUP BY PHG ) ) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 44 Ví dụ 16 (tt) Số lượng nhân viên của mỗi phòng ban không quá 20 người ALTER TABLE NHANVIEN ADD CONSTRAINT CHK_NV_SLNVPB CHECK ( 20 >= ALL ( SELECT COUNT (MANV) FROM NHANVIEN GROUP BY PHG )) Check Constraint Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 45 Assertion hay Check Constraint ? Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 46 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 đó row-levelstatement-level trước sau giá trị mới giá trị cũ thêm xóa sửa Điều kiện Tập hợp các lệnh Thông báo lỗi Thỏa Không thỏa Biến cố Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 47 Trigger (tt) Cú pháp CREATE TRIGGER AFTER|BEFORE INSERT|UPDATE|DELETE ON REFERENCING NEW ROW|TABLE AS OLD ROW|TABLE AS FOR EACH ROW | FOR EACH STATEMENT WHEN ( ) DROP TRIGGER Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 48 Ví dụ 15 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 FOR EACH ROW WHEN (50000 >= ( SELECT LUONG FROM NHANVIEN WHERE MANV=NewTuple.TRPHG)) Thông báo lỗi cho người dùng Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 49 Ví 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 50 Ví 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 51 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 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 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 Cuối giao tác Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 52 Transaction (tt) Giao tác phải đảm bảo Tính nguyên tố (atomicity) Tính nhất quán của CSDL (consistency) 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 53 Ví dụ 7 Giao tác Thêm_trận_đấu(t, s) Thêm t vào THIDAU Thêm s vào THIDAU 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 Mỗi trận đấu là cuộc thi đấu của đúng 2 đội Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 54 Ví 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 55 Ví dụ 11 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 Mỗi hóa đơn phải có ít nhất một chi tiết hóa đơn Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 56 Ví dụ 11 (tt) 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 57 Stored 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 Cú pháp CREATE PROCEDURE AS Khai báo biến cục bộ Thân chương trình GO EXEC Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 58 Ví dụ 7 Mỗi trận đấu là cuộc thi đấu của đúng 2 đội CREATE PROCEDURE Thêm_trận_đấut THIDAU , s THIDAU AS begin tran Thêm t vào THIDAU If @@error 0 rollback tran Thêm s vào THIDAU If @@error 0 rollback tran commit tran GO EXEC Thêm_trận_đấu x, y Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 59 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 60 Bài tập về nhà Bài tập 7.2 / 331-333 7.3 / 335-336 7.4 / 345-347 Đọc Procedures stored in schema / 365-378 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 61
File đính kèm:
- bai_giang_co_so_du_lieu_chuong_7_rang_buoc_toan_ven_luu_huyn.pptx