Input: Lược đồ quan hệ R(Ω) với Ω = {A1, A2,..., An} và tập phụ thuộc hàm F.
Phép tách R(Ω) thành m lược đồ con R1(Ω1), R2(Ω2), ... , Rm(Ωm)
Output: Khẳng định phép tách có bảo toàn thông tin hay không.
Bước 1: Tạo một ma trận S có m hàng và n cột. Mỗi cột tương ứng với một thuộc tính Aj trong Ω và mỗi hàng tương ứng với một lược đồ quan hệ con Ri(Ωi) .
Bước 2: Đặt phần tử S(i, j) của ma trận nhận giá trị bằng 1 nếu Aj∈ Ωi và ngược lại, S(i, j) nhận giá trị bằng 0 nếu Aj Ω∉ i
Bước 3: Lặp lại thao tác sau đây cho tới khi nào không còn sự thay đổi trong ma trận S: Với mỗi phụ thuộc hàm X → Y trong F, xác định các hàng trong S có chứa các giá trị 1 như nhau trong các cột ứng với các thuộc tính trong X. Nếu có một hàng trong số đó chứa giá trị 1 trong các cột ứng với tập thuộc tính Y thì làm cho các cột tương ứng của các hàng khác cũng chứa giá trị 1.
Bước 4: Nếu tồn tại 01 hàng có chứa toàn giá trị 1 thì phép tách là bảo toàn thông tin, ngược lại là không bảo toàn.
Ví dụ 6.9: Cho lược đồ quan hệ
PhanCong(MaNV, TenNV, ChuyenMon, MaDA, TenDA, DiaDiem, NgayBD, NgayKT) Và tập phụ thuộc hàm:
F = { MaNV → TenNV, ChuyenMon; MaDA → TenDA, DiaDiem; MaDA → TenDA, DiaDiem;
MaNV, MaDA → NgayBD, NgayKT }
Người ta tách lược đồ quan hệ PhanCong thành các lược đồ con sau đây:
NhanVien(MaNV, TenNV, ChuyenMon)
DuAn(MaDA, TenDA, DiaDiem)
PhanCongNV(MaNV, MaDA, NgayBD, NgayKT) Hỏi phép tách trên có bảo toàn thông tin không?
Giải
MaNV TenNV ChuyenMon MaDA TenDA DiaDiem NgayBD NgayKT
NhanVien 1 1 1 0 0 0 0 0
DuAn 0 0 0 1 1 1 0 0
PhanCongNV 1 0 0 1 0 0 1 1
MaNV TenNV ChuyenMon MaDA TenDA DiaDiem NgayBD NgayKT
NhanVien 1 1 1 0 0 0 0 0
DuAn 0 0 0 1 1 1 0 0
28
6.3.2. PHÉP TÁCH BẢO TOÀN TẬP PHỤ THUỘC HÀM