Trong phần thảo luận về 3NF mờ, 2 thuật toán được đưa ra để thực hiện phân tách thành 3NF mờ, một thuật toán đạt được tính bảo toàn phụ thuộc, và một thuật toán đảm bảo tính có kết nối không mất thông tin. Thuật toán phân tách thành BCNF mờ cũng đảm bảo tính có kết nối không mất thông tin. Tính chất bảo toàn phụ thuộc của phép phân tách trong mô hình dữ liệu quan hệ mờ được nghiên cứu chi tiết ở [14]. Phần này trình bày một thuật toán kiểm tra tính bảo toàn phụ thuộc của phép phân tách.
Thuật toán 2.12. Thuật toán kiểm tra tính bảo toàn phụ thuộc
Vào: Một phép phân tách ρ={R1, R2, ..., Rk} và tập các phụ thuộc mờ F.
Ra: Phép phân tách ρ có bảo toàn phụ thuộc F hay không.
Phương pháp:
Với mọi ffd trong F, X→α Y, trong đó X= X1, X2, ...,Xm
1) Xây dựng một danh sách bao đóng bắc cầu ZList, khởi tạo là tất cả các thuộc tính vế trái của ffd, X, với độ mạnh cực đại.
ZList ={(X1,1),(X2,1), .... ,(Xm,1)} 2) While (true)
i. NewZList ← ZList
iii.Với mỗi quan hệ phân tách Ri (i=1,..,k)
+ Thiết lập lại Domain (Domain:=φ)
+ Với mỗi phần tử của NewZList
Nếu thuộc tính của phần tử này nằm trong Ui, trong
đó Ui là tập thuộc tính của Ri, thêm thuộc tính này vào Domain.
+ Tìm tập bao đóng của Domain, ZListi
+ Với mỗi phần tử của ZListi ,
Nếu thuộc tính của phần tử này nằm trong Ui, thêm phần tử này vào TListi
+ Đưa TListi vào NewZList, sử dụng phép hợp mờ. iv. Nếu ZList = NewZList, thoát khỏi vòng lặp
v. Ngược lại, ZList ← NewZList
3) Nếu tất cả các thuộc tính trong Y nằm trong ZList với độ mạnh α hoặc lớn hơn, thì tính bảo toàn phụ thuộc không bị vi phạm, tiếp tục với các ffd khác
4) Ngược lại, không bảo toàn phụ thuộc, thoát
Ví dụ 2.16. Cho quan hệ R với tập các thuộc tính {A, B, C}, các quan hệ
phân tách R1 =(A, B) và R2=(B, C), và các ffd lần lượt là A →0.9 B và B →0.7
C. Áp dụng thuật toán 2.12 để kiểm tra tính bảo toàn phụ thuộc. Với ffd đầu tiên A →0.9 B, khởi tạo tập bao đóng bắc cầu của A là
ZList ={(A, 1)}
Với quan hệ R1 (i=1) Domain = {A} ZList1= {(A, 1), (B, 0.9), (C, 0.7)} TList1= {(A, 1), (B, 0.9)} NewZList = {(A, 1), (B, 0.9)} Với quan hệ R2 (i=2) Domain = {B} ZList2= {(B, 1), (C, 0.7)} TList2= {(B, 1), (C, 0.7)} NewZList = {(A, 1), (B, 0.9), (C, 0.7)} Bởi vì ZList ≠ NewZList, ZList ← {(A, 1), (B, 0.9), (C, 0.7)} Ở lần lặp thứ 2, ZList=NewZList, thoát khỏi vòng lặp, chúng ta thấy rằng thuộc tính vế phải, B, xuất hiện trong ZList với độ mạnh 0.9, do vậy tính bảo toàn phụ thuộc không bị vi phạm.
Tiếp tục với ffd thứ 2, B →0.7 C. Thực hiện tương tự, cuối cùng ta có
ZList={(B, 1), (C, 0.7)} và vì thuộc tính C xuất hiện trong ZList với độ mạnh 0.7, tính bảo toàn phụ thuộc không bị vi phạm.
Vì vậy, phép phân tách R thành R1 và R2 là bảo toàn phụ thuộc.