Thuật toán kiểm tra phép tách bảo toàn thông tin

Một phần của tài liệu Tài liệu Cơ sở dữ liệu (Trang 28)

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 phép tách ρ có phải là mất mát thông tin không? Ta có thể diễn giải lại thuật giải như sau:

BC1: Dựng bảng S gồm n cột và k hàng, cột j ứng với thuộc tính Aj, hàng i ứng với lược đồ Ri.

BC2: Ở vị trí hàng i và cột j, đặt aijnếu Aj thuộc Ri. Nếu không đặt bij.

BC3: Xét mỗi phụ thuộc hàm X -> Y trong F cho đến khi bảng S không còn thay đổi: Lable :Với mỗi phụ thuộc hàm X -> Y trong F, nếu trong bảng S có chứa 2 dòng u, v mà:

u[X] = v[X ] = aij

thì sửa các giá trị tại cột Y như sau: + Nếu u[Y ] = v[Y] = aij thì không sửa + Nếu u[Y] = v[Y] = bij thì không sửa + Nếu u[Y] = aij u[Y] = bij

v[Y] = bij hoặc v[Y] = aij thì sửa bij bằng aij Lặp lại BC3.

BC4: Nếu thu được 1 hàng toàn aij thì phép tách này không mất thông tin, ngược lại phép tách mất thông tin.

Ví dụ:

Cho r = ABCD, F = { A -> B, AC ->D} và phân rã ρ = {(AB), (ACD)}. T1(R) A B C D

R1a21b22a23a24

Với A -> B ta có: T2(R) A B C D R1a11a12b13b14

R1a21a22a23a24

Chúng ta thấy rằng ở bảng T2(R) xuất hiện hàng thứ hai toàn aij nên phép tách ρ bảo toàn thông tin.

Định lý

Trong trường hợp ρ = {R1,R2}, nghĩa là phép tách chỉ có 2 lược đồ con. Để kiểm tra phép tách có bảo toàn thông tin, ta sử dụng định lý sau.

Phép phân rã R thành ρ = {R1(U1), R2(U2)}là bảo toàn thông tin khi và chỉ khi U1? U2→ U1\U2hay U1? U2→ U2\U1

Một phần của tài liệu Tài liệu Cơ sở dữ liệu (Trang 28)