Thuật toán tìm 2 khóa của LĐQH

Một phần của tài liệu các dạng biểu diễn khóa trong lược đồ quan hệ (Trang 25 - 71)

Bước 1: Tính giao các khóa

Bước 2: Lấy M+. Nếu M+ = U  Lược đồ có 1 khóa M là duy nhất M+  U  Lược đồ có trên 1 khóa

Gọi thuật toán Key – Tìm khóa 1 Gọi thuật toán Key 2 – Tìm khóa 2

Tư tưởng: Xuất phát từ tập thuộc tính M = U, trước hết duyệt các thuộc tính

A của K, nếu bất biến (M\{A})+ = U được bảo toàn thì loại A khỏi M. Sau đó duyệt tương tự với các thuộc tính trong U\K.

Algorithm Key 2

Function : tìm một khóa thứ hai của LĐQH Fomat: Key 2 (U,F)

Input: - Tập thuộc tính U

- Tập PTH F - Khóa KU

Output: Khóa thứ 2 , nếu có, MU thỏa (i) M+ = U

(ii) AM : (M\{A})+  U

Nếu không có khóa thứ 2: Ø

Method

M : = U;

For each attribute A in U \ K do

M : = M \ {A} Endif;

Endfor;

For each attribute A in U \ K do

If A (M\{A})+ then M : = M \ {A} Endif; Endfor; If M = K then return Ø Else return M; Endif Endfor End key 2. 1.5.3. Các ví dụ

Ví dụ 1: Cho LĐQH p = (U,F) trong đó: U = ABCDE

F = {BCD CDA

DE

AB}

a. Hãy xác định phần giao của các khóa trong p

b. Tìm một khóa K1 của p

c. p có còn khóa nào khác ngoài K1 không? Vì sao? d. Xác định các tập thuộc tính không khóa U0 của p

Giải

Theo công thức, ta có: M = U \  F R L L R   ) \ ( = ABCDE ABDE = C b. Tìm một khóa K1 của p Đặt K0 = U = ABCDE K1 = K0 – E = ABCD vì (K0 - E)+ = UDE ( loại E) K2 = K1 – D = ABC vì (K1 - D)+ = UBCD ( loại D) K3 = K2 = ABC vì (K2 - C)+ U K4 = K3 – B = AC vì (K3 - B)+ = UAB ( loại B) K5 = K4 – A = C vì (K4 - A)+  U K5 = K4 = AC vì (K2 - A)+ U K6 = K5 – C = A vì (K4 - C)+  U K6 = K5 = AC vì (K2 - C)+ U Vậy khóa K1 của pAC. c. p còn khóa khác ngoài khóa K1 vì:

M+= C+ = CU nên lược đồ có hơn một khóa.

Dễ thấy rằng, ngoài khóa K1, lược đồ còn có khóa K2 = BC vì thỏa mãn hai điều kiện sau:

(i) K+ = BC+ = ABCDE = U (adsbygoogle = window.adsbygoogle || []).push({});

(ii) BC tối tiểu (theo nghĩa (K\{BC})+  U).

Tương tự, ta còn tìm được khóa thứ 3 của lược đồ quan hệ p như sau: K3 =

CD.

d. Xác định tập các thuộc tính không khóa U0 của p.

- Thuộc tính khóa là thuộc tính có mặt trong mọi khóa, ký hiệu là Uk.

- Thuộc tính không khóa là thuộc tính không có mặt trong bất cứ khóa nào, ký hiệu là U0.

Ví dụ 2: Cho LĐQH p = (U, F) trong đó: U = ABC F = {ABC

CA}

a. Hãy xác định phần giao của các khóa trong p

b. Tìm một khóa K1 của p

c. p có còn khóa nào khác ngoài K1 không? Vì sao? d. Xác định các tập thuộc tính không khóa U0của p

Giải

a. Xác định phần giao của các khóa trong p

Theo công thức, ta có: M = U \  F R L L R   ) \ ( = ABCCA = B b. Tìm một khóa K1 của p Đặt K0 = U = ABC K1 = K0 – A = BC vì (K0 - A)+ = UCA ( loại A) K2 = K1 – B = C vì (K1 - B)+ U K3 = K1 = BC vì (K2 - B)+ U K4 = K1 – C = B vì (K2 - C)+ U K5 = BC

Vậy khóa K1 của pBC. c. p còn khóa khác ngoài khóa K1 vì:

M+= B+ = BU nên lược đồ có hơn một khóa.

Dễ thấy rằng, ngoài khóa K1, lược đồ còn có khóa K2 = AB vì thỏa mãn hai điều kiện sau:

(i) K+ = AB+ = ABC = U

(ii) AB tối tiểu (theo nghĩa (K\{AB})+  U). d. Xác định tập các thuộc tính không khóa

- Thuộc tính khóa là thuộc tính có mặt trong mọi khóa, ký hiệu là Uk.

- Thuộc tính không khóa là thuộc tính không có mặt trong bất cứ khóa nào, ký hiệu là U0.

Ta có: Uk = ABC,  U0 = Ø .

Ví dụ 3: Cho LĐQH p = (U,F) trong đó: U = ABCD

F = {ADBC BA DC }

a. Hãy xác định phần giao của các khóa trong p

b. Tìm một khóa K1 của p

c. p có còn khóa nào khác ngoài K1 không? Vì sao? d. Xác định các tập thuộc tính không khóa U0 của p

Giải

a. Xác định phần giao của các khóa trong p

Theo công thức, ta có: M = U \  F R L L R   ) \ ( = ABCDABC = D b. Tìm một khóa K1 của p Đặt K0 = U = ABCD K1 = K0 – A = BCD vì (K0 - A)+ = U BA ( loại A) K2 = K1 – B = CD vì (K1 - B)+  U K3 = K1 - C = BD vì (K2 - C)+ = U (loại C) K4 = K3 – D = B vì (K4 - D)+  UAB ( loại B) K5 = K3 = BD (adsbygoogle = window.adsbygoogle || []).push({});

Vậy khóa K1 của pBD

c. p còn khóa khác ngoài khóa K1 vì:

Dễ thấy rằng, ngoài khóa K1, lược đồ còn có khóa K2 = AD vì thỏa mãn hai điều kiện sau:

(i) K+ = AD+ = ABCD = U

(ii) AD tối tiểu (theo nghĩa (K\{AD})+  U). d. Xác định tập các thuộc tính không khóa U0 của p.

- Thuộc tính khóa là thuộc tính có mặt trong mọi khóa, ký hiệu là Uk.

- Thuộc tính không khóa là thuộc tính không có mặt trong bất cứ khóa nào, ký hiệu là U0.

CHƢƠNG II : THU GỌN LƢỢC ĐỒ QUAN HỆ 2.1. Định nghĩa kỹ thuật thu gọn LĐQH

Cho hai LĐQH p = (U, F) , q = (V, G) và tập thuộc tính MU. Ta nói LĐQH q nhận được từ LĐQH p qua phép thu gọn theo tập thuộc tính M, nếu sau khi loại bỏ mọi xuất hiện của các thuộc tính của M trong lược đồ p thì thu được lược đồ q.

Nếu sau khi thực hiện phép thu gọn theo M cho LĐQH p ta thu được LĐQH

q thì ta viết q = p\M.

Thao tác loại bỏ M được thực hiện trên lược đồ p = (U, F) để thu được lược đồ q = (V, G) như sau :

1. Tính V = U\M có độ phức tạp O(n) với n là số lượng thuộc tính trong U. 2. Mỗi PTH XY trong F ta tạo ra PTH X\MY\M cho G. Thủ tục này ký hiệu là G = F\M. Tính F\M đòi hỏi độ phức tạp O(m,n) với m là số lượng PTH trong F.

Như vậy q = P\M = (U\M, F\M) được thực hiện với độ phức tạp O (m, n), tức là tuyến tính theo chiều dài dữ liệu vào (của LĐQH p) .

Sau khi thực hiện thủ tục G = F\M nếu :

- G chứa PTH tầm thường (dạng XY, XY) thì ta loại các PTH này khỏi G. - G chứa các PTH trùng lặp thì ta bớt các PTH này.  Ví dụ 1: Cho LĐQH p = (U, F) ; U = abcdefg F = {abcde, bcd ag, defc, cefg}

Với M = cfg, hãy xác định q = (V,G) = q\M. Ta có : V = U \ cgf = abcdefg \ cfg = abde G = {abde, bda, deØ ,(loại) eØ, (loại)} = {abde, bda}

Ta cũng dễ nhận thấy kỹ thuật thu gọn LĐQH thỏa tính hợp thành và giao hoán, cụ thể nếu p là LĐQH trên tập thuộc tính UX, Y là hai tập con rời nhau của U thì

p\XY = (p\X)\Y = (p\Y)\X

2.2 Thuật toán thu gọn LĐQH

Algorithm Translation Format : Translation (p, M) Input: - LĐQH p = (U,F) - Tập thuộc tính MU Output: - LĐQH q =(U, G) = p\M, V = U\M, G =F\M. Method V := U\M; G := Ø For each FD LR in F do G : = G{L\MR\M}; Endfor;

G := Natural_Reduced(G);

Return (V, G);

End Translation.

Thủ tục Natural_Reduced(G) đưa tập PTH G về dạng thu gọn tự nhiên bằng cách loại khỏi G những PTH tầm thường (có vế trái chứa vế phải), chuyển đổi mỗi PTH có hai vế trái phải rời nhau và gộp các PTH có cùng vế trái.

2.3. Các ví dụVí dụ 1: Ví dụ 1: Chho LĐQH p = (U, F), U = ABCDEH F = {AED, ADH, BCE, EBC}

Với M = ADH, hãy xác định q = (V,G) = p\M? Ta có: V = U\ADH = ABCDEH\ADH = BCE,

G = {EØ (loại), ØØ (loại), BCE,

EBC} = {BCE, EBC}

Ta nhận phép thu gọn thỏa tính hợp thành và giao hoán, cụ thể nếu p là LĐQH trên tập thuộc tính UX, Y là hai tập con rời nhau của U thì (adsbygoogle = window.adsbygoogle || []).push({});

p\XY = (p\X)\Y = (p\Y)\X

Ví dụ 2 : Cho LĐQH p = (U, F), U = ABCDEH F = {AED,

EBC}

DỂ TÌM TẬP KHÓA Key (p) của lược đồ p chúng ta xây dựng một lược đồ

q bằng cách xóa khỏi lược đồ p các thuộc tính A, D, H. Ta thu gọn lược đồ q = (V,G) trong đó :

V = U\ADH = ABCDEH \ ADH = BCE,

G = {EØ (loại), BCE, EBC} = {BCE, EBC}

Ta dễ dàng tìm được Key (q) = {BC, E}. Để thu được Key (p) ta chỉ việc thêm thuộc tính AH (không thêm D) vào mỗi khóa của lược đồ q.

Vậy Key (p) = {AHBC, AHE}. Dù F là tập PTH tối ưu theo nghĩa chứa ít ký hiệu nhất, nhưng G còn chứa ít ký hiệu hơn F.

Ví dụ 3: Cho LĐQH p = (U,F), Với tập thuộc tính U = ABCDEIH. Tập thuộc tính F = {AD,

ABDE,

CEI,

EH} Tính Key(p)?

Để tìm tập khóa của p bằng cách thu gọn LĐQH p theo M = ABC. Ta thu được LĐQH q = p\M = (V,G).

V = U\M = ABCDEIH \ ABC = DEIH.

G = F\ M = { Ø D Ø DE, EI,

EH,

Ta dễ dàng suy ra Key(q) = Ø.

Để thu được Key (p), ta chỉ cần thêm vào Key (q) các thuộc tính vừa thu gọn ABC. Ta được Key (p) = ABC.

Ví dụ 4: Cho LĐQH p = (U,F), Với tập thuộc tính U = ABCDEH.

Tập PTH F = {ABC, CA, BCD, ACDB, DEH, BEC,

CHBD, CECH} Tìm Key(p)?

Ta thu gọn lược đồ quan hệ p theo thuộc tính C. Thu được LĐQH:

q = p\C = (V,G). V = ABDEH.

G = {AB Ø (loại), Ø A, BD, ADB, DEH, BE Ø (loại), HBD, EH} = {ØA, BD, ADB, DEH, HBD, EH}.

Ta tìm được khóa của lược đồ q: Key(q) = {B,D,E,H}. Để thu được Key (p), ta thêm thuộc tính C vào khóa của q.

Ta được Key (p) = {BC, DC, EC, HC}.

2.4. Bổ đề về siêu khóa trong phép thu gọn LĐQH

Cho hai LĐQH p = (U,F), q = (V,G) và XU. Biết q= p\X. Khi đó : i) Nếu M là siêu khóa của p thì M\X là siêu khóa của q.

ii)Nếu Z là siêu khóa của q thì ZM là siêu khóa của p. Nói riêng nếu XU0 và Z là siêu khóa của q thì Z là siêu khóa của p. (adsbygoogle = window.adsbygoogle || []).push({});

Chứng minh

i) Giả sử M là siêu khóa của a. Đặt P =M\X, ta có XP = ØMXP. Vì M là siêu khóa của p, vận dụng tính đồng biến của bao đóng và công thức biểu diễn bao đóng ta có, U = XV = M+F  (XP)+F = XP+F\X. Từ đẳng thức

XV = (XP)+F\X , XV= ØXP+F\X = Ø ta suy ra P+F\X = V. Vậy P = M\X là siêu khóa của q.

ii) Đảo lại, giả sử Z là siêu khóa của q = p\X. Khi đó ZX = ØZ+G= V. Đặt M = XZ, ta có M+F = (XZ)+F= XZ+F\X = XZ+G = XV =U. Vậy XZ là siêu khóa của p.

Nếu XU0 thì ta có thể loại bỏ XZ bộ phận thuộc tính không khóa X để thu được Z là siêu khóa của p.

Ví dụ : Cho LĐQH p = (U,F). U = ABCDEHKI. F = {ABC,

CDEH,

HK} Ta có siêu khóa Key(p) =ABI.

Ta thu gọn p theo X = BI ta được lược đồ q = p\BI = (V,G) V= ABCDEHKI\BI = ACDEHK

G = {AC,

CDEH,

HK} Ta có siêu khóa Key(q) = A

Ta kiểm tra Key(p)\BI = ABI\BI = A = Key (q) Hay nói cách khác Key(p) = Key(q)\X = ABI.

2.5. Hệ quả về siêu khóa trong phép thu gọn LĐQH

Cho hai LĐQH p = (U,F), và tập thuộc tính XU. Khi đó Z là siêu khóa của lược đồ p\X+

thì XZ là siêu khóa của lược đồ p.

Ví dụ : Cho LĐQH p = (U,F). Với U = ABCDEHKI. F = {ABC,

CDEH,

HK}

Ta dễ dàng tính được siêu khóa Key(p) = ABI. Cho X = AB suy ra

X+ = (AB)+ = ABCDEHK.

Ta thu được lược đồ p theo X+ = ABCDEHK ta thu được lược đồ

q = p\X+ = p\ABCDEHK = (V,G)

V = U\BI = ABCDEHKI\ABCDEHK = I.

G = F\ABCDEHK = { ØØ(loại),

ØØ(loại),

ØØ(loại)} Ta tính siêu khóa Key(q) = I.

Như vậy Key(p) = Key(q)\X = ABI.

2.6. Bổ đề về khóa trong phép thu gọn LĐQH

Cho hai LĐQH p = (U,F), q = (V,G) và tập thuộc tính XU0. Biết q= p\X. Khi đó Key(p) = Key(q). (adsbygoogle = window.adsbygoogle || []).push({});

Chứng minh

Giả sử KKey(p). Khi đó nói riêng K là siêu khóa của p. Do KUK, X

U0, UKU0 = Ø nên theo bổ đề về siêu khóa trong phép thu gọn LĐQH, K =

K\X là siêu khóa của q. Giả sử K chứa siêu khóa M của q. Khi đó theo bổ đề về siêu khóa trong phép thu gọn LĐQH ta có M la siêu khóa của p. Do K là khóa của p, M là siêu khóa của p chứa trong K, nên theo tính chất tối thiểu của khóa ta phải có M= K. Vậy K là khóa của q.

Đảo lại, nếu K là khóa của q thì KX = Ø và theo bổ đề về siêu khóa trong phép thu gọn LĐQH ta có M\X là siêu khóa của q. Do K là khóa của qK chứa

Ví dụ: Cho LĐQH p = (U,F). Với U = ABCDEHIK. F = {ABC,

CEH,

HAB}

Ta tính được UK= DIK suy ra U0 = U\UK = ABCEH.

Ta thu gọn lược đồ p theo ABCEH được lược đồ q = (V,G) với V =U\ABCEH = DIK.

G =F\ABCEH = { ØØ(loại), ØØ,

ØØ(loại)} Ta tính được Key(q) = DIK. Vậy Key(p) = Key(q).

Chƣơng III: CÁC DẠNG BIỂU DIỄN KHOÁ TRONG LƢỢC ĐỒ QUAN HỆ

3.1. Dạng biểu diễn thứ nhất của khoá

Nếu thu gọn LĐQH p = (U,F) theo tập XU để nhận được LĐQH q = p\X thì:

1. Key(p) = Key(q)và chỉ khi XU0

2. Key(p) =XKey(q)và chỉ khi XU1

Chứng minh

1. Giả sử Key(p) = Key(q), AX AU0. Theo phân hoạch của các thuộc tính trong U, AUK thì phải tồn tại một khóa K trong Key(p) để AK.

Do Key(p) = Key(q) nên K = Key(q). Từ đây ta suy ra KU\X hay là KX

= Ø. Điều chỉnh mâu thuẫn với AKAX. Vậy ta phải có XU0 (Suy từ bổ đề về khóa trong phép thu gọn LĐQH).

2. Đẳng thức Key(p) = XKey(q) cho biết X có mặt trong mọi khóa của p, tức là XUI. Giả sử XU1.

Ta sẽ chứng minh mọi khóa KKey(p) đều được biểu diễn dạng XM, trong đó MKey(q) và ngược lại, nếu MKey(q) thì MXKey(p).

Cho M=Key(p).Khi đó, vì XU1 nên X phải có trong mọi khóa của p, nói riêng XK. Đặt M=K\X, ta có MX= ØK=XM. Theo bổ đề về siêu khóa trong phép thu gọn LĐQH ta suy ra M=K\X là siêu khóa của q. Giả sử m chứa một siêu khóa P của q. Khi đó XP lại là siêu khóa của pXPK. Vì K là khóa của p nên XP = K = XM. Để ý rằng XP = XM = Ø, ta suy ra P = M. Vậy M là khóa của q.

Cho MKey(q). Ta có XM = Ø. Theo bổ đề về siêu khóa trong phép thu gọn LĐQH thì XM là siêu khóa của p. Gọi K là khóa của p chứa trong siêu khóa

XM. Lại theo bổ đề vể siêu khóa trong phép thu gọn LĐQH, K\X là siêu khóa của

q. Vì K là khóa của p X U1 nên XK. Từ đây suy ra K\X = M, hay K =

XM. Điều này chứng tỏ XM là khóa của p.

3.1.1. Các ví dụ

Ví dụ 1. (adsbygoogle = window.adsbygoogle || []).push({});

1. Cho LĐQH p = (U,F). U = ABCDEH. F = {AED

BCE}

Gọi U1 là giao khóa. Ta có: U1 = ABCDEH\DE = ABCH. Đặt q = (V, G) với V = U\ABCH = DE

G = F\ABCH = {ED, ØE}. Ta tính được Key(q) = {Ø}.

Vậy Key(p) = ABCHKey(q) = {ABCH}

2. Với lược đồ đã cho ta tính được UK = ABCH, suy ra

U0 = U\Uk = ABCDEH\ABCH = DE. Đặt c = p\DE = (P,W). P = U\DE = ABCH. W = F\DE = {AØ , BCØ}. Do đó Key(c) = ABCH.

Theo định lý thứ nhất về cách biểu diễn khóa Key(p) = Key(c) = ABCH.

Ví dụ 2. 1. Cho LĐQH p = (U,F). U = ABCDEFG. F = {ABCDE, BCDG, ABFEG CEFG}

Ta tính được U1 = U\DEFG = ABC.

Ta thu gọn lược đồ a theo ABC ta được: LĐQH q = (V,G)

Một phần của tài liệu các dạng biểu diễn khóa trong lược đồ quan hệ (Trang 25 - 71)