186 3. RELACYJNY MODEL DANYCH
spełniają zadane zależności funkcyjne. Natomiast poniższa relacja, która powstaje przez złączenie tych dwóch relacji, nic spełnia zależności tytuł miasto —* kino.
kino |
miasto |
tytuł |
Wisła |
Warszawa |
W sieci |
Polonia |
Warszawa |
W sieci |
Inne postacie normalne
Jeśli istnieje coś takiego jak „trzecia postać normalna”, to co stało się z pierwszymi dwiema „postaciami normalnymi”? One faktycznie były zdefiniowane, ale obecnie nic sąjuż stosowane. Pierwsza postać normalna oznacza po prostu warunek, że każda składowa w każdej krotce ma wartość atomową. Druga postać normalna jest mniej restrykcyjna niż postać 3NF. Są w niej dopuszczalne domknięcia przechodnie relacji, ale z kolei zabrania się wystąpienia takich zależności nietrywialnych, w których lewa strona jest poprawnym podzbiorem klucza. Istnieje także „czwarta postać normalna”, z którą zetkniemy się w podrozdziale 3.8.
Rozwiązanie tego problemu polega na nieznacznym osłabieniu wymagań BCNF. Dzięki temu zostaną uznane jako poprawme pewne schematy, takie jak np. schemat z przykładu 3.42, których nie można dekomponować do postaci BCNF bez utraty możliwości sprawdzenia zależności funkcyjnych w powstałych relacjach. laki osłabiony warunek nazywa się warunkiem trzeciej postaci normalnej (third nor mai form):
• Mówimy, że relacja R jest w trzeciej postaci normalnej (3NF) wtedy i tylko wtedy, gdy jest spełniony następujący warunek: jeśli A\A2... A„ —> B jest zależnością nietrywialną, to albo {A\, A2, ~,A„} jest nadklu-czem, albo B jest elementem pewnego klucza.
Zauważmy, że różnica między warunkiem BCNF oraz 3NF polega na dodaniu: „lub B jest elementem pewnego klucza”. W ten sposób występowanie zależności typu kino —» miasto z przykładu 3.42 staje się usprawiedliwione, ponieważ, prawa strona miasto jest elementem klucza.
Nie jest celem tej książki przedstawienie dowodu na to, że postać 3NF we właściwy sposób pełni swoje zadania. To znaczy, że każdy schemat relacji można metodą dekompozycji sprowadzić do postaci 3NF, gdzie są spełnione właściwe zależności funkcyjne. Jednakże jeśli otrzymane relacje nie spełniają BCNF, to wówczas w schemacie występuje redundancja.
Warto podkreślić, że podany przykład relacji spełniającej warunek 3NF, a nic BCNF, jest zupełnie inny niż poprzednio rozważane przykłady relacji, klórc nie spełniały warunku BCNF. Postać zależności funkcyjnej kino —► miasto jest w tym przypadku zupełnie typowa, ponieważ każde kino znajduje się w określonym mieście. Natomiast zależność:
tytuł miasto —* kino
pochodzi z praktyki stosowanej przez dystrybutorów filmów. W zasadzie można wyróżnić dwie kategorie zależności funkcyjnych: te. które wynikają z faktu, że w bazie jest reprezentowany pojedynczy obiekt świata rzeczywistego, oraz te. które wynikają z określonych zwyczajów, takich jak ustalenie, że jeden film w danym mieście jest grany tylko w jednym kinie.
Ćwiczenie 3.7.1. Dla każdego z poniższych schematów i zbiorów zależności funkcyjnych:
*a) R(A, fi, C, D) z zależnościami funkcyjnymi AR — C,C —* D oraz D —> A *b) R(A, B, C, D) z zależnościami funkcyjnymi fi —► Ci fi —► D
c) R(A, fi, C. D) z zależnościami funkcyjnymi AB —* C, BC —* D, CD —*■ A i AD —* fi.
d) R(A, fi, C, D) z zależnościami funkcyjnymi A-+B,B—*C,C—>DiD—*A
e) R(A. B, C, D,E) z zależnościami funkcyjnymi AB —> C, DE —» C, B -> D.
f) R(A, fi, C, D, fi) z zależnościami funkcyjnymi /łfi —♦ C, D —► B, C —*■ D i D —> E
należy:
i) Wskazać wszystkie naruszenia warunku BCNF. Należy rozważyć nie tylko zależności, które opisano w schemacie, ale również te, które z nich wynikają. Nic ma jednak potrzeby pokazywania tych naruszeń, w których po prawej stronie występuje więcej niż jeden atrybut.
ii) Jeśli jest to konieczne, to należy dekomponować relację do postaci spełniającej warunek BCNF.
iii) Wskazać wszystkie naruszenia warunku 3NF.
iv) Jeśli jest to konieczne, to należy dekomponować relację do postaci spełniającej warunek 3NF.
Ćwiczenie 3.7.2. W podrozdziale 3.7.4 wspominaliśmy, że jeśli zależność funkcyjna nie spełnia warunku BCNF, to trzeba, o ile jest to możliwe, rozszerzyć jej prawą stronę. Traktowaliśmy to jednak opcjonalnie. Teraz rozważmy relację R o atrybutach {A, fi, C, D), która spełnia zależności A —* B oraz A —* C. Jeśli jedynym kluczem R jest para {A, D}, to żadna z tych zależności nie jest w postaci BCNF. Zacznijmy od dekompozycji R względem zależności A —> fi. Czy dostaniemy identyczny wynik, jeśli tę zależność najpierw rozszerzymy do postaci A - > fiC? Należy' wyjaśnić dlaczego tak albo dlaczego nie.