Quá trình chuẩn hóa một quan hệ bao gồm một số các phép tách đƣợc đồ để tại mỗi bƣớc của quá trình chuẩn hóa thu đƣợc các quan hệ ở các dạng chuẩn nhất định. Tuy nhiên, các dạng chuẩn chƣa đủ đảm bảo cho ta một thiết kế tốt, ngay cả
khi quan hệ ở dạng chuẩn f-2NF hay dạng chuẩn mờ Boyce-Codd. Quá trình chuẩn hóa ngoài việc tách các lƣợc đồ quan hệ còn phải đảm bảo một số tính chất quan trọng khác mà một cơ sở dữ liệu phải có, trong đó có hai tính chất quan trọng là tính bảo toàn phụ thuộc và tính tách-kết nối không mất thông tin. Vì vậy, phần này sẽ đề cập cả đến hai tính chất quan trọng này để phép tách thành f-3NF sẽ có đƣợc một trong hai tính chất đó, hoặc có đƣợc cả hai. Trong hai phần tiếp theo, hai thuật toán sẽ đƣợc đƣa ra để cho phép tách có đƣợc một trong hai tính bảo toàn phụ thuộc và tính tách-kết nối không mất thông tin. Nhƣng để phép tách của ta có thể có đƣợc hai tính đó, tập phụ thuộc hàm ban đầu phải là phủ tối thiểu.
Phủ tối thiểu
Một phủ tối thiểu của một tập phụ thuộc hàm F là một tập phụ thuộc hàm tƣơng đƣơng với F và không dƣ thừa. Một tập phụ thuộc hàm F là tối thiểu nếu nó thỏa mãn các điều kiện sau:
- Mọi phụ thuộc hàm trong F đều có vế phải là một thuộc tính đơn.
- Ta không thể thay thế bất kỳ phụ thuộc hàm X A bằng phụ thuộc hàm Y A với Y X và mà vẫn có tập phụ thuộc hàm tƣơng đƣơng với F.
- Ta không thể bỏ đi bất kỳ một phụ thuộc hàm nào thuộc F mà vẫn có tập phụ thuộc hàm tƣơng đƣơng với F.
Thuật toán 2.8: Tìm phủ tối thiểu Vào : Tập phụ thuộc hàm mờ F
Ra : G là phủ tối thiểu của F
Thuật toán
1. Gán G: = F
2. Thay mỗi phụ thuộc hàm trong G có dạng X {A1, A2...An} bởi n phụ thuộc hàm X A , X A ,...,X A
3. Với mỗi phụ thuộc hàm X Ak trong G và với mỗi thuộc tính BX
Nếu {G - {X Ak}) ((X - {B}) Ak)) với tƣơng đƣơng với G thì thay thế X Ak bởi (X - {B}) Ak trong G.
4. Với mỗi phụ thuộc hàm X Ak trong G
Nếu (G - {X Ak}) tƣơng đƣơng với G thì bỏ phụ thuộc hàm XAk
khỏi G.
Tách thành dạng chuẩn mờ ba và bảo toàn phụ thuộc hàm
Mỗi phụ thuộc hàm biểu diễn một ràng buộc trong cơ sở dữ liệu. Trong thiết kế cơ sở dữ liệu mờ, việc bảo toàn đƣợc các phụ thuộc hàm khi phân tách một lƣợc đồ quan hệ đóng vai trò quan trọng. Nếu một phụ thuộc không có trong bất kỳ một lƣợc đồ con Ri nào thì sẽ không thể đảm bảo cho ràng buộc dữ liệu này. Để kiểm tra ràng buộc dữ liệu này, phải kiểm tra sự thoả mãn của ràng buộc này trên các tổ hợp có thể của các quan hệ. Nhƣ vậy độ phức tạp tính toán cho công việc kiểm tra này sẽ làm một hàm mũ và sẽ không khả thi. Cần phải có một thuật toán cho phép tách một lƣợc đồ quan hệ R, với tập phụ thuộc hàm mờ F đã cho, thành các lƣợc đồ quan hệ con ở dạng chuẩn ba và bảo toàn các phụ thuộc hàm trong F.
Thuật toán 2.9: Tách một lƣợc đồ quan hệ thành các dạng chuẩn ba bảo toàn phụ thuộc.
Vào : Lƣợc đồ quan hệ R, tập phụ thuộc hàm mờ F
Ra : một phép tách D tách R thành các lƣợc đồ quan hệ ở f-3NF và bảo toàn các phụ thuộc trong F.
Thuật toán
1. Tìm một phủ tối thiểu G cho F, sử dụng thuật toán 2.8.
2. Tìm tất cả những thuộc tính không xuất hiện trong bất kỳ phụ thuộc hàm nào của G: tách chúng ra khỏi G và đặt vào một quan hệ mới.
3. Nếu có một phụ thuộc hàm nào đó của G bao gồm tất cả các thuộc tính của R, phép tách chính là R.
4. Nếu không, với mỗi vế trái X của các phụ thuộc hàm trong G, tạo một quan hệ mới trong D với các thuộc tính {X{A1}{A2}...{Ak}},
trong đó X q A X q A X q Ak
k
q
1, 2,...,
2 , là các phụ thuộc hàm trong G, và X là khóa mờ của quan hệ mới này với độ mạnh là min (qi).
Ví dụ 2.9: [4] cho R=(A,B,C,D,E) và các phụ thuộc hàm là CD 0.7A, CD 0.7 B, AD 0.5 E, CD 0.7 E, A 0.8 B, B 0.6 E. CD là khóa mờ với độ mạnh là 0.7.
ở bƣớc đầu tiên, ta tìm một phủ tối thiểu G cho F. áp dụng thuật toán 2.8, ta tìm đƣợc một phủ tối thiểu là:
G = {CD 0.7 A, CD 0.7 B, CD 0.7 E, A 0.8 B, B0.6 E}
Qua bƣớc thứ hai và thứ ba không thực hiện gì, ở bƣớc bốn, với mỗi vế trái của các phụ thuộc hàm trong G: với vế trái là CD, tạo một quan hệ mới trong D với các thuộc tính là A,B,C,D,E các phụ thuộc hàm là CD0.7A, CD 0.7 B, CD 0.7 E, CD là khóa mờ của quan hệ này với độ mạnh 0.7; với hai phụ thuộc hàm còn lại A
0.8 B, B 0.6E, hai quan hệ mới đƣợc tạo ra: một quan hệ có thuộc tính là A và B, với phụ thuộc hàm là A 0.8 B, khóa mờ là A với độ mạnh 0.8; một quan hệ có thuộc tính là B và E, phụ thuộc hàm là B 0.6 E, khóa mờ là B với độ mạnh 0.6. Tóm lại, sau khi áp dụng phép tách này, ta thu đƣợc ba quan hệ
R1= (A,B,C,D,E), R2=(A,B) và R3 = (B,E)
Kiểm tra phép tách có bảo toàn phụ thuộc hay không
Một vấn đề đặt ra là phép tách thành dạng chuẩn mờ 3 có thực sự bảo toàn các phụ thuộc hàm?
Thuật toán 2.10: [4] kiểm tra phép tách bảo toàn phụ thuộc
Vào : Lƣợc đồ quan hệ R, tập phụ thuộc hàm F của nó, và tập các lƣợc đồ con là kết quả của phép tách R
Ra : D có phải là phép tách bảo toàn phụ thuộc hay không
Thuật toán:
Với mỗi phụ thuộc hàm của F, X Y, với X = X1X2...Xm
1. Khởi tạo một bao đóng cho X, Zlist, có các thành phần là từng thuộc tính của
X, độ mạnh là cực đại.
ZList = {(X1,1), (X2,1),...,(Xm,1)}
2. Thực hiện vòng lặp
ZList2:=ZList
Khởi tạo một miền giá trị domain bằng rỗng, domain = Với mỗi lƣợc đồ quan hệ Ri, (i = 1 to k)
° Reset domain bằng rỗng
° Với mỗi thành phần của ZList2
Nếu thuộc tính của thành phần này thuộc vào Ui, với Ui
là tập thuộc tính của Ri, thêm thuộc tính này vào domain
° Tìm một bao đóng của domain, kí hiệu là ZListi
° Với mỗi thành phần của ZListi
Nếu thuộc tính của thành phần này thuộc vào Ui, thêm thuộc tính này vào một danh sách TListi
° Tổ hợp TListi với ZList2
Nếu ZList = ZList2, thoát khỏi vòng lặp
Nếu không, ZList: =ZList2
3. Nếu tất cả các thuộc tính trong Y đều có trong Zlist với độ mạnh lớn hơn hoặc bằng , thì phụ thuộc hàm này đƣợc bảo toàn qua phép tách, tiếp tục với các phụ thuộc hàm khác.
4. Nếu không, phép tách này không bảo toàn phụ thuộc hàm, thoát
Ví dụ 2.10: Giả sử ta có quan hệ R=(A,B,C) với các phụ thuộc hàm là A 0.8 B và B
0.6 C, và giả sử R đƣợc tách thành hai quan hệ R1=(A,B) và R2 = (B,C). Ta sẽ xem xét xem phép tách này có bảo toàn phụ thuộc hay không.
Với phụ thuộc hàm thứ nhất A 0.8 B, bao đóng khởi tạo của vế trái, {A} là ZList = {(A,1)}. ZList2 = {(A,1)} R1 domain = {A} ZList1 = {(A,1),(B,0.8),(C,0.6)} TList1 = {(A,1),(B,0.8)} ZList2 = {(A,1),(B,0.8)} R2 domain = {B} ZList2 = {(B,1),(C,0.6)} TList2 = {(B,1),(C,0.6)} ZList2 = {(A,1),(B,0.8),(C,0.6)} Vì ZList ZList2, ZList = {(A,1),(B,0.8),(C,0.6)}
ở vòng lặp tiếp theo, ZList = ZList2, thoát khỏi vòng lặp, lúc này ta thấy vế phải của phụ thuộc, B xuất hiện trong ZList với độ mạnh 0.8, vì vậy phụ thuộc hàm đầu tiên đƣợc bảo toàn quan phép tách và ta tiếp tục với phụ thuộc hàm thứ hai B
0.6 C. Tƣơng tự, ta tìm đƣợc ZList = {(B,1),(C,0.6)}, và vì thuộc tính ở vế phải, C, xuất hiện trong ZList với độ mạnh 0.6, nên phụ thuộc hàm này cũng đƣợc bảo toàn qua phép tách. Do đó, phép tách này là phép tách bảo toàn phụ thuộc.
Nếu một phép tách không có tính chất kết nối không mất thông tin thì khi ta kết nối các lƣợc đồ kết quả lại với nhau sẽ sinh ra các bộ lạ, không có trong quan hệ ban đầu. Các bộ này biểu diễn những dữ liệu không có thực trong quan hệ ban đầu. Vì vậy, đây là một tính chất quan trọng và cần đạt đƣợc với mọi giá khi thiết kế một cơ sở dữ liệu. Thuật toán sau đây cho ta một phép tách có tính chất kết nối không mất thông tin, các lƣợc đồ kết quả ở dạng chuẩn mờ ba.
Thuật toán 2.11: [4] tách thành các dạng chuẩn mờ 3 bảo toàn kết nối không mất thông tin
Vào : một lƣợc đồ quan hệ R, tập phụ thuộc hàm mờ F của nó
Ra : một phép tách D tách R thành các lƣợc đồ ở f-3NF có tính chất kết nối không mất thông tin.
Thuật toán
1. Tìm một phủ tối thiểu G cho F, sử dụng thuật toán 2.8
2. Tìm tất cả những thuộc tính không xuất hiện trong bất kỳ phụ thuộc hàm nào của G: tách chúng ra khỏi G và đặt vào một quan hệ mới.
3. Nếu có một phụ thuộc hàm nào đó của G bao gồm tất cả các thuộc tính của
R, phép tách chính là R.
4. Nếu không, với mỗi vế trái X của các phụ thuộc hàm trong G, tạo một quan hệ mới trong D với các thuộc tính {X {A1}{A2}...{Ak}}, trong đó
k q q q A X A X A X k q 1, 2,..., 2 , là các phụ thuộc hàm trong G, và X là khóa mờ của quan hệ mới này với độ mạnh min(qi).
5. Nếu trong các lƣợc đồ kết quả, không một lƣợc đồ nào chứa khóa của R thì tạo thêm một quan hệ mới chứa các thuộc tính tạo nên khóa của R.
Ví dụ 2.11: Nhƣ vậy, thuật toán tách có tính chất kết nối không mất thông tin tƣơng tự thuật toán tách bảo toàn phụ thuộc, chỉ thêm một bƣớc cuối cùng, tạo ra một quan hệ mới có các thuộc tính tạo nên khóa của quan hệ ban đầu. Xét lại ví dụ 2.9, để áp
dụng thuật toán tách có kết nối không mất thông tin, ta cũng áp dụng tất cả các bƣớc của thuật toán tách-bảo toàn phụ thuộc. Nếu nhƣ trong các lƣợc đồ kết quả, không có lƣợc đồ nào chứa khóa mờ của quan hệ ban đầu, thì cần tạo ra một quan hệ mới. Tuy nhiên ở đây, R1 có khóa là CD chính là khóa mờ của quan hệ ban đầu, nên không cần tạo ra quan hệ mới. Do đó, sau khi áp dụng thuật toán tách có kết nối không mất thông tin, ta thu đƣợc ba quan hệ R1 = (A,B,C,D,E), R2 = (A,B) và R3 = (B,E), nhƣ trong thuật toán tách - bảo toàn phụ thuộc hàm.
Kiểm tra tách có tính chất kết nối không mất thông tin hay không
Trong mô hình cơ sở dữ liệu mờ dựa trên quan hệ tƣơng tự, ta có thể tận dụng thuật toán kiểm tra phép tách kết không mất thông tin trong mô hình truyền thống. Logic của việc sử dụng thuật toán cũ cho mô hình mới là nhƣ sau. Bảng đƣợc tạo ra trong quá trình áp dụng thuật toán chỉ đƣợc sử dụng để xác định có hay không một thuộc tính kết nối giữa các quan hệ sau khi tách. Nếu nhƣ có thuộc tính kết nối, kết luận các quan hệ có thể kết nối hay không đƣợc đƣa ra tùy theo mức độ tƣơng tự giữa chúng và một ngƣỡng xác định trƣớc. Các bộ cũng cần phải thỏa mãn tất cả các phụ thuộc hàm mờ của quan hệ. Đó là, với mỗi cặp bộ của quan hệ, và với mỗi phụ thuộc hàm mờ X Y, C(Y[t1, t2]) min(, C(X[t1,t2])).
Thuật toán 2.12: Kiểm tra phép tách kết nối không mất thông tin
Vào : Lƣợc đồ quan hệ R = (A1, A2,...,An), tập phụ thuộc hàm mờ F, và phép tách D tách R thành quan hệ (R1, R2,...,Rk).
Ra : kết luận D có phải là phép tách kết nối không mất thông tin hay không
Thuật toán
1. Khởi tạo một bảng T có k dòng, n cột, trong đó mỗi dòng tƣơng ứng với một quan hệ trong phép tách, mỗi cột tƣơng ứng với một thuộc tính của R
3. Với mỗi phần tử thuộc hàng i cột j của T
Nếu Aj thuộc miền thuộc tính Ui của Ri, đặt Ty = aj
4. Thực hiện vòng lặp sau cho đến khi không còn thay đổi nào trong bảng T Với mỗi phụ thuộc hàm X Y trong F
Với tất cả các dòng trong T, tìm những dòng mà có cùng giá trị trên
X, nếu có làm bằng giá trị của chúng trên Y theo qui tắc: nếu trong các giá trị Y có aj thì làm bằng tất cả các dòng theo giá trị aj, nếu không thì làm bằng theo một giá trị bij nào đó.
5. Khi bảng T không còn thay đổi nào nữa, nếu có một dòng chỉ chứa các giá trị "a" thì phép tách là kết nối không mất thông tin. Ngƣợc lại phép tách không là kết nối không mất thông tin.
Ví dụ 2.12: Cho lƣợc đồ quan hệ R=(A,B,C,D,E,F) với các phụ thuộc hàm là A
0.8 B, C 0.7 DE, và AC 0.8 F. Ở đây , AC là khóa mờ với độ mạnh 0.7. Giả sử tách R thành hai quan hệ R1 =(B,E) và R2=(A,C,D,E,F). Ta cùng xem phép tách nhƣ vậy có kết nối không mất thông tin không. Theo thuật toán 2.12, bảng T sẽ có hai dòng tƣơng ứng với hai quan hệ và sáu cột tƣơng ứng với sáu thuộc tính của quan hệ gốc. Ở bƣớc hai, khởi tạo các phần tử của T bằng giá trị bij, nhƣ trong Bảng 2-4.
T A B C D E F
R1 b11 b12 b13 b14 b15 b16
R2 b21 b22 b23 b24 b25 b26
Bảng 2-4: Bảng khởi tạo cho quan hệ R = (A,B,C,D,E,F)
Với dòng thứ nhất, T12 và T15 đƣợc đặt cho giá trị a2 và a5, bởi vì quan hệ R1 chứa hai thuộc tính B và E. Tƣơng tự, với dòng thứ hai T21, T23, T24, T25 và T26 lần lƣợt đƣợc đặt cho các giá trị a1, a3, a4, a5 và a6, vì R2 chứa các thuộc tính A, C, D, E và F, nhƣ trong Bảng 2-5.
T A B C D E F
R1 b11 a2 b13 b14 a5 b16
R2 a1 b22 a3 a4 b25 a6
Bảng 2-5: Bảng sau khi áp dụng bước ba của thuật toán 2.12 với R
Với phụ thuộc hàm thứ nhất A 0.8 B, R1 và R2 không có cùng giá trị trên thuộc tính vế trái là A, cho nên không có thay đổi gì ở thuộc tính vế phải B. Với phụ thuộc hàm thứ hai C 0.7 DE, R1 và R2 cũng không có cùng giá trị trên thuộc tính vế trái C, nên không có thay đổi gì trên hai thuộc tính vế phải D, E. Tình huống tƣơng tự cho phụ thuộc hàm thứ ba AC 0.8F. Cuối cùng, vì không có dòng nào của bảng T chứa toàn giá trị "a", nên phép tách này không là phép tách kết nối không mất thông tin.
Ví dụ 2.13: Ví dụ 2.12 đã nêu ở trên là ví dụ về một phép tách không phải là phép tách kết nối không mất thông tin. Tiếp theo xin lấy ví dụ về một phép tách có kết nối không mất thông tin. Cho lƣợc đồ quan hệ R=(A,B,C,D,E,F,G) với các phụ thuộc hàm là ABC 0.7 D, ABC 0.5 E, DE 0.6 F, và F 0.5G. Ở đây, ABC là khóa mờ chính của quan hệ với độ mạnh 0.7. Giả sử R đƣợc tách thành ba quan hệ R1 = (A,B,C,D,E), R2=(D,E,F), và R3 = (F,G).
Bƣớc 1: Bảng T có ba dòng tƣơng ứng với ba quan hệ R1, R2 và R3, và bảy cột tƣơng ứng với bảy thuộc tính của quan hệ gốc.
Bƣớc 2: Khởi tạo T với các giá trị bij, nhƣ trong Bảng 2-6
T A B C D E F G