- Ví dụ2: Cho quan hệ R= (ABCDGH ), khoá là AB và tập phụ thuộc hàm
Phân rã nối không mất thành BCNF.
Thuật toán:
INPUT: Lược đồ quan hệ R, tập phụ thuộc hàm F.
OUTPUT: Một phân rã của R có nối khơng mất, sao cho mỗi lược đồ quan hệ trong phân rã có dạng BCNF.
Phương pháp: Phân rã lược đồ R thành hai lược đồ.
Lược đồ 1: Có tập các thuộc tính XA, có dang BCNF và phụ thuộc X -> A đúng. Lược đồ 2: R – A.
Lặp lại phân rã trên với R – A ở vị trí ủa R cho đến khi khơng thể phân rã được nữa hoặc lược đồ chỉ cịn 2 thuộc tính.
Bổ đề:
Mỗi lược đồ có 2 thuộc tính đều có dạng BCNF.
Nếu R khơng có dạng BCNF thì ta có thể tìm được các thuộc tính A và B trong R sao cho (R – AB) -> A.( có thể (R – AB) -> B cũng đúng). Điều ngược lại có thể khơng đúng. Chương trình: Chương trinh chính: BEGIN : Z := R; REPEAT
Phân rã Z thành Z – A và XA /* gọi thủ tục con */ Thêm XA và phân rã;
UNTIL Không thể phân rã Z Thêm Z vào phân rã.
END.
Thủ tục phân rã:
BEGIN
IF Z khơng chứa AB sao cho A Ỵ (Z – AB)+THEN RETURN Z có dạng BCNF và khơng phân rã được ELSE
BEGIN
Tìm một căp A và B; Y:=Z;
WHILE Y chứa A và B sao cho (Y – AB) -> A DO Y := Y – B;
RETURN phân rã Z –A và Y /* Y là XA trong CT chính*/ END;
END;
Ví dụ:
Cho lược đồ quan hệ R(U) = CTHRSG và tập phụ thuộc hàm F = {C -> T, HR -> C, CS-> G, HS -> R}
Áp dụng thuật tốn:
• Y = CTHRSG, A = C, B =T, C Ỵ (HRSG)+=> Y = CHRSG • Y = CHRSG, A = R, B = C, R Ỵ (HSG)+=> Y = HRSG • Y = HRSG ,A = R, B = G, R Ỵ (HS)+=> Y = HRS
• Khơng phân rã được nữa, HRS là một lược đồ trong phân rã. • Z = CTHRSG – R = CTHSG
• Y = CTHSG, A = T, B = H, T Ỵ (CSG)+=> Y = CTSG • Y = CTSG, A = T, B = S, T Ỵ (CS)+=> Y = CTG • Y = CTG, A = T, B = G, T Ỵ (C)+=> Y = CT • CT là một lược đồ trong phân rã.
• Z = CSHG
• Tiếp tục với Y = CSHG • …..
• Cuối cùng được phân rã (HRS, CT, CSG, CHS)