Cho lược đồ quan hệ R với tập phụ thuộc hàm F và phép tách ρ = {R1,…, Rk}. Một tính chất quan trọng nữa của phép tách lược đồ quan hệ là tập phụ thuộc hàm F phải được suy ra từ các chiếu của F lên R1,…, Rk.
Ta định nghĩa chiếu của F lên tập thuộc tính Q, ký hiệu πQ(F), như sau:
πQ(F) = {X Y ∈ F+ | X ∪ Y ⊂ Q}
1. Định nghĩa:
Ta nói phép tách ρ = {R1,…, Rk}của lược đồ R bảo tồn phụ thuộc hàm (đối với tập phụ thuộc hàm F) nếu hợp các chiếu của F lên R1,…, Rk suy diễn logic tất cả phụ thuộc hàm trong F.
F ⊂ (πR1(F) ∪πR2(F) ∪ … ∪πRk(F))+
Lý do để phép tách phải bảo tồn phụ thuộc hàm là các phụ thuộc hàm có thể coi là những ràng buộc toàn vẹn của lược đồ R. Nếu các phụ thuộc hàm chiếu lên các lược đồ con không suy diễn F thì sự phân rã có thể vi phạm các phụ thuộc hàm trong F, thậm chí ngay cả khi phân rã bảo tồn thông tin.
Ví dụ:
- Cho sơ đồ quan hệ R(C, S, Z) và tập phụ thuộc hàm F: CS Z
Z C
(1): Phép tách R thành SZ và CZ là phép tách không mất thông tin vì: (SZ ∩ CZ) (CZ – SZ) ⇔ Z C
(2): Tuy nhiên, phép chiếu của F = {CS Z, Z C} trên SZ chỉ cho các
phụ thuộc hàm tầm thường; Trong khi phép chiếu của F trên CZ cho phụ thuộc hàm Z
C và các PTH tầm thường và chúng không suy diễn ra được CS Z. Do đó phép tách
- Chúng ta xét thể hiện cụ thể cho phép tách trên: R1 S Z R2 C Z 12 LTT 02138 TP CT 02138 12 LTT 02139 TP CT 02139 S C S Z TP CT 12 LTT 02138 TP CT 12 LTT 02139
Ta thấy, S là kết nối tự nhiên giữa R1 và R2. R1 thoả các PTH tầm thường, R2
thoả các PTH tầm thường và Z C, nhưng bảng S vi phạm PTH CS Z.
2. Giải thuật:
Input: Lược đồ quan hệ R = {A1, A2,…, An}, tập phụ thuộc hàm F và phép tách:
ρ = {R1,…, Rk}
Output: Kết luận về tính bảo toàn phụ thuộc hàm của phân rã ρ.
Method:
Ký hiệu
G = ∪k
i=1 Ri(F)
Ta không tính G mà chỉ kiểm tra xem nó có phủ F hay không. Cho X Y ∈ F, kiểm tra xem bao đóng của X theo G, ký hiệu XG+, có chứa Y hay không.
Thủ thuật tính XG+ mà không cần có G là xét tác dụng của quá trình tính bao đóng của X đối với các chiếu của F lên Ri.
Xuất phát từ X, ta tính XG+ như sau:
(1): Đặt X0 = X, t = 1;
(2): Tính Xt trên cơ sở Xt-1: (i): Đặt Xt = Xt-1
(ii):Với mỗi lược đồ con Ri∈ F, Ri⊄ Xt, ta thực hiện phép toán: Xt = Xt∪ (( Xt∩ Ri)+∩ Ri)
Trong quá trình tính toán nếu Xt = R thì kết thúc, và kết luận XG+ = R. Ngược lại sang bước (3).
(3): Nếu Xt = Xt-1 thì kết thúc, và kết luận XG+ = Xt. Ngược lại tăng t lên 1 đơn vị và quay về bước (2).
Nếu Y là tập con của XG+ có được từ việc thực hiện các bước trên, thì khi đó X
Y ∈ G+. Nếu mỗi X Y ∈ F được chứng minh thuộc G+ bằng cách đó thì phép tách bảo toàn phụ thuộc hàm, ngược lại là không.
3. Ví dụ:
Xét lược đồ R = (A,B,C,D) với phép tách {AB, BC, CD}
trong đó: AB = (A,B), BC = (B,C), CD = (C,D), và tập phụ thuộc hàm F: A B
B C C D D A
Ta thấy trong F+ mỗi thuộc tính xác định tất cả các thuộc tính khác. Ta có cảm giác
rằng khi chiếu F lên AB, BC và CD thì ta bỏ mất phụ thuộc hàm D A, nhưng nhận
định đó không đúng. Khi tính chiếu của F lên tập thuộc tính, ta thực sự chiếu F+ lên các lược đồ quan hệ. Như vậy, khi chiếu F lên AB ta không những chỉ có phụ thuộc hàm A
B, mà còn nhận được phụ thuộc hàm B A. Tương tự ta nhận được C B ∈πBC(F) và D C ∈πCD(F), và chúng suy diễn logic ra D A.
Như vậy, để kết luận phép tách bảo toàn phụ thuộc hàm, ta phải chỉ ra rằng D A suy diễn từ tập
G = πCD(F) ∪πCD(F) ∪πCD(F)
Áp dụng thuật toán, đặt X = D và tính XG+ theo giải thuật trên: (1): Đặt X0 = X = {D}, t = 1
(2): Tính X1:
Đặt X1 = X0 = {D}
Xét lược đồ con AB. Vì AB ⊄ X1, ta thực hiện phép tính X1 = {D} ∪ (({D} ∩ {A,B})+∩ {A,B}) = {D} Xét lược đồ con BC. Vì BC ⊄ X1, ta thực hiện phép tính
X1 = {D} ∪ (({D} ∩ {B,C})+∩ {B,C}) = {D} Xét lược đồ con CD. Vì CD ⊄ X1, ta thực hiện phép tính
X1 = {D} ∪ (({D} ∩ {C,D})+∩ {C,D}) = = {D} ∪ ({A,B,C,D} ∩ {C,D}) = {C,D}
Đến đây ta có X1 = {C,D} ≠ X0 = {D}. Vậy ta tính tiếp X2. (2): Tính X2:
Đặt X2 = X1 = {C,D}
Xét lược đồ con AB. Vì AB ⊄ X2, ta thực hiện phép tính X1 = {C,D} ∪ (({C,D} ∩ {A,B})+ ∩ {A,B}) = {C,D} Xét lược đồ con BC. Vì BC ⊄ X2, ta thực hiện phép tính
X1 = {C,D} ∪ (({C,D} ∩ {B,C})+ ∩ {B,C}) = {B,C,D} Ta bỏ qua lược đồ CD vì CD ⊂ X2.
Đến đây ta có X2 = {B,C,D} ≠ X1 = {C,D}. Vậy ta tính tiếp X2: (3): Tính X3:
Đặt X3 = X2 = {B,C,D}
Xét lược đồ con AB. Vì AB ⊄ X2, ta thực hiện phép tính X1 = {B,C,D} ∪ (({B,C,D} ∩ {A,B})+∩ {A,B})
= {B,C,D} ∪ ({A,B,C,D} ∩ {A,B}) = {A,B,C,D}
Ta có X3 = R. Quá trình kết thúc và ta có: XQ+ = (D)+ = R
Từ đó suy ra D A∈ G+. Các phụ thuộc hàm khác hiển nhiên là thuộc G+ (thậm chí chúng thuộc G). Ta kết luận phép tách bảo toàn phụ thuộc hàm F.
CHƯƠNG VII:
CHUẨN HOÁ LƯỢC ĐỒ QUAN HỆI. CÁC DẠNG PHỤ THUỘC HÀM I. CÁC DẠNG PHỤ THUỘC HÀM
1. Thuộc tính nguyên tố, không nguyên tố
(prime/nonprime attribute)
Cho sơ đồ quan hệ R(U), một thuộc tính A ∈ R được gọi là nguyên tố nếu A là
thành phần của một khoá trong R. Ngược lại, A không là nguyên tố. Ví dụ:
Trong sơ đồ quan hệ ABCD (khoá là AB, BC) với các phụ thuộc hàm: AB C
B D BC A
Ta thấy: A, B, C là thuộc tính nguyên tố; D là không nguyên tố.
2. Phụ thuộc từng phần
(partial dependency)
Phụ thuộc hàm X A là phụ thuộc từng phần nếu X là tập con thực sự của một
khoá của R.
3. Phụ thuộc đầy đủ/phụ thuộc sơ cấp
(complete dependency)
Phụ thuộc hàm X A là phụ thuộc đầy đủ (hay còn gọi là phụ thuộc sơ cấp/
nguyên tố) nếu không tồn tại tập con thực sự Y ⊆ X nào để cho Y A xảy ra. Như vậy phụ thuộc đầy đủ vào khoá ngược lại với phụ thuộc từng phần.
4. Phụ thuộc truyền
X A là phụ thuộc hàm truyền nếu X không là tập con thực sự của một khoá nào, A là thuộc tính không khoá, A ⊄ X.
5. Phụ thuộc trực tiếp
X A là phụ thuộc trực tiếp nếu không tồn tại tập thuộc tính Y, với Y ≠ X, Y ≠ A thỏa:
X Y & Y A
6. Phụ thuộc hàm tầm thường
Phụ thuộc hàm X Y gọi là phụ thuộc hàm tầm thường nếu Y ⊂ X (hiển nhiên là nếu Y ⊂ X thì ta có X Y).