6 Chương PHỤ THUỘC HÀM VÀ CHUẨN HOÁ QUAN HỆ
6.3.2 Phép phân rã các lược đồ quan hệ
6.3.2.1 Định nghĩa
Phép phân rã các lược đồ quan hệ R={A1, A2, . . . , An}là việc thay thế lược đồ
quan hệ R thành các lược đồ con {R1, . . . , Rk}, trong đó Ri⊆R và R=R1 ∪ R2…∪ Rk Vídụ: Cho quan hệ R với các phụ thuộc hàm như sau:
R(MaSV, MaMH, TenMH, ĐVHT, TenSV, Lop)
Ta có thể phân rã thành 3 lược đồ R1(MaSV, TenSV, Lop) và R2(MaMH,TenMH, ĐVHT) và R3(MaSV, MaMH).
6.3.2.2 Phép phân rã không mất mát thông tin
Cho R là một lược đồ quan hệ, phép rã ρ=(R1,R2, . . .,Rn) và D là tập các phụ
thuộc dữ liệu. Phép phân rã ρ không mất mát thông tin nếu khi thực hiện phép toán kết nối tự nhiên các quan hệ thành phần R1, R2,…,Rn ta vẫn nhận được kết quả của quan hệ ban đầu.
Ví dụ về một phép phân rã có mất mát thông tin: Cho quan hệ:
MaSV MaMH Điem 1 A 3 2 A 5 3 A 6 4 B 6 5 C 9 Nếu ta phân rã quan hệ trên thành 2 quan hệ: R1(MaSV, MaMH) và R2(MaMH, Điem) như sau:
R1: R2: MaSV MaMH 1 A 2 A 3 A 4 B 5 C Thực hiện phép kết nối tự nhiên 2 quan hệ R1 và R2: R1*R2=
MaSV MaMH Điem
1 A 3 1 A 5 1 A 6 2 A 3 2 A 5 2 A 6 3 A 3 3 A 5 3 A 6 4 B 6 5 C 9
Như vậy, khi nối tự nhiên 2 bảng, ta nhận được quan hệ không giống quan hệ
ban đầu Phép phân rã trên là mất mát thông tin.
Vấn đề đặt ra đối với người thiết kế là phải tìm ra những phép phân rã không làm mất mát thông tin (chi tiết sẽđược trình bày ở phần sau). Bây giờ chúng ta sẽ tìm hiểu một thuật toán để kiểm tra một phép phân rã có mất mát thông tin hay không.
6.3.2.3 Thuật toán kiểm tra phép phân rã không mất mát thông tin
Input:
- Lược đồ quan hệ R={A1, A2, . . . , An} - Tập các phụ thuộc hàm F - Phép tách ρ(R1, R2, . . . , Rk) MaMH Điem A 3 A 5 A 6 B 6 C 9
Output: Kết luận phép tách ρ không mất mát thông tin.
Các bước của thuật toán:
Bước 1:
- Thiết lập một bảng với n cột (tương ứng với n thuộc tính) và k dòng (tương ứng với k quan hệ), trong đó cột thứ j ứng với thuộc tính Aj, dòng thứ i ứng với lược đồ Ri.
- Tại dòng i và cột j, ta điền ký hiệu aj nếu thuộc tinh Aj∈Ri.Ngược lại ta điền ký hiệu bij.
Bước 2:
- Xét các phụ thuộc hàm trong F và áp dụng cho bảng trên.
- Giả sử ta có phụ thuộc hàm X→Y∈F, xét các dòng có giá trị bằng nhau trên thuộc tính X thì làm bằng các giá trị của chúng trên Y. Ngược lại làm bằng chúng bằng ký hiệu bij. Tiếp tục áp dụng các pth cho bảng (kể cả việc lặp lại các phụ thuộc hàm đã áp dụng) cho tới khi không còn áp dụng được nữa.
Bước 3:
Xem xét bảng kết quả. Nếu xuất hiện một dòng chứa toàn giá trị a1, a2 ,…,an
thì kết luận phép tách ρ không mất mát thông tin. Vi dụ: Cho quan hệ:
Hình 6.15. Minh họa dữ liệu của quan hệ EMP_DEPT
Hình 6.16. Quan hệ EMPLOYEE được phân rã (tách) thành 2 quan hệ
Tập phụ thuộc hàm F:
Kiểm tra phép tách trên là không mất mát thông tin: Bước 1:
EName SSN BDate Address DNumber DName DMgrSsn
EMPLOYEE a1 a2 a3 a4 a5 b16 b17
DEPARTMENT b21 b22 b23 b24 a5 a6 a7
Bước 2: Xét phụ thuộc hàm DNumber DName, DMgrSsn. Ta nhận thấy có giá trị a5 ở dòng thứ 2, nên ta sẽ làm bằng giá trị a6, a7 cho dòng thứ 1.
Bước 3: Tồn tại một dòng chứa giá trị a1, a2,..a7. Kết luận, phép phân rã trên không mất mát thông tin.
EName SSN BDate Address DNumber DName DMgrSsn
EMPLOYEE a1 a2 a3 a4 a5 a6 a7
DEPARTMENT b21 b22 b23 b24 a5 a6 a7
Ghi chú: Sinh viên thực hiện phép nối tự nhiên 2 quan hệ EMPLOYEE và DEPARTMENT trên để kiểm tra có bằng quan hệ ban đầu EMP_DEPT