Phân mảnh dọc thành các BCNF, bảo toàn phụ thuộc, nối không mất

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu các đặc tính của phân mảnh dọc trong cơ sở dữ liệu phân tán và ứng dụng (Trang 33 - 39)

2.4. Phân mảnh dọc thành các BCNF, bảo toàn phụ thuộc, nối không mất thông tin thông tin

Trong các phần trên chúng ta đã có các thuật toán và các phép kiểm tra tương ứng cho các phân mảnh W thành;

(1) Nối không mất thông tin; (2) Bảo toàn phụ thuộc;

(3) Bảo toàn phụ thuộc và nối không mất thông tin.

Bây giờ chúng ta lần lượt xét các phân mảnh W thành các sơ đồ con BCNF có kèm theo các tính chất (1) và (2) hoặc (3)

Ở phần trên, chúng ta đã biết rằng mọi lược đồ quan hệ đều có thể phân mảnhthành các lược đồ con dạng chuẩn Boyce - Codd (BCNF), có nối không mất thông tin; Lược đồ bất kỳ nào cũng có thể phân mảnh thành dạng BCNF bảo toàn phụ thuộc.

Một vấn đề đặt ra nữa là có hay không một phân mảnh W thành các dạng BCNF có nối không mất thông tin đồng thời vẫn bảo toàn phụ thuộc và

2.4.1. Một số mệnh đề bổ trợ

Bổ đề2.2[8]:

a. Mỗi sơ đồ W = <R, F> với R có hai thuộc tính đều có dạng BCNF b. Nếu R không có dạng BCNF thì tồn tại hai thuộc tính A và B trong sao cho (R- AB)  A.

Bổ đề 2.3[8]:

Nếu chúng ta có một tập phụ thuộc F trên R và chúng ta chiếu các phụ thuộc trên R1 R để được F1 rồi lại chiếu F1 trên R2 R1 để được F2 thì F2 =

2

R

 (F)

Nghĩa là ta có thể giả sử rằng F là tập phụ thuộc của R1, dù rằng F có thể có những thuộc tính không có R1

Bổ đề 2.4[8]:

Với mọi sơ đồ quan hệ W =,R,F>, luôn tồn tại sơ đồ quan hệ W =<R, F+ sao cho F tương đương với F’ và trong F’chỉ gồm những phụ thuộc hàm mà phía bên phải của nó chỉ có một thuộc tính.

Trong các thuật toán phân mảnh sau đây ta chỉ xét những sơ đồ quan hệ W mà bên phải các phụ thuộc hàm F chỉ gồm một thuộc tính.

2.4.2. Thuật toán phân mảnh lược đồ quan hệ thành các BCNF, có nối không mất thông tin

Chúng ta có thể sử dụng các bổ đề trên để xây dựng thuật toán phân mảnh một sơ đồ quan hệ W = <R, F> thành các sơ đồ con W1 =<R1, F1> BCNF có nối không mất thông tin. Ý tưởng chính của thuật toán:

Bắt đầu từ W nếu có một vi phạm BCNF trong W, giả sử là X  A chúng ta phân mảnh R thành các lược đồ. XA và R-A. Cả hai đều nhỏ hơn R, bởi vì XA không thể bằng R (nếu bằng R thì X+= R, nên X  A sẽ không vi phạm BCNF). Theo định lý 2.1phân mảnh R thành R1 = XA và R2 = R-A có nối không mất, bời vì R1 R2 =X, R1 – R2 =A và X  A. Chúng ta tính F1, F2

là chiếu tương ứng của các phụ thuộc F trên. XA và R2 = R-A, và được haisơ đồ quan hệ con W1 =<R1,F1> =<XA,X A>, W2 =<R2, F2> với W1 là BCNF, coi W2 là W lại áp dụng tương tự như trên tìm một vi phạm trong W cho bước phân mảnh tiếp theo. Tiếp tục phân mảnh cho đến khi không thể phân mảnh tiếp theo. Tiếp tục phân mảnh cho đến khi không thể phân mảnh được nữa, nghĩa là sơ đồ quan hệ con cuối cùng cần phân mảnh hoặc có nhỏ hơn hai thuộc tính hoặc có tập thuộc tính bằng rỗng hoặc một sơ đồ quan hệ BCNF. Thêm lược đồ cuối cùng vào phân mảnh. Khi đó tất cả các sơ đồ đều có dạng BCNF sẽ là một phân mảnh có nối không mất thông tin.

Thuật toán 2.8: Phân mảnh W thành các BCNF có nối không mất thông tin

Input: W = <R,F>; F={XA}

Output: Một phân mảnh R có nối không mất thông tin, sao cho mỗi sơ đồ quan hệ con Wi = <Ri, Fi> có dạng BCNF.

Quy trình:

Trọng tâm của thuật toán là lấy lược đồ quan hệ R rồi phân mảnh nó thành hai lược đồ. Mỗi lược đồ có tập các thuộc tính XA; và sơ đồ quan hệ W=<XA, XA> là BCNF. Lược đồ thứ hai sẽ là R-A, do đó nối của R-A, với XA là nối không mất thông tin. Thực hiện đệ quy thủ tục phân mảnh, với R-A ở vị trí của R cho đến khi chúng ta đạt được kết quả mong muốn.

Z := R (* Bất kỳ lúc nào Z cũng là lược đồ phân mảnh mà có thể W không có dạng BCNF*)

K:=1; Repeat

If XA vi phạm BCNF trong W=<Z, F> then Begin

W=<Z, F>;

{Phan rã W thành Wi và Wk trong đó Wk có dạng PCNF} End;

k:=k+1;

until không thể phân mảnh Z tiếp; thêm Z vào phân mảnh

Ví dụ 2.8 (Phân mảnh W thành các BCNF, nối không mất thông tin):

Xét lược đồ quan hệ R(C, T, H, P, S, G) với C – course (lớp, khóa học); T - Teacher (giảng viên), H – hour (giờ học), P - phòng học, S - student (sinh viên) và G - grade (diểm số). Các phụ thuộc hàm F theo ngữ nghĩa của bài toán chúng ta giả sử tồn tại là:

C  T Mỗi khóa học có một giảng viên

HP  C Tại một giờ học, một phòng chỉ có một lớp

HT  P Tại môt giờ học, một giảng viên chỉ có mặt trong một phòng học CS  G Mỗi sinh viên có một điểm số cho mỗi khóa học

HS  P Tại một giờ học, một sinh viên chỉ có mặt tại một phòng học; Vậy chúng ta có W =<R, F>; với R = {C, T, H, P, S, G} và tập phụ thuộc hàm F = {C T, HP C, HT P, CS  G, HS P}. Ta thấy ngay C T vi phạm BCNF của sơ đồ quan hệ nên W1 = <{C, T}), C T> và W còn lại (sau khi đã bỏ thuộc tính T và những phụ thuộc hàm có chứa T) phân mảnh tiếp là:

W = <{C, H, P, S, G}, {HP C, CS G, HS P}>. Tiếp tục có W2 = <{H, P, C}, HP C> và

W = <{H, P, S, G}, HS G>

Tiếp tục ta có W3 = <{H, S, G}, HS G> và W = <{H, P, S, >; đặt W4 = <{H, P, S}, >. Vậy W1, W2, W3, W4 là những sơ đồ con có dạng BCNF và phân mảnh= (R1, R2, R3, R4) = (CT, HPS, HSG, HPS), của R có nối không mất thông tin.

Trong phép phân mảnh này phụ thuộc hàm (HS  G) F mà thuộc F+

Cần lưu ý rằng trong thực hành có thể thực hiện nhanh hơn bằng cách sau mỗi lần tách được một Wi =<XA, X A> ta loại bỏ khỏi W phụ thuộc X

 A và những phụ thuộc có chứa A. Và loại a ra khỏi tập thuộc tính. Quay lại ví dụ trên ta thực hiện như sau:

W1 = <CT, C T>; W = <{CHPSG}, {HP C, HS P}> W2 = <HPC, HP C,> W = <{HPSG}, HS P>

W3 = <HSP, HS P>; W =<HSG, > và W4 = <HSG, >

Phép phân mảnh này không bảo toàn phụ thuộc vì đã bỏ mất CS G của F Tuy nhiên, vẫn có những sơ đồ quan hệ W được phân mảnh thành các sơ đồ con dạng BCNF có nối không mất thông tin và bảo toàn phụ thuộc.

Ví dụ xét SDQH W và phép phân mảnh sau: W = <ABCDEHI, {A  B, C D, E H}> W1 = AB, A B>, W =<ACDEHI, {C D, E H}> W2= <CD, C D>; W =<ACEHI, E H> W3 = <EH, E H>; W=<ACEI, > W4 = <ACEI, >

Tính bảo toàn phụ thuộc và BCNF của phân mảnh là hiển nhiên. Dựa vào định lý 2.1 và bổ đề 2.1 ta có thể kết luận được tính nối không mất thông tin của phân mảnh.

Tuy nhiên chúng ta có thể kiểm tra lại phép phân mảnh có nối không mất bằng thuật toán Chase:

Bảng khởi đầu: A B C D E H I R1 a1 a2 R2 a3 a4 R3 a5 a6 R4 R5 a1 a3 a5 a7

Bảng sau khi sửa cho thỏa AB, CD và EH

A B C D E H I R1 a1 a2 R2 a3 a4 R3 a5 a6 R4 R5 a1 a2 a3 a4 a5 a6 a7

Bảng có một hàng toàn a nên phân mảnh có nối không mất thông tin. Một vấn đề cần phải quan tâm là mọi sơ đồ quan hệ W có luôn phân mảnh thành các sơ đồ con BCNF và có nối không mất thông tin không?

Chúng ta thấy rằng nếu W có những vi phạm BCNF thì thuật toán trên cho ta một phân mảnh thành BCNF và có nối không mất. Ngược lại nếu W đã là BCNF thì ta lấy W1 = W, W2 = W

Từ các phân tích trên suy ra kết luận:

- Mọi sơ đồ quan hệ W đều có thể phân mảnh thành các BCNF không mất thông tin.

- Việc phân mảnh W thành các sơ đồ quan hệ con BCNF, có nối không mất thông tin, là không duy nhất

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu các đặc tính của phân mảnh dọc trong cơ sở dữ liệu phân tán và ứng dụng (Trang 33 - 39)

Tải bản đầy đủ (PDF)

(71 trang)