Thuật toán tìm tất cả khoá Ký hiệu: N: Tập thuộc tính nguồn, là tập chứa những thuộc tính chỉ xuất hiện ở vế trái, không nằm bên vế trái và vế phải của mọi phụ thuộc hàm (tương tự như nút gốc) TG: Tập thuộc tính trung gian, là tập chứa nhũng thuộc tính vừa xuất hiện ở vế trái và vừa xuất hiện ở vế phải trong các phụ thuộc hàm Ví dụ 1: Cho lược đồ quan hệ R(A, B, C, D, E, G, H) và tập phụ thuộc hàm F={ B → A , DA → CE, D → H, GH → C, AC → D} N = { B, G } TG = {A, C, D, H} Ví dụ 2: Cho lược đồ quan hệ R(A, B, C, D, E, G) và tập phụ thuộc hàm F={ AE → C , CG → A, BD → G, GA → E} N = { B, D } TG = {A, C, E, G} Khoa HTTT Đại học CNTT 2 Thuật toán tìm tất cả khoá (1) Bước 1: Tìm tập nguồn N. Nếu N+F = Q+ thì chỉ có 1 khoá là N, ngược lại qua bước 2 Bước 2: Tìm tập trung gian TG. Tìm tập tất cả các tập con Xi của tập TG. Bước 3: Tìm tập S chứa mọi siêu khoá Si Với mỗi Xi , nếu (N ∪ Xi)+F = Q+ thì Si = (N ∪ Xi) Nếu: (N ∪ Xi)+F = Q+ khi đó N ∪ Xi là một khoá. Do vậy loại bỏ các trường hợp Xj : Xi ⊂ Xj. VD: Xi = {AB}, Xj = {ABC}. Ta thấy Xi ⊂ Xj và Xi là khoá vì vậy không xét trường hợp Xj nữa.
Trang 1Khoa HTTT - Đại học
Thuật toán tìm khoá
Trang 2Thuật toán tìm tất cả khoá
Ký hiệu:
N: Tập thuộc tính nguồn, là tập chứa những thuộc tính chỉ xuất hiện
ở vế trái, không nằm bên vế trái và vế phải của mọi phụ thuộc
hàm (tương tự như nút gốc)
TG: Tập thuộc tính trung gian, là tập chứa nhũng thuộc tính vừa xuất
hiện ở vế trái và vừa xuất hiện ở vế phải trong các phụ thuộc hàm
Ví dụ 1: Cho lược đồ quan hệ R(A, B, C, D, E, G, H) và tập phụ thuộc hàm
F={ B → A , DA → CE, D → H, GH → C, AC → D}
N = { B, G }
TG = {A, C, D, H}
Ví dụ 2: Cho lược đồ quan hệ R(A, B, C, D, E, G) và tập phụ thuộc hàm
F={ AE → C , CG → A, BD → G, GA → E}
N = { B, D }
TG = {A, C, E, G}
Khoa HTTT - Đại học CNTT 2
Trang 3Thuật toán tìm tất cả khoá (1)
Bước 1: Tìm tập nguồn N Nếu N+
F = Q+ thì chỉ có 1 khoá là N, ngược lại qua bước 2
Bước 2: Tìm tập trung gian TG Tìm tập tất cả các tập con Xi
của tập TG
Bước 3: Tìm tập S chứa mọi siêu khoá Si
Với mỗi Xi , nếu (N ∪ Xi)+F = Q+ thì Si = (N ∪ Xi)
Nếu: (N ∪ Xi)+
F = Q+ khi đó N ∪ Xi là một khoá Do vậy loại
bỏ các trường hợp Xj : Xi ⊂ Xj
VD: Xi = {AB}, Xj = {ABC} Ta thấy Xi ⊂ Xj và Xi là khoá vì
vậy không xét trường hợp Xj nữa.
Khoa HTTT - Đại học CNTT 3
Trang 4Thuật toán tìm tất cả khoá (2)
Ví dụ Cho lược đồ quan hệ R(A, B, C) và tập phụ thuộc hàm
F={ AB → C, C → A}
Bước 1: N = {B} B+
F = B ≠ Q+
Bước 2: TG = {A, C}
Tất cả tập con của tập trung gian CTG = {A, C, AC}
Bước 3:
Kết luận: Tập Khoá S= {AB, BC}
Khoa HTTT - Đại học CNTT 4
N X i (N ∪ X i ) (N ∪ X i ) +
F (N ∪ X i ) +
F = Q +
B AC Không xét vì Xi = A ⊂ Xj = AC
Trang 5Thuật toán tìm tất cả khoá (3)
Ví dụ: Cho lược đồ quan hệ R(A, B, C, D, E, G) và tập phụ thuộc
hàm
F={ AE → C , CG → A, BD → G, GA → E}
Tìm tất cả các khóa của R?
KQ: ABD, BDC
Khoa HTTT - Đại học CNTT 5
Trang 6Bước 1: N = {BD} BD+
F = BDG ≠ Q+
Bước 2: TG = {A, C, E, G}
Tất cả tập con của tập trung gian CTG = {A, C, E, G, AC, AE, AG, CE, CG, EG, ACE, ACG,
CEG, ACEG}
Bước 3:
Các tập không xét vì Xj : Xi ⊂ Xj : {AC, AE, AG, CE, CG,
ACE, ACG, CEG, ACEG}
Kết luận: Tập Khoá S= {ABD, BCD}
Khoa HTTT - Đại học CNTT 6
N X i (N ∪ X i ) (N ∪ X i ) +
F (N ∪ X i ) +
F = Q +
Trang 7Thuật toán tìm một khóa
Thuật toán tìm một khóa của một lược đồ quan hệ Q
Bước 1: gán K = Q+
Bước 2: A là một thuộc tính của K, đặt K’ = K - A.
Nếu K’+= Q+ thì gán K = K' thực hiện lại bước 2
Nếu muốn tìm các khóa khác (nếu có) của lược đồ quan
hệ, ta có thể thay đổi thứ tự loại bỏ các phần tử của K
Trang 8Thuật toán tìm một khóa
Ví dụ: cho lược đồ quan hệ Q và tập phụ thuộc hàm
F như sau:
‒ Q(A,B,C,D,E)
‒ F={AB C, AC B, BC DE} tìm khóa K
B1: K=Q+ K=ABCDE
B2:(K\A)+ (BCDE)+=BCDE ≠ Q+ K=ABCDE
B3:(K\B)+ (ACDE)+= ABCDE = Q+ K=ACDE
B4: (K\C)+ (ADE)+ = ADE ≠ Q+ K=ACDE
B5: (K\D)+ (ACE)+ = ACEBD=Q+ K=ACE
B6: (K\E)+ (AC)+ = ACBDE =Q+ K=AC
Trang 9Thuật toán tìm một khóa
Ví dụ: cho lược đồ quan hệQ(ABCDEGHI) và
tập thuộc tính F={AC B;
Trang 10BÀI TẬP