2/20/2019 CHƯƠNG Ràng buộc toàn vẹn (Integrity Constraints) Slide giảng mơn Cơ sở 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 Nội dung chi tiết ▪ ▪ ▪ ▪ Khái niệm Các đặc trưng RBTV Phân loại Cà i đạ t © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 2/20/2019 Khái niệm ▪ RBTV (Integrety Constraints) phát từ ngữ nghĩa ▪ liệu thể liệu thực tế (1) RBTV nhằm đảm bảo (1): ▪ Tính liệu mơ hình liệu ▪ Ngữ nghĩa CSDL ▪ Khi RBTV khai báo, thể quan hệ ▪ ▪ (1) phải thỏa RBTV thời điểm (1) RBTV phát khai báo thiết kế viên trình thiết kế liệu (1) RBTV định nghĩa quan hệ liên quan đến nhiều quan hệ (1) Trích từ sách: Fundamental of Databases 4th , Ramez Elmasri & Shamkant B Navathe, ISBN 0-321-12226-7, 2003 © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN Nội dung chi tiết ▪ Khái niệm phân loại ▪ Các đặc trưng RBTV - Bối cảnh - Nội dung - Bảng tầm ảnh hưởng ▪ Phân loại ▪ Cài đặt © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 2/20/2019 Bối cảnh ▪ Bối cảnh RBTV - Là quan hệ có khả bị vi phạm RBTV thực phép cập nhật liệu (thêm, xóa, sửa liệu) ▪ Ví dụ (R1) - Mức lương người giáo viên không vượt trưởng mơn • Các phép cập nhật – Cập nhật lương cho giáo viên – Thêm giáo viên vào môn – Bổ nhiệm trưởng mơn cho mơn • Bối cảnh: GIAOVIEN, BOMON © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN Bối cảnh (tt) ▪ Ví dụ (R2) - Người quản lý trực tiếp (của giáo viên) phải giáo viên mơn • Các phép cập nhật – Cập nhật người quản lý trực tiếp giáo viên – Thêm giáo viờn ã Bi cnh: GIAOVIEN â B mụn HTTT - Khoa CNTT - Trường ĐH KHTN 2/20/2019 Nội dung ▪ Nội dung RBTV phát biểu - Ngơn ngữ tự nhiên • Dễ hiểu thiếu tính chặt chẽ - Ngơn ngữ hình thức • Cơ đọng, chặt chẽ đơ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) © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN Nội dung (tt) ▪ Ví dụ (R1) - Ngơn ngữ tự nhiên • Mức lương người giáo viên không vượt trưởng môn giáo viên - Ngơn ngữ hình thức (t)(GIAOVIEN(t) (s)(BOMON(s) (u)(GIAOVIEN(u) s.TRUONGBM = u.MAGV s.MABM = t.MABM t.LUONG u.LUONG ))) © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 2/20/2019 Nội dung (tt) ▪ Ví dụ (R2) - Ngơn ngữ tự nhiên • Người quản lý trực tiếp giáo viên phải giáo viên mơn - Ngơn ngữ hình thức (t)(GIAOVIEN(t) (t.GVQLCM null (s)(GIAOVIEN(s) s t s.MABM = t.MABM s.MAGV = t.GVQLCM ))) © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN Bảng tầm ảnh hưởng ▪ Bảng tầm ảnh hưởng - Xác định thao tác cập nhật cần phải kiểm tra RBTV thực quan hệ bối cảnh ▪ Có loại - Bảng tầm ảnh hưởng cho RBTV - Bảng tầm ảnh hưởng tổng hợp © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 10 2/20/2019 Bảng tầm ảnh hưởng RBTV Tên_RB Thêm Xóa Sửa Quan hệ + − + (Thuộc tính) Quan hệ − + − − + − … 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ảng tầm ảnh hưởng tổng hợp Ràng buộc Ràng buộc T X S T X S + - + Quan hệ + - + Quan hệ - + - Quan hệ - - + Ràng buộc m … … … T X S + - + - + - - - + … Quan hệ n - © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN + - 12 2/20/2019 Nội dung chi tiết ▪ ▪ ▪ ▪ Khái niệm Các đặc trưng RBTV Phân loại Cài đặt © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 13 Phân loại ▪ RBTV chia làm loại (1): • RBTV bắt buộc liên quan đến mơ hình liệu (inherent model based constraints) • Ví dụ: Một quan hệ khơng chứa liệu trùng • RBTV liên quan đến lược đồ mơ hình liệu (schema based constraints) • Ví dụ: Ràng buộc miền giá trị, ràng buộc khóa, ràng buộc giá trị rỗng, ràng buộc tham chiếu • RBTV dựa ứng dụng (application based constraints) • (1) Ví dụ: Mức lương người giáo viên khơng vượt q trưởng mơn Trích từ sách: Fundamental of Databases 4th , Ramez Elmasri & Shamkant B Navathe, ISBN 0-321-12226-7, 2003 © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 14 2/20/2019 Phân loại ▪ RBTV liên quan đến quan hệ: • • • Miền giá trị Liên Liên thuộc tính ▪ RBTV liên quan đến nhiều quan hệ: • • • • • Tham chiếu Liên 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 15 RBTV - Miền giá trị ▪ Ràng buộc qui định giá trị cho thuộc tính R A B C D 1 12 23 9 {, , {1 10} } ▪ Miền giá trị - Liên tục - Rời rạc © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 16 2/20/2019 Ví dụ ▪ Giới tính giáo viên phải ‘Nam’ ‘Nữ’ - Bối cảnh: GIÁOVIÊN - Biểu diễn: hay (t )(GIAOVIEN(t) (t.PHAI = 'Nam' t.PHAI = ‘Nữ‘)) DOM(PHAI) = {‘Nam’, ‘Nữ’} - Bảng tầm ảnh hưởng: R3 GIÁOVIÊN Thêm + Xóa − Sửa + (PHAI) © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 17 Ví dụ ▪ Phụ cấp công việc đề tài không vượt 20 triệu - Bối cảnh: THAMGIAĐT - Biểu diễn: (t )(THAMGIAĐT(t) t.PHỤCẤP 20) - Bảng tầm ảnh hưởng: R4 THAMGIAĐT Thêm + © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN Xóa − Sửa + (PHỤCẤP) 18 2/20/2019 RBTV - Liên ▪ Sự tồn hay nhiều phụ thuộc vào tồn hay nhiều khác quan hệ R A B C D 1 12 23 ▪ Trường hợp đặc biệt - RB khóa - RB (unique) © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 19 Ví dụ ▪ Tên mơn - Bối cảnh: BOMON - Biểu diễn: (t1, t2) (BOMON(t1) BOMON(t2) (t1 t2 t1.TENBM t2.TENBM)) hay (t1)(BOMON(t1) ¬(t2)(BOMON(t2) t1 t2 t1.TENBM = t2.TENBM) ) - Bảng tầm ảnh hưởng: R5 BOMON Thêm + © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN Xóa − Sửa + (TENBM) 20 10 2/20/2019 Ví dụ 16 ▪ Phụ cấp cơng việc đề tài ln ln nhỏ kinh phí đề tài - Bối cảnh: THAMGIADT, DETAI - Biểu diễ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 THAMGIADT + − + (PHUCAP) DETAI + − + (KINHPHI) R16 Sửa © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 35 RBTV - Thuộc tính tổng hợp ▪ Thuộc tính tổng hợp (cịn gọi thuộc tính suy diễn) - Là thuộc tính có giá trị tính tốn từ thuộc tính khác ▪ Khi CSDL có thuộc tính tổng hợp - RBTV bảo đảm quan hệ thuộc tính tổng hợp thuộc tính nguồn © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 36 18 2/20/2019 Ví dụ 17 ▪ BOMON(MABM, TENBM, TRUONGBM, NGAYNHANCHUC, ▪ SO_GV) Số giáo viên môn phải tổng số lượng giáo viên thuộc mơn đó - Bối cảnh: GIAOVIEN, BOMON - Biểu diễn: (t)(BOMON(t) t.SO_GV = card({ s|GIAOVIEN(s) s.MABM = t.MABM})) - Bảng tầm ảnh hưởng: Thêm Xóa GIAOVIEN + + BOMON + − R17 Sửa + (MABM) + (SO_GV) © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 37 RBTV – Chu trình ▪ Lược đồ CSDL biểu diễn đồ thị - Đỉnh Tên quan hệ • Quan hệ Tên thuộc tính • Thuộc tính - Cạnh • Đường nối đỉnh quan hệ với đỉnh thuộc tính lược đồ CSDL Tên quan hệ Tên thuộc tính ▪ Chu trình - Đồ thị xuất đường khép kín ~ Lược đồ CSDL có chu trình © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 38 19 2/20/2019 Ví dụ 17 ▪ Nhân viên phân cơng vào đề án phịng ban phụ trách PHG=PHONG DEAN MANV, MADA NHANVIEN Phân công mong muốn Phân cơng thực MANV=MA_NVIEN SODA=MADA MA_NVIEN, SODA PHANCONG © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 39 Ví dụ 17 (tt) ▪ Nhân viên phân cơng vào đề án phịng ban phụ trách - Bối cảnh: NHANVIEN, DEAN, PHANCONG - Biểu diễn: NVDA NHANVIEN PHG=PHONG DEAN (t) (PHANCONG(t) (s)(NVDA(s) t.MA_NVIEN = s.MANV t.MADA = s.SODA )) - Bảng tầm ảnh hưởng: R17 NHANVIEN Thêm − Xóa − DEAN − - PHANCONG + − © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN Sửa + (PHG) + (PHONG) + (MA_NVIEN,SODA) 40 20 2/20/2019 Ví dụ 18 ▪ ▪ ▪ ▪ ▪ DDH (SODDH, NGAYDH, MAKH) CT_DDH (SODDH, MAMH, SOLUONG, DONGIA) GIAOHANG(MAGH, NGAYGH, TONGTIEN, SODDH) CT_GH (MAGH, MAMH) Chỉ phép giao mặt hàng mà khách hàng có đặt MAGH=MAGH GIAOHANG SODDH, MAMH CT_GH Giao hàng thực đơn đặt hàng SODDH=SODDH Thông tin đặt hàng SODDH, MAMH MAMH=MAMH CT_DDH © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 41 Nội dung chi tiết ▪ ▪ ▪ ▪ Khái niệm Các đặc trưng RBTV Phân loại Cài đặt - Assertion Trigger Transaction (giao tác) Stored Procedure (thủ tục lưu trữ nội) © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 42 21 2/20/2019 Cài đặt ▪ Các RBTV cài đặt - Primary key - Foreign key - Check contraint - Assertion - Trigger - Transaction © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 43 Assertion ▪ Là biểu thức SQL mang giá trị TRUE thời điểm - Người sử dụng cần cho biết phải ▪ Cú pháp CREATE ASSERTION CHECK () DROP ASSERTION © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 44 22 2/20/2019 Ví dụ 15 ▪ Ngày sinh trưởng môn phải nhỏ ngày nhận chức CREATE ASSERTION R12 CHECK ( NOT EXISTS ( SELECT * FROM GIAOVIEN, BOMON WHERE MAGV=TRUONGBM AND NGAYSINH > NGAYNHANCHUC ) ) © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 45 Ví dụ 19 ▪ Lương trưởng mơn phải lớn 50000 CREATE ASSERTION R15 CHECK ( NOT EXISTS ( SELECT * FROM GIAOVIEN, BOMON WHERE MAGV=TRUONGBM AND LUONG < 50000 ) ) © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 46 23 2/20/2019 Ví dụ 19 (tt) ▪ Lương trưởng môn phải lớn 50000 Check Constraint ALTER TABLE BOMON ( TENBM NVARCHAR(50) UNIQUE, MABM CHAR(10) NOT NULL, TRUONGBM CHAR(10), NGAYNHANCHUC DATETIME, CONSTRAINT CHK_BM_LUONGTRUONGBM CHECK ( TRUONGBM NOT IN (SELECT MAGV FROM GIAOVIEN WHERE LUONG = ALL ( SELECT COUNT(MAGV) FROM GIAOVIEN GROUP BY MABM ) ) © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 48 24 2/20/2019 Ví dụ 16 (tt) ▪ Số lượng giáo viên môn không 20 người Check Constraint ALTER TABLE GIAOVIEN ADD CONSTRAINT CHK_GV_SLGVBM CHECK ( 20 >= ALL ( SELECT COUNT(MAGV) FROM GIAOVIEN GROUP BY MABM )) © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 49 Trigger ▪ Là tập hợp lệnh thực tự động xuất biến cố thêm xóa sửa trước sau giá trị giá trị cũ Biến cố Điều kiện Không thỏa Thỏa Tập hợp lệnh row-level statement-level Thơng báo lỗi © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 50 25 2/20/2019 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 © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 51 Ví dụ 15 ▪ Lương trưởng môn phải lớn 50000 CREATE TRIGGER TR_BM_UPD AFTER UPDATE OF TRUONGBM ON BOMON REFERENCING NEW ROW AS NewTuple FOR EACH ROW WHEN (50000 >= (SELECT LUONG FROM GIAOVIEN WHERE MAGV=NewTuple.TRUONGBM)) Thông báo lỗi cho người dùng © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 52 26 2/20/2019 Ví dụ 15 (tt) ▪ Lương trưởng môn phải lớn 50000 CREATE TRIGGER TR_BM_UPD AFTER UPDATE OF TRUONGBM ON BOMON REFERENCING NEW ROW AS NewTuple OLD ROW AS OldTuple FOR EACH ROW WHEN (50000 >= (SELECT LUONG FROM GIAOVIEN WHERE MAGV=NewTuple.TRUONGBM)) UPDATE BOMON SET TRUONGBM=OldTuple.TRUONGBM WHERE TRUONGBM=NewTuple.TRUONGBM © Bộ mơn HTTT - Khoa CNTT - Trường ĐH KHTN 53 Ví dụ 15 (tt) ▪ Lương trưởng môn phải lớn 50000 CREATE TRIGGER TR_BM_UPD AFTER UPDATE OF LUONG ON GIAOVIEN REFERENCING NEW ROW AS NewTuple OLD ROW AS OldTuple FOR EACH ROW WHEN (NewTuple.LUONG