1.1 .1Khái niệm về cơ sở dữ liệu
5.5. Dạng chuẩn 3: BCNF (Boyce Codd Normal Form)
5.5.1 Định nghĩa
Một quan hệ R ở dạng chuẩn BCNF nếu mọi định thuộc đều là khĩa.
Thuộc tính X được gọi là định thuộc nếu X định trị hàm 1 thuộc tính khác nghĩa là X cĩ phụ thuộc hàm với thuộc tính khác.
Ví dụ : R (S#, P# , SNAME, QTY)
S#, P# QTY
SNAME, P# QTY
S# SNAME
SNAME S#
R khơng phải dạng chuẩn BCNF
Nếu muốn đạt dạng chuẩn BCNF ta phải tách R thành 2 quan hệ R1 và R2: R1 (S#, P# , Qty)
R2 (S# , Sname)
5.5.2 Giải thuật phân rã bảo tồn thơng tin thành dạng chuẩn BCNF
Bổ đề 1
Giả sử R là một lược đồ quan hệ với tập phụ thuộc hàm F. Gọi =(R1,R2, ..., Rn) là một phân rã của R bảo tồn thơng tin tương ứng với F và giả sử =(S1, S2) là một phân rã của R1 bảo tồn thơng tin tương ứng với R1(F). Khi đĩ phân rã của R thành tập (S1, S2, R2, ... ,Rn) là bảo tồn thơng tin tương ứng với F.
Bổ đề 2
Mọi quan hệ cấp 2 ( Chỉ cĩ hai thuộc tính) đều ở dạng chuẩn BCNF Nếu R khơng ở dạng chuẩn BCNF, ta sẽ tìm được 2 thuộc tính A,B trong R sao cho (R-AB) -> A hay (R -AB) ->B
Giải thuật phân rã bảo tồn thơng tin thành dạng chuẩn BCNF
Vào: Lược đồ quan hệ R và tập phụ thuộc hàm F
Ra: Một phân rã bảo tồn thơng tin sao cho các lược đồ quan hệ con nhận được ở dạng chuẩn BCNF ứng với hình chiếu của F trên lược đồ này.
Phương pháp: Trọng tâm của giải thuật là phân rã lược đồ quan hệ R thành hai lược đồ quan hệ. Một lược đồ quan hệ cĩ tập thuộc tính XA, nĩ cĩ dạng BCNF và phụ thuộc hàm X -> A là đúng. Lược đồ quan hệ thứ hai R-A, do đĩ phân rã R-A, XA là bảo tồn thơng tin. Thực hiện đệ qui thủ tục phân rã với R-A cho đến khi đạt được lược đồ quan hệ đáp ứng với điều kiện bổ đề 2b để lược đồ quan hệ này ở dạng BCNF. Thế thì bổ đề 1 bảo đảm rằng lược đồ quan hệ này cộng với các lược đồ quan hệ BCNF được tạo ra từ mỗi đệ qui là bảo tồn thơng tin.
Chương trình chính
Z := R; // T là phần cịn lại của R sau mỗi đợt phân rã Repeat
decompose((T,R1,R2); //T được phân rã thành R1=XA và R2=T-A (X->A) if R1 then Bổ sung R1 vào phân rã ;
T := R2; until R1 = ;
Bổ sung T vào phân rã .
Chương trình con Decompose(T,R1,R2)
if T khơng chứa cặp thuộc tính{A,B}sao cho A (T -AB)+F Then Trả lại R1 := ; R2 := T; // T Đã ở dạng BCNF
else Begin
Chọn ra cặp {A,B} như vậy; // A (T -AB)+F
R1 := T -B; // R1 = XA và thoả X ->A nhưng chưa chắc ở BCNF While R1 cịn chứa cặp thuộc tính{A,B}sao cho A (T -AB)+F Do R1 := R1 - B;
Return R1, R2 := T-A; end;
Ví dụ: Xét lược đồ quan hệ R(CTHRSG) và tập phụ thuộc hàm F F = {C -> T, CS ->G, HR -> C, HS -> R, HT -> R}