Trong quá trình phân tích thiết kế CSDL, người phân tích phải phát hiện tất cả các ràng buộc toàn vẹn tiềm ẩn trong CSDL đó. Việc phân loại các ràng buộc toàn vẹn là rất có ích, nó nhằm giúp cho người phân tích có được một định hướng để phát hiện các ràng buộc toàn vẹn, tránh bỏ sót. Các ràng buộc toàn vẹn có thể được chia làm hai loại chính như sau:
- Thứ nhất: Ràng buộc toàn vẹn có phạm vi là một quan hệ bao gồm:
Ràng buộc toàn vẹn miền giá trị, ràng buộc toàn vẹn liên thuộc tính, ràng buộc toàn vẹn liên bộ.
Thứ hai: Ràng buộc toàn vẹn có phạm vi là nhiều quan hệ bao gồm: Ràng
buộc toàn vẹn phụ thuộc tồn tại, ràng buộc toàn vẹn liên bộ - liên quan hệ, ràng buộc toàn vẹn liên thuộc tính - liên quan hệ.
Để minh hoạ, chúng ta xét ví dụ sau đây: Ví dụ 1.9:
Cho một CSDL C dùng để quản lý việc đặt hàng và giao hàng của một công ty. Lược đồ CSDL C gồm các lược đồ quan hệ sau:
Q1: Khach (MAKH, TENKH, DIACHIKH, DIENTHOAI)
Mỗi khách hàng có một mã khách hàng (MAKH) duy nhất, mỗi MAKH xác định tên khách hàng (TENKH), địa chỉ (DIACHIKH), số điện thoại (DIENTHOAI).
Q2: Hang (MAHANG, TENHANG, QUYCACH, DVTINH)
Mô tả:
Mỗi mặt hàng có một mã hàng (MAHANG) duy nhất, mỗi MAHANG xác định tên hàng (TENHANG), quy cách hàng (QUYCACH), đơn vị tính (DVTINH).
Q3: Dathang (SODH, MAHANG, SLDAT, NGAYDH, MAKH)
Mô tả:
Mỗi mã số đặt hàng (SODH) xác định một ngày đặt hàng (NGAYDH) và mã khách hàng tương ứng (MAKH). Biết mã số đặt hàng và mã mặt hàng thì biết được số lượng đặt hàng (SLDAT). Mỗi khách hàng trong một ngày có thể có nhiều lần đặt hàng.
Q4: Hoadon (SOHD, NGAYLAP, SODH, TRIGIAHD, NGAYXUAT)
Mô tả:
Mỗi hoá đơn tổng hợp có một mã số duy nhất là SOHD, mỗi hoá đơn bán hàng có thể gồm nhiều mặt hàng. Mỗi hoá đơn xác định ngày lập hoá đơn (NGAYLAP), ứng với số đặt hàng nào (SODH). Giả sử rằng hoá đơn bán hàng theo yêu cầu của chỉ một đơn đặt hàng có mã số là SODH và ngược lại, mỗi đơn đặt hàng chỉ được giải quyết chỉ trong một hoá đơn. Do điều kiện khách quan có thể công ty không giao đầy đủ các mặt hàng cũng như số lượng từng mặt hàng yêu cầu trong đơn đặt hàng nhưng không bao giờ giao vượt ngoài yêu cầu. Mỗi hoá đơn xác định một trị giá của những mặt hàng trong hoá đơn (TRIGÍAHD) và một ngày xuất kho giao hàng cho khách (NGAYXUAT).
Q5: Chitiethd (SOHD, MAHANG, GIABAN, SLBAN)
Mô tả:
Mỗi SOHD, MAHANG xác định giá bán (GIABAN) và số lượng bán (SLBAN) của một mặt hàng trong một hoá đơn.
Mô tả:
Mỗi phiếu thu có một số phiếu thu (SOPT) duy nhất, mỗi SOPT xác định một ngày thu (NGAYTHU) của một khách hàng có mã khách hàng là MAKH và số tiền thu là SOTIEN. Mỗi khách hàng trong một ngày có thể có nhiều số phiếu thu.
1.2.1.3.1. Ràng buộc toàn vẹn có bối cảnh là một quan hệ:
a. Ràng Buộc Toàn Vẹn liên bộ:
+ Ràng buộc toàn vẹn về khoá chính:
Đây là một trường hợp đặc biệt của Ràng Buộc toàn Vẹn liên bộ, ràng buộc toàn vẹn này rất phổ biến và thường được các hệ quản trị CSDL tự động kiểm tra.
Ví dụ 1.10
Với r là một quan hệ trên lược đồ quan hệ Khach ta có ràng buộc toàn vẹn sau: R1 : t1, t2 r
t1.MAKH ≠ t2.MAKH
+ Ràng buộc toàn vẹn về tính duy nhất.
Ví dụ: Mỗi phòng ban phải có một tên gọi duy nhất
Ngoài ra nhiều khi ta còn gặp những ràng buộc toàn vẹn khác chẳng hạn như ràng buộc toàn vẹn sau trong quan hệ sau đây:
KETQUA(MASV, MAMH, LANTHI, DIEM) Mỗi sinh viên chỉ được đăng thi mỗi môn thi tối đa là 3 lần
b. Ràng Buộc Toàn Vẹn Về Miền Giá Trị:
Ràng buộc toàn vẹn có liên quan đến miền giá trị của các thuộc tính trong một quan hệ. Ràng buộc này thường gặp. Thông thường các hệ quản trị CSDL đã tự động kiểm tra (một số) ràng buộc loại này.
Ví dụ 1.11
Với r là một quan hệ của Hoadon ta có ràng buộc toàn vẹn sau: R3 : t r
R1 Thêm Sửa Xoá Khach + - -
t.TRIGIAHD > 0
c. Ràng Buộc Toàn Vẹn Liên Thuộc Tính:
Ràng buộc toàn vẹn liên thuộc tính (một quan hệ) là mối liên hệ giữa các thuộc tính trong một lược đồ quan hệ.
Ví dụ 1.12
Với r là quan hệ của Hoadon ta có ràng buộc toàn vẹn sau: R4 : t r
t.NGAYLAP <= t.NGAYXUAT
1.2.1.3.2. Ràng buộc toàn vẹn có bối cảnh là nhiều quan hệ:
a- Ràng Buộc Toàn Vẹn Về Khoá ngoại:
Ràng buộc toàn vẹn về khoá ngoại còn được gọi là ràng buộc toàn vẹn phụ thuộc tồn tại. Cũng giống như ràng buộc toàn vẹn về khoá nội, loại ràng buộc toàn vẹn này rất phổ biến trong các CSDL.
Ví dụ 1.13
R2.dathang[MAKH] khach[MAKH]
b- Ràng Buộc Toàn Vẹn Liên Thuộc Tính Liên Quan Hệ:
Ràng buộc loại này là mối liên hệ giữa các thuộc tính trong nhiều lược đồ quan hệ.
Ví dụ 1.14
Với r, s lần lượt là quan hệ của Dathang và Hoadon. Ta có ràng buộc toàn vẹn R5 như sau:
R5 : t1 r, t2 s
Nếu t1.SODH=t2.SODH thì t1.NGAYDH <= t2.NGAYXUAT R3 Thêm Sửa Xoá Hoadon + + -
R4 Thêm Sửa Xoá Hoadon + + -
R2 Thêm Sửa Xoá dathang + + - Khach - - +
c- Ràng Buộc Toàn Vẹn Liên Bộ Liên Quan Hệ:
Ràng buộc loại này là mối liên hệ giữa các bộ trong một lược đồ cơ sở dữ liệu. Chẳng hạn như tổng số tiền phải trả trong mỗi hoá đơn (chitiethd) phải bằng TRỊ GIÁ HOÁ ĐƠN của hoá đơn đó trong quan hệ Hoadon. Hoặc số lượng học viên trong một lớp phải bằng SOHOCVIEN của lớp đó.
Ngoài ra còn có một số loại RBTV khác như: ràng buộc toàn vẹn về thuộc tính tổng hợp, ràng buộc toàn vẹn do tồn tại chu trình, ràng buộc toàn vẹn về giá trị thuộc tính theo thời gian.