Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Postacie normalne

Normalizacja polega na sprowadzaniu bazy danych do jednej z tak zwanych postaci normalnych. Postać normalna to zbiór reguł, które bazy danych powinny spełniać. W sumie istnieje pięć takich postaci (pięć zbiorów reguł), przy czym większość rzeczywistych baz danych ogranicza się do trzeciej postaci normalnej.

Każda kolejna postać normalna jest szczególnym przypadkiem poprzedniej. Oznacza to, że baza danych, która jest w trzeciej postaci normalnej, spełnia także warunki pierwszej oraz drugiej postaci normalnej. Oznacza to także, że baza w piątej postaci normalnej spełnia warunki wszystkich postaci normalnych.

Przedstawia to poniższy schemat:

RRyzSR3q9eYdO
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Reguły pierwszej postaci normalnej

Pierwsza postać normalna zdefiniowana jest przez kilka prostych zasad.

  1. Jedna tabela opisuje jeden obiekt.

  2. Wartości atrybutów są atomoweatrybut atomowyatomowe.

  3. Tabela nie zawiera powtarzających się informacji.

  4. Znaczenie kolumn nie zależy od ich kolejności.

Tabelę, która nie spełnia któregoś z powyższych warunków, nazywamy nieznormalizowaną. Poniżej, znajduje się przykład tabeli opisującej gości oraz pokoje w hotelu, ta tabela łamie reguły od 1 do 3.

Nieznormalizowana tabela Goscie i Pokoje:

RhZGWyigcOjWg

W jaki sposób ta tabela łamie powyższe reguły?

Po pierwsze, tabela ta miesza informację o pokojach z informacjami o gościach, w ten sposób łamiąc zasadę nr 1.

Po drugie, atrybut Goscie zawiera listę, co łamie zasadę 2. Tę i poprzednią kwestię można rozwiązać poprzez rozdzielenie aktualnej tabeli na dwie mniejsze, jedną opisującą gości a drugą pokoje.

Po trzecie, informacja o bieżącej liczbie gości w pokojach znajduje się już w kolumnie Goscie, co oznacza, że kolumna Biezaca_liczba_gosci zawiera powtarzające się informacje.

Ciekawostka

Tabela nie łamie reguły nr 4, ponieważ, jeśli zamienimy kolejność kolumn, nie zmieni się ich znaczenie. W praktyce złamanie tej reguły może być wynikiem nieuwagi ze strony programisty. Istnieją przykłady łamania tej reguły – lewa kolumna Liczba opisuje aktualną liczbę gości, a prawa – maksymalną.

R6psFoj5kZtiL

Teraz kolejność kolumn ma znaczenie (rozróżniamy je na prawą i lewą). W związku z tym ta tabela łamie regułę nr 4 postaci normalnej, ponieważ jeśli zamienimy je miejscem, rekordy zmienią sens - zmieni się informacja o liczbie gości w pokoju.

Doprowadzenie do pierwszej postaci normalnej

Głównym problemem tabel jest próba zamieszczenia zbyt wielu informacji. Może się wydawać, że trzymanie wszystkich informacji w jednym miejscu będzie wygodne. Jednak praktyka pokazuje, że przy takim podejściu w miarę rozbudowywania w bazie pojawiają się wskazane problemy.

Istnieją techniki pozwalające na przekształcenie dowolnej bazy do postaci normalnej.

Pierwszym krokiem jest usunięcie zbędnych informacji. W tym przypadku z tabeli Goscie i Pokoje należy usunąć pole Biezaca_liczba_gosci.

Tabela Goscie i Pokoje po pierwszej poprawce:

R1SdjX9tL9nSl

W kolejnym kroku należy rozdzielić tabelę Goscie i Pokoje na dwie osobne tabele po to, aby pozbyć się listy w kolumnie Goscie (a dzięki temu ułatwić przyszłą rozbudowę bazy). Jak to zrobić?

Każdy gość może być przypisany do tylko jednego pokoju, ale każdy pokój może być przypisany do wielu gości. Jest to tak zwana relacja 1‑N (jeden pokój - wiele osób).

Po stworzeniu osobnej tabeli Goscie musi być w niej przechowywana kolumna numerów pokoju (po jednym numerze dla każdego gościa).

Nowa tabela Goscie po zastosowaniu zmian:

R14CxApcjUiNT

Zwróć uwagę na to, że teraz każdy gość posiada swój identyfikator (klucz główny)klucz główny(klucz główny), w formie numeru. Nie możemy używać imienia i nazwiska jako klucza głównego, ponieważ istnieje (stosunkowo mała, ale realna) szansa, że dwóch gości będzie miało to samo imię i nazwisko.

Tabela Pokoje po modyfikacji:

RFJzhHqQ1K9Qu

Kolumna Biezaca_liczba_gosci została usunięta, ponieważ była powtórzoną informacją. Jak teraz uzyskać informację o liczbie gości w pokoju, np. w pokoju 1.? Wystarczy policzyć liczbę rekordów w kolumnie Pokoj w tabeli Goscie, w których numer pokoju to 1. W praktyce pisze się zapytania do bazy danych, aby otrzymać tego typu informacje.

Dzięki poprawkom tabele są teraz w pierwszej postaci normalnej.

Dla zainteresowanych

Ktoś dociekliwy mógłby zapytać, czy powtórzenia numerów pokoi w kolumnie Pokoj nie łamią zasady o niepowtarzaniu informacji.

Powtórzona liczba to nie to samo co powtórzona informacja. Można porównać tę sytuację z oryginalną tabelą Goscie i Pokoje, w której usunięcie kolumny Biezaca_liczba_gosci nie prowadziło do utraty żadnych danych, bo można było policzyć gości w kolumnie Goscie. Natomiast w nowej tabeli Goscie usunięcie numeru pokoju usunie z bazy danych jakąkolwiek informację o tym, gdzie dany gość jest zameldowany.

W tym przypadku numery w kolumnie Pokoj w tabeli Goscie nie stwierdzają wyłącznie istnienia danego pokoju (gdyby tak było, istotnie doszłoby do powtórzenia). Kolumna Pokoj mówi o tym, gdzie dany gość jest zameldowany i jest jedyną instancją tej informacji.

Anomalie

Ważnym aspektem normalizacji jest uniknięcie tak zwanych anomalii wstawiania, usuwania i modyfikacji. Anomalie powodują problemy podczas wykonywania tych operacji.

Tabela przedstawia nauczycieli w pewnej szkole, sale, w których uczą oraz przedmioty przez nich prowadzone.

ROXzhICtDBJUd

Anomalia wstawiania

Zachodzi kiedy nie możemy zamieścić jakieś informacji w bazie danych bez dodatkowego zamieszczenia innej informacji.

Jeśli szkoła zatrudni nowego nauczyciela, to nie może go zarejestrować w systemie bez przypisania sali.

Anomalia usuwania

Taka anomalia zachodzi kiedy podczas usunięcia niepotrzebnej informacji jesteśmy zmuszeni usunąć inną, przydatną informację.

Na przykład kiedy nauczyciel tymczasowo przestanie nauczać swoich przedmiotów, to usunięcie informacji o przedmiotach automatycznie usunie wszystkie wzmianki o tym nauczycielu z bazy danych.

Anomalia modyfikacji

Anomalia modyfikacji pojawia się w przypadku, kiedy istnieje możliwość stworzenia sprzeczności wskutek nieprzemyślanej modyfikacji danych.

Załóżmy, że jeden nauczyciel może uczyć wszystkich przedmiotów tylko w jednej sali. Teraz da się zmodyfikować tylko jeden wpis z numerem sali i spowodować sprzeczność w bazie danych.

Słownik

atrybut atomowy
atrybut atomowy

atrybut niepodzielny; na przykład liczba całkowita, ciąg znaków, wartość logiczna

klucz główny
klucz główny

kolumna w tabeli, w której żaden rekord nie może się powtarzać; służy on jako identyfikator wierszy; może to także być wiele kolumn, takich, że żadne dwa wiersze nie posiadają wszystkich wartości takich samych w tych kolumnach (oznacza to, że wartości klucza głównego nie mogą być takie same dla dwóch różnych rekordów)