Phân rã nối không mất thành BCNF.

Một phần của tài liệu Tài liệu Cơ sở dữ liệu (Trang 38)

- 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 toá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)

Một phần của tài liệu Tài liệu Cơ sở dữ liệu (Trang 38)