BAZY DANYCH I SYSTEMY BAZ DANYCH
Tabela 9.3. Lista lekarzy (1)
Klucz główny A |
Atrybut B | |
Nazwisko |
Imię |
Gabinet |
Nowak |
Jan |
Kardiologiczny |
Nowak |
Zdzisław |
Neurologiczny |
Kowalski |
Józef |
Psychiatryczny |
Kowalski |
Marek |
Stomatologiczny |
Jak łatwo zauważyć, gabinet, w którym pracują lekarze, identyfikowany jest przez klucz główny A składający się z dwóch atrybutów - Nazwisko i Imię. Atrybut B - Gabinet jest funkcyjnie zależny od klucza głównego, ponieważ każdy z lekarzy ma inną specjalizację, czego naturalną konsekwencją jest to, że kardiolog Jan Nowak nie może pracować w gabinecie stomatologicznym.
Tabela 9.4. Lista lekarzy (2)
Nazwisko |
Gabinet |
Nowak |
Kardiologiczny |
Nowak |
Neurologiczny |
Kowalski |
Psychiatryczny |
Kowalski |
Stomatologiczny |
Jednak gdy od klucza A odejmiemy któryś z atrybutów, np. imię, wówczas zależność zostanie utracona, gdyż dla samego nazwiska, np. Kowalski, będziemy mogli przypisać dwa gabinety (psychiatryczny i stomatologiczny). Zgodnie z założeniami zależności funkcyjnej A -+ B, B jest funkcyjnie zależne od A, gdy dla każdej innej wartości A mamy odpowiadającą jej inną wartość B oraz dla tych samych wartości A mamy te same odpowiadające im wartości B. W tym przypadku założenia zależności funkcyjnej zostały naruszone, ponieważ dla tych samych wartości A (Nowak, Nowak) mamy różne wartości B (kardiologiczny, neurologiczny).
Nasze rozważania sprowadzają się do twierdzenia, że pełna zależność funkcyjna występuje wtedy, gdy klucz główny jest w stanie jednoznacznie identyfikować krotki zmiennej relacyjnej wyłącznie za pomocą wszystkich należących do niego atrybutów. Straci tę właściwość, gdy którykolwiek z wchodzących w jego skład atrybutów zostanie mu odjęty__
Z przechodnią zależnością funkcyjną mamy do czynienia, gdy A nie jest bezpośrednim wyznacznikiem C, wówczas można określić tę zależność jako pośrednią. Atrybut A determinuje funkcyjnie od niego zależny atrybut B (nazwijmy tak umownie kolejną kolumnę), natomiast atrybut B determinuje funkcyjnie zależny atrybut C.
Zapiszmy ten przykład jako A -* B i B -* C. Ponieważ C funkcyjnie zależy od B, to zależy również od A, ale nie bezpośrednio.