39
PODSTAWY BAZ DANYCH
r
Zależność złączeniowa związana jest z operacją rzutowania. Rzut (projekcję) możemy przedstawić jako pionową maszynę do cięcia tabeli. Projekcja powstaje przez wybór określonych kolumn. Jeśli zatem potrzebujemy podzielić zmienną-relację na dwie mniejsze zmienne relacyjne, wykorzystując do tego operację rzutowania, oznacza to, że za pomocą wyboru kolumn określimy, które atrybuty znajdą się w tabeli nr 1, a które znajdą się w tabeli i nr 2.
Za pomocą zależności funkcyjnych wyłaniamy klucze kandydujące, aby spośród nich wybrać jeden, który zostanie kluczem głównym relacji. Cały proces wyznaczania klucza głównego rozpoczynamy od określenia atrybutów (lub grup atrybutów) jednoznacznie identyfikujących każdą krotkę. W ten sposób wyznaczymy zestaw kluczy kandydujących. Spośród nich wybierzemy klucz główny, kierując się zasadą, że klucz główny to taki atrybut (lub zestaw atrybutów), od którego zależne funkcyjnie są wszystkie niekluczowe atrybuty.
Wyznaczanie zależności funkcyjnych jest więc ważne na etapie poprzedzającym identyfikację klucza głównego i kluczy kandydujących. W systemach bazodanowych klucz główny jest automatycznie indeksowany1. Należy więc rozważyć, czy wskazywanie jako klucza głównego kilku atrybutów, których typy pozwalają umieszczać w nich duże ilości danych | (w każdej krotce), nie będzie wiązało się ze sporym obciążeniem systemu.
Normalizacja jest procesem mającym na celu redukowanie anomalii zachowań relacyjnych baz danych poprzez tworzenie mniejszych tabel opartych na dobrze zaprojektowanych relacjach. Aby uniknąć późniejszych błędów podczas projektowania bazy danych, można odnieść się do koncepcji poka-yoke (japońskiej metody eliminacji wad i poprawy jakości). Jest ona związana z zagadnieniem projektowania defensywnego oraz wczesnych błędów. Próbując, dzięki pewnym ustalonym regułom, uchronić aplikację (w naszym wypadku bazę danych) od późniejszych błędów, zaoszczędzimy czas związany z koniecznością jej modyfikacji lub modyfikacji oprogramowania współpracującego z określoną bazą danych. Normalizacja jest zbiorem reguł, które, choć nie są skomplikowane, bywają przedstawiane w bardzo zawiły sposób, dlatego w tym rozdziale zostanie ona omówiona na przykładach.
Celem normalizacji jest izolowanie danych. Pojęcie to oznacza, że modyfikacja (wstawianie lub usuwanie określonej informacji) odbywa się w jednym polu, skąd zmiana przenoszona jest za pomocą zdefiniowanych związków (powiązań) do pozostałych tabel bazy danych.
Wynalazca modelu relacyjnego - Edgar F. Codd - w 1970 roku przedstawił model relacyjny znany jako pierwsza postać normalna. W podręczniku będziemy się posługiwać skrótem, ponieważ normalizację oznacza się powszechnie za pomocą skrótu NF (Normal Form)', analogicznie postaci normalne od 1 do 6 będą oznaczane INF, 2NF 3NF itd. Codd jest twórcą 1, 2 i 3 postaci normalnej. W 1971 roku Codd i Raymond F. Boyce opracowali wspólnie postać normalną nazwaną Boyce-Codd Normal Form (BCNF). Stąd, gdy mówimy o bazie danych spełniającej BCNF, mamy na myśli bazę danych przeprowadzoną przez 1, 2, 3 NF i spełniającą BCNF. Wyższe formy normalne definiowane były w kolejnych latach przez innych teoretyków. Ostatnią jest szósta forma normalna (6NF), którą wprowadzili Chris Datę, Hugh Darwen i Nikos Lorentzos w 2002 roku. W powszechnie przyjętych praktykach baza danych sprowadzona do 3NF uznawana jest za znormalizowaną, ponieważ jej tabele w większości są wolne od anomalii, które w pewnych przypadkach mogłaby spowodować modyfikacja związana z wstawieniem i usunięciem danych. W przypadkach
Pojęcie indeksowania wyjaśniono w rozdz. 3.7 „Indeksy".