Thuật toán 2.2(Phân mảnh W thành các Wi có nối không mất thông tin): Input: W = <R, F>;
Ouput: W1, W2,...Wk có nối không mất
Quy trình:
Phân mảnh W thành từng cặp có nối không mất, Đầu tiên phân mảnh W thành Wl và phân mảnh Wcl. Coi phần còn lại Wcl là W. Sau đó lại phân W thành W2 và Wcl còn lại có nối không mất. Quá trình tiếp tục cho đến là
không phân mảnh được nữa, thêm W còn lại cuối cùng vào phân mảnh. Theo định lý và bổ đề ở trên, ta có phân mảnh có nối không mất thông tin. Chẳng hạn, giả sử F = {X Y} là tập các phụ thuộc hàm.
Đặt W = <XY, XY>; Rcl = R – Y; Fcl =
c l R
(F); Wcl = <R, F>. Theo định lý 2.1 khi đó Rl = XY, Rcl = R – Y có nối không mất ứng với F ta coi
<Rcl, Fcl> là W tiếp tục phân mảnh cho đến khi không phân mảnh được nữa thêm W cuối cùng vào phân mảnh
Thuật toán được đặc tả như sau: Begin
R:= R; ** R là lược đồ ban đầu** F:= {X Y} * F là tập phụ thuộc hàm* Repeat W1 := Fk; Fk := <XY, XY>; R:= R-Y; F := c l R (F) {W còn lại := <R, F>} k:= k + 1; Until Rc l(F) = ; Wi = <R, >;
** Phân mảnh= (R1,…… Rk) có nối không mất thông tin ứng với F** End
Ví dụ 2.3:
Xét W = {G, C, H, P, S, T}, {CT, HPC, HTP, CSG, HSP} Khi đó ta có phân mảnh theo thuật toán 2.2:
W1 = <R1, F1><CT, CT>; Wcl = <CGHPS>; {HPC, CSG, HSP> W2 = <R2, F2><HPC, HPC>; Wcl = <GHPS, HSP>
W3 = <R3, F3><HSP, HSP>; Wcl = <GHS, >
W4 = <R4, F4><GHS, > khi đó = (R1,…… Rk) có nối không mất thông tin ứng với F
Kiểm tra tính nối không mất bằng thuật toán Chase: Để cho tiện trong các bảng kiểm tra ta thêm cột các R. Bảng khởi đầu (các ô rỗng chứa các bịj)
C G H P S T
R1 a a
R2 a a a
R3 a a a
Bảng sau khi sửa cho phù hợp với các phụ thuộc hàm C G H P S T R1 a a R2 a a a a R3 a a a a a R4 a a a a a a
Bảng có một dòng toàn a nên phân mảnh có nối không mất thông tin.
Chú ý [8]: với một sơ đồ quan hệ W = <R, F>, có thể có nhiều cách phân mảnh R thành các lược đồ con có nối không mất thông tin ứng với F.