Xem mẫu

  1. Chương 5. Ràng buộc toàn vẹn 5. GV: Trần Ngân Bình tnbinh@cit.ctu.edu.vn
  2. Nội dung Ràng buộc toàn vẹn (RBTV) Cài đặt RBTV khi tạo bảng bằng CREATE TABLE Phụ thuộc hàm Bao đóng của tập thuộc tính Bao đóng của tập phụ thuộc hàm Tập phụ thuộc hàm tối tiểu Tập phụ thuộc hàm rút gọn tự nhiên 5. 2
  3. Khái Niệm Ràng Buộc Toàn Vẹn Trong một CSDL, luôn tồn tại rất nhiều mối quan hệ ràng buộc giữa các thuộc tính, các bộ với nhau,... Các mối quan hệ này là các điều kiện bất biến mà tất cả các bộ của các quan hệ trong CSDL phải thỏa mãn ở bất cứ thời điểm nào. Các điều kiện này được gọi là ràng buộc toàn vẹn (RBTV). Vd: Trong CSDL “QLSV” như sau: 1. SV (MASV, HOTEN_SV, NU, SO_CMND, NGSINH, ÐCHI_SV, TINH, MAKHOA) 2. KHOA (MAKHOA, TENKHOA) 3. MONHOC (MAMH, TENMH, SOTIET) 4. KETQUA (MASV, MAMH, HK, NK, LANTHI, ÐIEM) Có các ràng buộc: C1 : Mỗi sinh viên có một mã số riêng biệt không trùng với bất cứ sinh viên nào khác. C2 : Mỗi sinh viên phải đăng ký vào một khoa của trường. C3 : Mỗi sinh viên được thi tối đa hai lần cho 1 môn trong 1 HK. 5. 3
  4. Điều kiện & bối cảnh RBTV 1. Ðiều kiện của RBTV: được biểu diễn bằng ngôn ngữ tự nhiên, ngôn ngữ giả, đại số quan hệ, hay phụ thuộc hàm,... Vd: Các điều kiện trên được biểu diễn như sau: C1: ∀ u ∈SV, ∀ v ∈ SV: uv u.MASV v.MASV C2 : SV[MAKHOA] ⊆ KHOA[MAKHOA] C3 : ∀ sv ∈ KETQUA Card({k ∈ KETQUA | ∧ k.MASV = sv.MASV ∧ k. MAMH = sv.MAMH ∧ k.HK= sv.HK ∧ k.NK = sv.NK })
  5. Bảng Tầm Ảnh Hưởng 3. Bảng tầm ảnh hưởng của RBTV: Khi thực hiện một thao tác cập nhật trên bối cảnh của một RBTV C có thể dẫn đến C bị vi phạm. Bảng tầm ảnh hưởng cho một RBTV xác định thời điểm cần kiểm tra RBTV đó. Bảng tầm ảnh hưởng của một RBTV Ci có dạng như sau: Ci : có bối cảnh là R1, R2, ..., Rn. Ci Thêm Sửa Xóa Dấu + : cần phải kiểm tra Ci. R1 + + - R2 - - + Dấu - : không cần kiểm tra Ci. … Dấu * : Không được sửa giá trị khoa chính Rn - + - Vd: Bảng tầm ảnh hưởng của C1, C2, C3 C1 Thêm Sửa Xóa như sau: SV + - (*) - C2 Thêm Sửa Xóa C3 Thêm Sửa Xóa SV + + - KETQUA + - (*) - KHOA - - (*) + 5. 5
  6. Bảng Tầm Ảnh Hưởng Tổng Hợp Bảng tầm ảnh hưởng tổng hợp của tất cả các RBTV: Các cột là các thao tác cập nhật trên từng quan hệ. Các dòng là các RBTV. Vd: Từ các bảng tầm ảnh hưởng trên, ta có bảng tầm ảnh hưởng tổng hợp như sau: SV KHOA KETQUA T S X T S X T S X C1 + - - C2 + + - - - + C3 + - - Dựa vào bảng tầm ảnh hưởng tổng hợp này, chúng ta sẽ dễ dàng xác định cần phải tiến hành kiểm tra các RBTV nào khi người sử dụng thực hiện một thao tác cập nhật. 5. 6
  7. Phân Loại các RBTV Các RBTV có thể được phân loại theo ý nghĩa như đã giới thiệu trong chương 2: Toàn vẹn thực thể Toàn vẹn tham chiếu Toàn vẹn miền giá trị Toàn vẹn về logic (hay RB khác) Tuy nhiên, ta cũng có thể phân chia các RBTV theo phạm vi áp dụng của nó: RBTV trên một quan hệ RBTV liên quan hệ 5. 7
  8. Phân Loại các RBTV (1) Loại RBTV 1: là những RBTV có bối cảnh là một quan hệ: 1. RBTV về miền trị: liên quan đến miền giá trị của một thuộc tính. Vd: NGSINH < date() 0 < ÐIEM < 10 0 < SOTIET
  9. Phân Loại các RBTV (2) 3. RBTV liên bộ: là sự ràng buộc giữa các bộ bên trong một quan hệ, trong đó phổ biến là RBTV về khóa nội. Vd:- MASV là duy nhất trong QH SV. (MASV là khóa của QH SV). - Mỗi sinh viên được thi tối đa 2 lần cho một môn. RBTV về khóa nội là một RBTV liên bộ rất phổ biến, chúng thường được biểu diễn bằng các phụ thuộc hàm, và thường được các hệ quản trị CSDL hổ trợ tự động kiểm tra. Loại RBTV 2: Là các RBTV có bối cảnh gồm nhiều quan hệ: 1. RBTV về phụ thuộc tồn tại (RBTV về khóa ngoài): Nếu ∃ kq ∈ KETQUA, kq.MASV =’01’ Vd: Thì phải ∃ s ∈ SV: sv.MASV =’01’ 5. 9
  10. Phân Loại các RBTV (2) 2. RBTV liên thuộc tính, liên quan hệ: là mối liên hệ giữa các thuộc tính của nhiều quan hệ khác nhau. Vd: Giữa hai quan hệ DATHANG và HOADON của CSDL “QLBH”, có ràng buộc như sau: Nếu ∃ hd ∈ HOADON, dh ∈ DATHANG, hd.SO_DDH = dh.SO_DDH thì dh.NGAY_DH
  11. Phân Loại các RBTV (4) 4. RBTV về thuộc tính tổng hợp: RBTV này được xác định trong trường hợp một thuộc tính A của một quan hệ R được tính toán từ các thuộc tính của các quan hệ khác. Vd 1: Trị giá của hóa đơn bằng tổng các GIABAN * SL của các mặt hàng trong hóa đơn đó: hd.TRIGIA = Σ ( cthd.GIABAN * cthd. SL) cthd.SO_HD = hd.SO_HD Vd 2: Số tiền công nợ của một khách hàng A sẽ bằng hiệu số giữa tổng giá trị của các hóa đơn bán cho khách hàng A và tổng số tiền thu của khách hàng đó: ∀ kh ∈ KHACH: kh.CONGNO = Σ hd.TRIGIA - Σ pt.SOTIEN hd ∈ Hkh pt ∈ Pkh với Hkh = (HOADON * DATHANG) (MAKH = kh.MAKH) Pkh = PHIEUTHU (MAKH = kh.MAKH) 5. 11
  12. Phân Loại các RBTV (5) 5. RBTV do có chu trình trong đồ thị biểu diễn của lược đồ CSDL: Một lược đồ CSDL có thể được biểu diễn bằng một đồ thị vô hướng. Trong đồ thị này, ta có 2 loại nút: nút thuộc tính và nút quan hệ. Một cung vô hướng trong đồ thị nối 1 nút thuộc tính A với một nút quan hệ R khi A thuộc R. Vd: Một phần đồ thị biểu diễn cho CSDL “QLBH” có dạng như sau: NGAY_HD SO_DDH NGAY_DH Hóa đơn SO_HD Đặt hàng CT_HD MAHH GIABAN SL 5. 12
  13. Phân Loại các RBTV (6) Trong hình vẽ trên, chúng ta nhận thấy đồ thị biểu diễn có chứa một chu trình gồm 3 quan hệ DATHANG, HOADON, CT_HD. Như vậy, CSDL sẽ phải có một RBTV thuộc 1 trong 3 trường hợp sau: Một hóa đơn thực hiện cho một đơn đặt hàng chỉ giao những mặt hàng mà khách yêu cầu và phải gồm đầy đủ tất cả những mặt hàng có trong đơn đặt hàng đó. Một hóa đơn thực hiện cho một đơn dặt hàng chỉ giao những mặt hàng mà khách yêu cầu và có thể không giao đầy đủ tất cả các những mặt hàng có trong đơn đặt hàng đó. Một hóa đơn thực hiện cho một đơn đặt hàng có thể gồm tùy ý các mặt hàng dù có hay không trong đơn đặt hàng của khách. RBTV này thể hiện sự tương giao giữa 2 tập hợp A và B với: A = DATHANG[SO_DDH, MAHH] B = (HOADON * CT_HD)[SO_DDH, MAHH] Trường hợp thứ nhất: A=B Trường hợp thứ hai: A ⊇ B Trường hợp thứ ba: A ⊄ B và B ⊄ A. 5. 13
  14. Cài Đặt RBTV Hầu hết các HQTCSDL đều cung cấp công cụ để cài đặt RBTV trên các bảng dữ liệu. Toàn vẹn thực thể: PRIMARY KEY, UNIQUE KEY Toàn vẹn tham chiếu: FOREIGN KEY Toàn vẹn miền giá trị: CHECK, RULE, DEFAULT VALUE, … Toàn vẹn về logic (hay RB khác): TRIGGER Việc cài đặt các RBTV có thể thực hiện: Trong khi tạo bảng: CREATE TABLE Sau khi tạo bảng: ALTER TABLE 5. 14
  15. CREATE TABLE – Ràng Buộc Trên Cột CREATE CREATE TABLE ( { { | } [ NOT NULL ] [ PRIMARY KEY | UNIQUE ] [ DEFAULT ] [ CHECK ()] [ REFERENCES [()] [MATCH { FULL| PARTIAL | SIMPLE } ] [ON UPDATE ] [ON DELETE ] ] [,...] } ) Hành_động: CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION 5. 15
  16. Ví dụ Tạo Bảng có RB Trên Cột CREATE TABLE NhaXB ( MaNXB char(4) NOT NULL CONSTRAINT PK_NXB PRIMARY KEY CHECK (MaNXB IN ('1389', '0736', '0877', '1622', '1756') OR MaNXB LIKE '99[0-9][0-9]'), TenNXB varchar(40) NULL, ThPho varchar(20) NULL, ) QGia varchar(30) NULL DEFAULT(‘VietNam') CREATE TABLE NhanVien( MaNV char(9) PRIMARY KEY CHECK (MaNV LIKE '[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]‘) , TenNV varchar(30) NOT NULL, MaNXB char(4) NOT NULL DEFAULT ('9952') REFERENCES NhaXB(MaNXB), NgayVao datetime NOT NULL DEFAULT (getdate() ) MaSep char(9) ) 5. 16
  17. CREATE TABLE – Ràng Buộc Trên Bảng CREATE CREATE TABLE ( { { | } [,...] } [, PRIMARY KEY () ] { [, UNIQUE (),] [, ...] } { [, FOREIGN KEY () REFERENCES [(khóa_ứng_viên)], [MATCH { FULL| PARTIAL | SIMPLE } ] [ON UPDATE ] [ON DELETE ] ] [,...] } { [, CHECK () [,...] } ) Hành_động: CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION 5. 17
  18. Ví dụ Tạo Bảng có RB Trên Bảng CREATE TABLE Sach_TacGia ( MaTG char(11) REFERENCES TacGia(MaTG) NOT NULL, MaSach char(6) NOT NULL, ThuTuTG smallint NOT NULL, PRIMARY KEY (MaTG, MaSach), UNIQUE (MaSach, ThuTuTG), //Khóa ứng viên FOREIGN KEY (MaSach) REFERENCES Sach(MaSach) ON DELETE RESTRICT ) 5. 18
  19. Thiết Lập Toàn Vẹn Sau Khi Tạo Bảng ALTER TABLE [ ADD [COLUMN] {
  20. Ví Dụ Thêm RB Trên Bảng ALTER TABLE NhanVien ADD CONSTRAINT FK_MaSep FOREIGN KEY (MaSep) REFERENCES NhanVien(MaNV) ALTER TABLE NhanVien ALTER COLUMN NgayVao DROP DEFAULT ALTER TABLE NhanVien DROP CONSTRAINT FK_MaSep ALTER TABLE NhanVien ADD COLUMN Mobile char(15) UNIQUE 5. 20
nguon tai.lieu . vn