156 .v rhlaCYJNY moim: i. danych
wystarczający dla relacji odpowiadającej tej klasie. Sposób postępowania w takich przypadkach zostanie przedstawiony w podrozdziale 3.7. Okaże się wówczas, że związek typu wiele do wiele można rozłożyć między klasy, które w nim uczestniczą. Wynikowy zbiór schematów relacji jest bardzo podobny do schematów, które uzyskujemy bezpośrednio z przekształceń diagramów związków encji*.
Ćwiczenie 3.5.1. Rozważmy relację populacji w Polsce, która zawiera: nazwisko, PESEL, adres, miasto, województwo, kod pocztowy, NIP oraz numer telefonu (7 cyfr). Jakie zależności funkcyjne mogłyby tu zachodzić? Co jest kluczem takiej relacji? Aby odpowiedzieć na te pytania, należy coś wiedzieć o wymienionych numerach. Czy na przykład NIP i PESEL są powiązane ze sobą? Czy kod pocztowy jest związany z. NIPem? Czy dwie osoby mogą mieć taki sam PESEL? Czy mogą mieć taki sam adres i numer telefonu?
^Ćwiczenie 3.5.2. Rozważmy relację, w której zawiera się opis bieżącego stanu cząsteczek w zamkniętym pojemniku. Atrybuty tej relacji obejmują: identyfikator cząsteczki, współrzędne x, y, z położenia cząsteczki oraz. jej prędkość w układzie x. y, z. Jakich zależności funkcyjnych można by tu oczekiwać? Jakie są klucze?
IĆwiczenic 3.5.3. W ćwiczeniu 2.3.2 ustaliliśmy cztery założenia na temat związku Urodzenia. Należy określić klucze relacji odpowiadających poszczególnym przypadkom.
HĆwiezenie 3.5.4. Załóżmy, że w relacji R występują atrybuty: A,, A2. ...,An. Określić liczbę nadkluczy R w funkcji n, jeśli:
*a) Jedynym kluczem może by6A\.
b) Kluczem może być tylko A, lub A2.
c) Kluczem może być albo {Au A2}, albo {A2, At}.
d) Kluczem może być albo {.4,, .42}> albo {Ah /!?}.
W bieżącym podrozdziale nauczy-my się, w jaki sposób prowadzić wnioskowanie na temat zależności funkcyjnych. Załóżmy, że uzyskaliśmy informacje na temat zależności spełnianych przez relację. Często, nawet bez oglą-
’ Dlatego moglibyśmy projekt w języku ODL przekształcić do postaci związków encji, a dopiero potem tworzyć schemat relacyjny. Mimo że można by w ten sposób rozw iązać część problemów', które są charakterystyczne dla podejścia opisanego w podrozdziale 3.2, jednak nie jest to jedyna droga. Techniki projektowania relacyjnego opisane w podrozdziale 3.7, których i tak trzeba się nauczyć, są co najmniej tak samo efektywne.
dania przykładów krotek, można określić pewne warunki, które musza być spełnione w relacji. Możliwość określenia takich warunków jest niezbędna przy projektowaniu dobrego schematu dla relacji, co zamierzamy omówić w podrozdziale 3.7.
PRZYKŁAD 3.26
Jeśli wiadomo, że w relacji R z atrybutami A, B i C zachodzą związki funkcyjne A —► B i B —* C, to łatwo jest wyprowadzić wniosek, że zachodzi również zależność funkcyjna A —> C. W jaki sposób uzasadnić taki wniosek? Żeby udowodnić, że zachodzi zależność A —* C musimy zanalizować dwie krotki z R, które są zgodne dla A, i uzasadnić, żc muszą być wówczas zgodne dla C.
Załóżmy, żc nasze dwie krotki zgodne dla A mają postać (o, b\, ci) oraz (a, bi, c2)- Przyjęliśmy, że porządek atrybutów w R określono jako A. B, C. Ponieważ spełniona jest zależność A -* B, a nasze krotki są zgodne dla A% więc muszą być również zgodne dla B. Oznacza to, że b\ = b2, a więc postać naszych krotek w rzeczywistości jest następująca: (a, b, Cj) i («, b, c2), gdzie b jest równe £1 i b2. Z kolei ponieważ R spełnia także zależność B —> C\ więc jeśli krotki są zgodne dla B, to są również zgodne dla C. A zatem C\ = c2, czyli nasze krotki są zgodne dla C. W ten sposób wykazaliśmy, żc każde dwie krotki relacji R, które są zgodne dla A. są również zgodne dla C, a zatem zachodzi zależność funkcyjna A —* C.
□
Jeśli zależności funkcyjne można określić na różne sposoby i nic ma to wpływu na instancje relacji, to takie zależności nazywamy równoważnymi. Jeszcze ogólniejsza właściwość polega na tym, żc zbiór zależności funkcyjnych S wynika ze zbioru zależności funkcyjnych. To oznacza, że jeśli z faktu, iż dowolna instancja relacji R spełnia wszystkie zależności w T, wynika, że spełnia także wszystkie zależności w S. Zauważmy, żc zbiory zależności funkcyjnych .S i '/' są równoważne wtedy i tylko wtedy, kiedy z S wynika T i jednocześnie z T wynika S.
Poznamy teraz kilka użytecznych zasad dotyczących zależności funkcyjnych. Zasady te, mówiąc najogólniej, pozwalają na zastępowanie zbioru zależności funkcyjnych zbiorami równoważnymi lub na dołączanie do zbioru tych zależności, które wynikają ze zbioru początkowego. Widzieliśmy już przykład 3.26 z regułą przechodniości (fransitwe ride), która umożliwia przejście przez łańcuch zależności. Poznamy także algorytm, który' umożliwia udzielenie odpowiedzi na pytanie oto. czy jakaś zależność funkcyjna wynika z jednej lub więcej zależności.
W punkcie 3.5.1 określiliśmy zależność funkcyjną: A1, A->,..., A„ —* B\B2... Bm