Phép tách các lược đồ quan hệ

Một phần của tài liệu Nhập môn Cơ sở dữ liệu Phạm Thị Thanh (Trang 58 - 62)

3.1. Khái niệm phép tách

+ Cho lược đồ quan hệ R(U). Tập các lược đồ

ρ=(R1(U1), R2(U2),…, Rn(Un)) được gọi là phép tách của R nếu U1∪U2∪… ∪Un=U

Giả sử trên U có tập phụ thuộc hàm F, với Z⊆U, hình chiếu F lên Z, ký hiệu ∏Z(F), được xác định như sau:

∏Z(F)={(X→Y)∈F+ | XY⊆Z}

khi đó ta ký hiệu phép chiếu F lên mỗi Ui là Fi, khi đó phép tách lược đồ R(U, F) như trên có thể viết là R1(U1, F1), R2(U2,F2),…, Rn(Un,Fn)) và ký hiệu ℘=(R1, R2,…, Rn)

+ Mục đích của phép tách là tránh dư thừa dữ liệu, tránh trùng lặp dị thường, nhất quán dữ liệu.

+ VD Cho lược đồ quan hệ BANHANG (TênNCC, Địa chỉ, Sphẩm, giá) và tập phụ thuộc hàm F={TênNCC→địa chỉ; TênNCC, sphẩm→giá}. Khi đó ta có thể tách lược đồ quan hệ BANHÀNG thành 2 lược đồ quan hệ là NCC (TênNCC,Địa chỉ) tập phụ thuộc hàm FNCC = TênNCC→địa chỉ và SẢNPHẨM (TênNCC,Sphẩm,giá) , Fsanpham={TênNCC, sphẩm→giá}

3.2. Phép tách kết nối không tổn thất

+ ĐN: Phép tách R thành {R1,R2,…Rn} gọi là tách kết nối không tổn thất (tách không mất thông tin - Lossless Join Decomposition – LJ) đối với tập phụ thuộc

hàm F, nếu mỗi quan hệ r trên R thoả F, ta đều có r=r1*r2*….*rn, trong đó ri = ∏Ui(r) (ri là kết quả phép chiếu r trên Ui)

+ Tính chất không mất mát thông tin là cần thiết khi ta cần khôi phục quan hệ ban đầu từ các quan hệ đã tách

Kiểm tra tính kết nối không tổn thất của 1 phép tách

Input: Tập hữu hạn các thuộc tính U={A1, A2,..An}, tập phụ thuộc hàm F trên U và phép tách ρ={U1, U2,..Uk},

Output: Kết luận ρ có phải là phép tách kết nối không tổn thất hay không?

Action: Lập bảng kích thước k × n, trong đó k dòng lần lượt được đại diện bởi U1, U2,..Uk và n cột được đại diện bởi A1, A2,..An. Tại dòng i cột j, ta ghi ký hiệu aj nếu Aj∈Ui, ngược lại thì ghi bij.

Với mỗi phụ thuộc hàm X→Y, ta xét các dòng có giá trị bằng nhau trên tập thuộc tính X, với cặp dòng như vậy ta thay ký hiệu các dòng này để chúng mang giá trị bằng nhau trên Y. Việc thay đổi được thực hiện theo quy tắc:

- Nếu một trong 2 ký hiệu có dạng ai thì ký hiệu kia đổi thành ai

- Nếu cả hai ký hiệu đều có dạng bij thì lấy tuỳ ý một trong 2 ký hiệu đó gán chung cho cả hai.

Lặp lại cho đến khi không còn thay đổi nào trên bảng, cuối cùng nếu có một hàng toàn ký hiệu ai thì kết luận phép tách kết nối không tổn thất, nếu không thì phép tách không là kết nối không tổn thất.

VD1: quan hệ NCC(Ten, đc, sp, gia, soluong)

với tập phụ thuộc hàm Ten→đc, Ten,sp →gia, soluong được tách làm 2 quan hệ

CTY(Ten,đc) và CC(Ten,sp,gia,soluong) Thiết lập bảng ban đầu:

Ten đc sp gia soluong

CTY a1 a2 b13 b15 b15

CC a1 b22 a3 a4 a5

Xét phụ thuộc hàm ten→đc ta thấy hàng 1 và hàng 2 cột ten cùng a1 nên trên cột đc ta đổi về cùng là a2

Ta được bảng

Ten đc sp gia soluong

CTY a1 a2 b13 b15 b15

Không còn biến đổi được bảng nữa ta thấy hàng 2 có toàn ký hiệu a nên phép tách này là phép tách kết nối không tổn thất

Định lý 3.c: Nếu ρ=(R1,R2) là một phép tách của R và F là tập phụ thuộc hàm thì Phép tách bảo toàn phụ thuộc ρ là tách không mất thông tin đối với F khi và chỉ khi R1∩R2 →R1-R2 hoặc R1∩R2→R2- R1

Xét lại ví dụ trên: R1∩R2 ={ten}

R1-R2 ={đc}, rõ ràng ten→đc nên phép tách kết nối không tổn thất.

VD2: Cho lược đồ R(ABCDE), tập phụ thuộc hàm F gồm:

A→C, B→C, C→D, DE→C, CE→A

Xét phép tách R thành R1(AD), R2(AB), R3(BE), R4(CDE), R5(AE) Ta có bảng khởi đầu như sau:

A B C D E AD a1 b12 b13 a4 b15 AB a1 a2 b23 b24 b25 BE b31 a2 b33 b34 a5 CDE b41 b42 a3 a4 a5 AE a1 b52 b53 b54 a5

Xét FD: A→C, ta thấy hàng 1,2,5 của cột A cùng giá trị a1 ta sẽ thay thế ở cột C các hàng 1,2,5 để được cùng giá trị. Ta được bảng sau

A B C D E AD a1 b12 b13 a4 b15 AB a1 a2 b13 b24 b25 BE b31 a2 b33 b34 a5 CDE b41 b42 a3 a4 a5 AE a1 b52 b13 b54 a5

Xét FD: B→C, hàng 2 và 3 của cột B cùng giá trị, ta thay đổi hàng 2,3 cột C để được các giá trị giống nhau

A B C D E AD a1 b12 b13 a4 b15 AB a1 a2 b13 b24 b25 BE b31 a2 b13 b34 a5 CDE b41 b42 a3 a4 a5 AE a1 b52 b13 b54 a5 Tương tự xét FD: C→D, ta được bảng A B C D E AD a1 b12 b13 a4 b15 AB a1 a2 b13 a4 b25 BE b31 a2 b13 a4 a5

CDE b41 b42 a3 a4 a5 AE a1 b52 b13 a4 a5 Xét FD: DE→C, ta được bảng A B C D E AD a1 b12 b13 a4 b15 AB a1 a2 b13 a4 b25 BE b31 a2 a3 a4 a5 CDE b41 b42 a3 a4 a5 AE a1 b52 a3 a4 a5 Xét FD: CE→A, ta được bảng A B C D E AD a1 b12 b13 a4 b15 AB a1 a2 b13 a4 b25 BE a1 a2 a3 a4 a5 CDE a1 b42 a3 a4 a5 AE a1 b52 a3 a4 a5

Đã xét hết các FD ta thấy hàng thứ 3 toàn là ký hiệu ai vậy phép tách kết nối không tổn thất.

3.3. Phép tách bảo toàn phụ thuộc

- ĐN: Phép tách ρ = {R1(U1), R2(U2),….Rm(Um)} của lược đồ R(U,F) được gọi là bảo toàn tập phụ thuộc hàm F nếu

( ) + + = =     ∏ F m i Ui  1 F (Phép tách đảm bảo rằng tập phụ thuộc hàm

F được phủ bởi các hình chiếu Fi của nó lên Ui.

- Hai tính chất kết nối không tổn thất và bảo toàn phụ thuộc là những tính chất quan trọng của phép tách lược đồ.

- Ví dụ 1: Cho lược đồ quan R(ABCD) F={A→B, C→D} ta tách thành 2 lược đồ quan hệ R1(AB) R2(CD), kiểm tra phép tách phải là phép tách kết nối không tổn thất hay không? Và có phải là phép tách bảo toàn phụ thuộc hay không

Ta thấy, phép tách chỉ tách R thành 2 quan hệ nên áp dụng định lý 3.c ta có R1∩R2=∅→ R1-R2. Vậy đây không là phép tách kết nối không tổn thất. Ta kiểm tra tính bảo toàn phụ thuộc.

Tính F1, chiếu F lên R1 = {A→B, B→A} và các phụ thuộc hàm tầm thường ta không xét đến

Tính F2, chiếu F lên R2={C→D, D→C}

Đương nhiên, ta thấy F ⊆ (F1∪F2)+, vậy phép tách trên là bảo toàn phụ thuộc - Ví dụ 2: R(ABCDE), F={AB→C, CD→E} tách thành 3 lược đồ R1(AB), R2(CD), R3(DE), kiểm tra phép tách có bảo toàn phụ thuộc hay không

Tính F1={A→B,B→A, AB→A, AB→B} Tính F2={C→D, D→C, CD→D, CD→C} Tính F3={D→E, E→D, DE→E, DE→D}

F⊆ (F1∪F2∪F3)+ nên phép tách là không bảo toàn phụ thuộc.

Một phần của tài liệu Nhập môn Cơ sở dữ liệu Phạm Thị Thanh (Trang 58 - 62)

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

(93 trang)
w