3.1 Giới thiệu
Mục tiêu của lý thuyết CSDL là tính độc lập của dữ liệu. Cấu trúc các hệ cơ sở dữ liệu phản ánh tính hiện thực, khách quan và tính toàn vẹn dữ liệu. Vì vậy trong quá trình chuẩn hóa dữ liệu và tìm kiếm thông tin, cần thiết phải thực hiện các phép tách lược
đồ quan hệ chưa chuẩn hóa về tập các lược đồ quan hệ đã được chuẩn hóa, sao cho quá trình tách không làm mất mát thông tin, theo nghĩa các quan hệ gốc được khôi phục chính xác từ phép kết nối tự nhiên của các quan hệ chiếu.
Tách – kết nối các lược đồ quan hệ có làm tổn thất thông tin hay không, có bảo toàn các phụ thuộc hay không đã được nhiều người nghiên cứu, giải quyết. A.V. Hom C. Beeri & J.D. Ullman giới thiệu thuật toán xác định phép kết nối giữa các lược đồ quan
hệ không có tổn thất thông tin với các giả thiết các phụ thuộc dữ liệu là các phụ thuộc hàm. Các ông cũng đã mở rộng vấn đề này cho các trường hợp phụ thuộc dữ liệu là phụ thuộc đa trị.
11 3.2 Phép tách
Định nghĩa: Phép tách các lược đồ quan hệ R = {A1, A2, .. An} là việc thay thế lược
đồ quan hệ R bằng tập các lược đồ con {R1, R2, .., Rk}, trong đó:
Ri ⊂ R, i = 1, …, k - Ri là các lược đồ con
và R = R1 ∪ R2 ∪ ... ∪ Rk
Không đòi hỏi các Ri phải là phân biệt.
Mục đích của phép tách: Loại bỏ các dị thường dữ liệu
Trung tâm Đào tạo E-learning Cơ hội học tập cho mọi người
Cơ sở dữ liệu - Bài 6 Trang 23
Ví dụ: Cho lược đồ quan hệ: S(MCTY, ĐC, MH, GIA) và tập PTH:
F = { MCTY → ĐC; MCTY, MH → GIA }
Dị thường: địa chỉ một công ty phải lưu nhiều lần vì một công ty có thể có nhiều mặt
hàng khác nhau.
Để giải quyết việc trùng lặp thông tin, lược đồ quan hệ trên có thể được tách thành 2 lược đồ khác là: S1( MCTY, ĐC) và S2( MCTY, MH, GIA) như vậy sẽ không lưu
địa chỉ của một công ty nhiều lần
3.3 Tách – kết nối không mất mát thông tin
Giả sử R tách thành các lược đồ con R1, R2, .., Rk và F là một tập PTH.
Nói rằng phép tách R thành các lược đồ con R1, R2, …, Rk là tách - kết nối không
mất mát thông tin đối với F nếu với mỗi quan hệ r trên R thoả F thì r = ΠR1(r) * Π R2 (r) * ... * Π Rk(r)
Tức là r được tạo nên từ phép kết nối tự nhiên của các hình chiếu của nó trên các
Ri, i= 1 … k
Ví dụ: Lược đồ quan hệ quản lý phát hành báo chí QLBC gồm các thuộc tính: R =
{MK#, TK, DC, MB#, TB, GIA, SL} và
F = { MK# → TK; MK# → DC; MB# → TB; MB# → GIA; (MK#,MB#) → SL }. Trong đó:
MK#: Mã khách hàng TK : Tên khách hàng
DC : Địa chỉ khách hàng MB#: Mã báo, tạp chí
TB : Tên báo, tạp chí GIA: Đơn giá báo, tạp chí
SL : Số lượng báo, tạp chí khách đặt mua
MK# TK DC MB# TB GIA SL
KH1 Nguyễn Hằng Thanh Xuân MB1 Tiền phong 5000 20 KH1 Nguyễn Hằng Thanh Xuân MB2 Công an ND 6000 15 KH2 Phạm Huy Hoàng Đống Đa MB1 Tiền phong 5000 10 KH2 Phạm Huy Hoàng Đống Đa MB3 An ninh TĐ 4000 12 KH3 Trần Xuân Đức Hoàn Kiếm MB2 Công an ND 6000 7 KH3 Trần Xuân Đức Hoàn Kiếm MB1 Tiền phong 5000 15 KH3 Trần Xuân Đức Hoàn Kiếm MB3 An ninh TĐ 4000 10
Trung tâm Đào tạo E-learning Cơ hội học tập cho mọi người
Cơ sở dữ liệu - Bài 6 Trang 24
Trong lược đồ quan hệ QLBC, các thông tin về tên khách (TK) , địa chỉ (DC), tên báo (TB) … lặp lại rất nhiều lần trong các quan hệ thể hiện, đó là nguyên nhân dẫn đến sự xuất hiện các bất thường, nhập nhằng thông tin. Phép tách φ được mô tả dưới đây, sẽ tách lược đồ QLBC thành 3 lược đồ chiếu. Lược đồ s3 = <R3, F3> chỉ cần lưu trữ thông tin về số lượng các loại báo của mỗi một khách hàng đặt mua. Lược đồ quan hệ s1 = <R1 , F1> lưu trữ thông tin về khách đặt mua báo, và tương tự trong lược đồ quan hệ s2 = <R2 , F2> lưu trữ thông tin về các loại báo. Có thể kiểm tra phép tách φ không tổn thất thông tin và bảo toàn được các phụ thuộc hàm.
Phép tách φ[R1 , R2 , R3]:
• R1 ={M#, TK,DC } , F1 ={MK# → TK, MK# → DC}.
• R2 ={MB#, TB, GIA } , F2 ={MB# → TB, MB# → GIA}.
• R3 ={M#, MB#, SL} , F3 ={(MK#,MB#) → SL}.
Ω1 = {M#, TK,DC } Ω3 = {M#, MB#, SL}
MK# TK DC MK# MB# SL
KH1 Nguyễn Hằng Thanh Xuân KH1 MB1 20
KH2 Phạm Huy Hoàng Đống Đa KH1 MB2 15
KH3 Trần Xuân Đức Hoàn Kiếm KH2 MB1 10
Ω2 = {MB#, TB, GIA } KH2 MB3 12
MB# TB GIA KH3 MB2 7
MB1 Tiền phong 5000 KH3 MB1 15
MB2 Công an ND 6000 KH3 MB3 10
MB3 An ninh TĐ 4000
Như vậy mục tiêu của phép tách lược đồ quan hệ là nhằm loại bỏ các dị thường thông tin khi thực hiện các phép lưu trữ như chèn thêm, loại bỏ hay sửa đổi thông tin trong trong các quan hệ lưu trữ. Tuy nhiên khi thực hiện phép tách, thông tin của lược đồ quan hệ có bị tổn thất hay không. Nói cách khác nếu kết nối tự nhiên các thành phần lược đồ quan hệ chiếu, liệu thông tin của lược đồ quan hệ gốc có tổn thất thông tin hay không, các phụ thuộc hàm có được bảo toàn hay không?
21 3.4 Thuật toán kiểm tra tách không tổn thất thông tin
Input:
- R = {A1, A2, .., An} – n thuộc tính với tập PTH F và
- phép tách p = (R1, R2, .., Rk) – k lược đồ con
Output: Kiểm tra phép tách có mất mát thông tin hay không ?
Trung tâm Đào tạo E-learning Cơ hội học tập cho mọi người
Cơ sở dữ liệu - Bài 6 Trang 25
Thuật toán:
Bước 1: Tạo bảng với n+1 cột và k+1 hàng
- Cột thứ j tương ứng với thuộc tính Aj
- Hàng thứ i tương ứng với lược đồ Ri.
- Tại ô (i,j) điền kí hiệu aj nếu Aj ∈ Ri, ngược lại điền kí hiệu bij
A1 A2 … An-1 An
R1 = A1…An a1 b12 … an-1 b1n
R2 … … … … …
… … … … … …
Rk … … … … …
Bước 2: Lần lượt xét các PTH (X → Y) ∈ F, áp dụng để thay đổi giá trị trên bảng theo nguyên tắc:
Nếu tồn tại các hàng mà tất cả các cột tương ứng với thuộc tính X có giá trị bằng nhau thì làm bằng nhau trên thuộc tính Y bằng cách điền lại giá trị tại các cột thuộc tính
Y theo nguyên tắc: nếu có một giá trị aj trong các cột tương ứng với các thuộc tính của Y thì đồng nhất các ký hiệu thành aj, nếu không thì đồng nhất thay bằng ký hiệu
bij với bij nhỏ nhất
Tiếp tục áp dụng tất cả các phụ thuộc hàm cho bảng (kể cả lặp lại các phụ thuộc hàm
đã áp dụng) cho tới khi không làm thay đổi gì trên bảng nữa.
Bước 3: Xem xét kết quả và đánh giá
Nếu trong bảng xuất hiện một hàng gồm toàn kí hiệu a1, a2, .. , an thì phép tách-kết nối là không mất mát thông tin, ngược lại là phép tách-kết nối có mất mát thông tin.
Ví dụ: Cho quan hệ: CungCap(S#, Sname, Add, Item, Price)
Tập phụ thuộc hàm: S# → Sname,Add và Sname,Item → Price
Kiểm tra phép tách CC(S#, Sname, Add, Item, Price) thành hai sơ đồ con Cty{S#, Sname, Add} và MatHang{S#, Item, Price} có mất mát thông tin?
Các bước thực hiện:
Lập bảng gồm 3 hàng và 6 cột
S# Sname Add Item Price
S#, Sname, Add a1 a2 a3 b14 b15
Trung tâm Đào tạo E-learning Cơ hội học tập cho mọi người
Cơ sở dữ liệu - Bài 6 Trang 26
S#, Item, Price a1 b22 b23 a4 a5
Xét PTH S# → Sname, Add:
- Có cả hai hàng bằng nhau tại thuộc tính S#
- Làm bằng nhau các kí hiệu đối với thuộc tính Sname và Add
# làm b22 thành a2
# làm b23 thành a3
Ta có bảng như sau
Bảng có một hàng bao gồm các ký hiệu a. Vì vậy, phép tách không mất mát thông tin
Ví dụ: Cho quan hệ R = ABCDE, Tập phụ thuộc hàm F = {A → C, B → C, C → D,
DE → C, CE → A}
Tách thành các quan hệ: R1 = AD, R2 = AB, R3 = BE, R4 = CDE, R5 = AE
Kiểm tra phép tách trên có mất mát thông tin không?
• Lập bảng 6 hàng – 6 cột
• Xét PTH: A → C
o Có các hàng 1, 2, 5 bằng nhau trên thuộc tính A
o Làm bằng nhau các ký hiệu đối với các thuộc tính C, cụ thể: b23, b53
thành b13
Trung tâm Đào tạo E-learning Cơ hội học tập cho mọi người
Cơ sở dữ liệu - Bài 6 Trang 27
! Xét PTH: B → C
o Có các hàng 2, 3 bằng nhau trên thuộc tính B
o Làm bằng nhau các ký hiệu đối với các thuộc tính C, cụ thể: b33 thành b13
! Xét PTH: C → D
o Có các hàng 1, 2, 3, 5 bằng nhau trên thuộc tính C
o Làm bằng nhau các ký hiệu đối với các thuộc tính D, cụ thể: b24, b34, b54 thành a4
! Xét PTH: DE → C
o Có các hàng 3, 4, 5 bằng nhau trên thuộc tính DE
Trung tâm Đào tạo E-learning Cơ hội học tập cho mọi người
Cơ sở dữ liệu - Bài 6 Trang 28
o Có thể làm bằng nhau các ký hiệu đối với các thuộc tính C, thay b13 thành a3
! Xét PTH: CE → A
o Có các hàng 3, 4, 5 bằng nhau trên thuộc tính CE
o Có thể làm bằng nhau các ký hiệu đối với các thuộc tính A, thay b31, b41 thành a1
Kết quả: Có dòng 3 chứa các ký hiệu a. Vậy phép tách – kết nối không mất mát
thông tin.