- DEFAULT IDENTITY
74REFERENCES Reservation)
7.2.1.5 Khố của quan hệ
Cho quan hệ R(U), tập KU được gọi là khĩa của quan hệ R nếu: K+=U và nếu bớt một phần tử khỏi K thì bao đĩng của nĩ sẽ khác U.
Như thế tập KU là khố của quan hệ nếu K+=U và ( K \A )+≠U , AU.
Ví dụ: Xét lược đồ quan hệ R(A, B, C, D, E, F) và tập phụ thuộc hàm
F = {A,BF; AC,D; BE}
Ta cĩ {A,B}+ = (A, B, C, D, E, F), A+ = {A, C, D} , B+ = {B, E} Vậy K={A, B} là khố của quan hệ.
Ví dụ: Cho R = { A, B, C, D, E, G } và tập phụ thuộc hàm:
F= { AB → C , D → EG , BE → C , BC → D , CG → BD, ACD → B, CE → AG} Ta sẽ thấy các tập thuộc tính:
K1 = { A, B } , K2 = {B,E} , K3={C,G} , K4={C,E} , K5 = {C,D}, K6={B,C} đều là khĩa của quan hệ.
Như vậy, một quan hệ cĩ thể cĩ nhiều khĩa.
Thuật tốn tìm khố: Tìm một khĩa K của R(U) dựa trên tập F các phụ thuộc hàm.
Ý tưởng: Bắt đầu từ tập U vì Closure(U+,F) = U. Sau đĩ ta bớt dần các phần tử của U để nhận được tập bé nhất mà bao đĩng của nĩ vẫn bằng U.
Thuật tốn:
Input: Lược đồ quan hệ R(U), tập phụ thuộc hàm F.
Output: Khố K Bước 1: Gán K = U
Buớc 2: Lặp lại các bước sau với mỗi thuộc tính A trong K. - Tính (K-A)+ đối với F
- Nếu (K-A)+ =U thì loại A ra khỏi K tức K:= K-A
Nhận xét:
- Thuật tốn trên chỉ tìm được một khĩa. Nếu cần tìm nhiều khĩa, ta thay đổi trật tự loại bỏ các phần tử của K.
- Chúng ta cĩ thể cải thiện tốc độ thực hiện thuật tốn trên bằng cách: Trong bước 1 ta chỉ gán K=Left (là tập các phần tử cĩ bên tay trái của các phụ thuộc hàm)
80
Cho lược đồ quan hệ R = { A,B,C,D,E,G,H,I} và tập phụ thuộc hàm:
F= { AC → B, BI → ACD, ABC → D , H → I , ACE → BCG , CG → AE } Tìm khố K? Ta cĩ Left={A,B,C,H,E,G} Bước 1: K=Left={A,B,C,H,E,G} Bước 2: Tập thuộc tính A B C D E G H I Ghi chú ABCHEG x x x x x x x x BCHEG x x x x x x x x Loại A CHEG x x x x x x x x Loại B CHG x x x x x x x x Loại E Như vậy, {C,H,G} là một khố của R.
Nếu muốn tìm tất cả các khố của R, ta cần thay đổi trật tự loại bỏ phần tử của khố K.