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
Już wiesz

Wiedza na temat pierwszej postaci normalnej (i jej implementacji) jest konieczna, aby zrozumieć drugą postać normalną. Jest ona szczególnym przypadkiem pierwszej postaci.

Dla przypomnienia – reguły pierwszej postaci normalnej:

  • jedna tabela opisuje jeden obiekt;

  • wartości atrybutów są atomowe;

  • tabela nie zawiera powtarzających się informacji;

  • znaczenie kolumn nie zależy od ich kolejności.

Druga postać normalna opiera się na pierwszej postaci normalnej, dodając kilka dodatkowych zasad. Jednak aby je zrozumieć, konieczne jest wprowadzenie paru nowych pojęć.

Klucz potencjalny

Czasem nazywa się go kluczem kandydującym. To minimalny zbiór atrybutów, których zestaw wartości jest unikalny dla każdego rekordu.

Prościej: jedna kolumna lub więcej kolumn, w których nie występują dwa rekordy, mające wszystkie wartości identyczne. Dodatkowo jest to minimalna konieczna liczba kolumn o tej własności.

Klucz potencjalny służy jako wielokolumnowy identyfikator dla rekordów.

Spróbujmy znaleźć klucz potencjalny dla tabeli:

RCkfAp1Q4kk7z

W każdej kolumnie znajduje się jakieś powtórzenie, a więc pojedyncza kolumna nie może być tu kluczem kandydującym. Wybranie pojedynczej kolumny nie spełniałoby w tym przypadku warunku unikalności.

Teraz należy się zastanowić, jaka para kolumn nie posiada powtórzeń.

Nie są nimi AutorTytuł, bo dwa wiersze mogą mieć wówczas identyczne wartości, a różniłyby się rodzajem okładki. Czyli nie zostałaby spełniona reguła unikalności.

Kluczem kandydującym jest zatem TytułRodzaj okładki, ponieważ dwa wiersze nie mogą mieć tych dwóch wartości identycznych.

Dla zainteresowanych

Skąd pewność, że nie mogą?

Załóżmy, że istnieją dwa wiersze o tych samych polach TytułRodzaj okładki. To, że mają ten sam Tytuł, oznacza, że mają tego samego Autora. Podczas gdy ten sam Tytuł i Rodzaj okładki oznaczałby tę samą cenę.

Po wzięciu pod uwagę wszystkich parametrów, okazuje się, że te wiersze musiałby być identyczne, na co większość baz danych nie pozwala. Można więc bezpiecznie założyć, że żadne dwa wiersze nie mogą mieć tych samych TytułówRodzajów okładki.

Zależność funkcyjna

Szeroko rozumiana zależność pomiędzy atrybutami. Zachodzi, gdy wartość jednego atrybutu jest jednoznacznie zdefiniowana przez jeden lub więcej innych atrybutów.

Przykładowa zależność funkcyjna w powyższej tabeli to zależność TytułAutor. Oznacza ona, że jeśli znamy wartość Tytuł w danym wierszu, to z góry wiadomo, jaki będzie Autor.

Jeśli np. wiemy, że Tytuł to „Krzyżacy”, to z góry wiadomo, że Autorem będzie Henryk Sienkiewicz.

Innym przykładem jest zależność Autor, Tytuł, Rodzaj okładkiCena. Ponieważ te pola jednoznacznie definiują cenę. Jest to także przykład zależności jednego atrybutu od wielu innych atrybutów.

Ważne!

Zależność funkcyjna nie wynika z danych w tabelach, ale z ich znaczenia w rzeczywistości. Załóżmy, że w tabeli cena „Przygód Hucka”  wynosi 19,00 zł. Można się wtedy pokusić o stwierdzenie, że istnieje zależność Rodzaj okładkiCena, jednak byłby to błąd, ponieważ taka zasada nie obowiązuje w tej bazie danych. Jakiś nowy wiersz może w przyszłości nie spełniać tej reguły.

Zależności funkcyjne trzeba przeanalizować logicznie i dojść do wniosku, czy zawsze muszą być spełnione. Zależność funkcyjna jest prawdziwa tylko wtedy, kiedy nie istnieją od niej wyjątki.

Druga postać normalna

Teraz, gdy znane są nam pojęcia klucza potencjalnego oraz zależności funkcyjnej, możemy przejść do właściwej definicji drugiej postaci normalnej.

Druga postać normalna
Definicja: Druga postać normalna

Relacja (tabela) jest w drugiej postaci normalnej wyłącznie wtedy, gdy spełnia warunki pierwszej postaci normalnej oraz gdy żadna kolumna nienależąca do klucza potencjalnego nie zależy funkcyjnie od jego fragmentu.

Prościej – aby być w drugiej postaci normalnej, tabela jednocześnie musi:

  • być w pierwszej postaci normalnej;

  • nie posiadać kolumny, której wartości można wywnioskować z niektórych wartości klucza kandydującego (mogą być wnioskowane z całego klucza).

Można zauważyć, że druga reguła ma na celu zwiększenie bezpieczeństwa spójnościSpójnośćspójności – tak samo jak w przypadku pierwszej postaci normalnej.

Przeanalizujmy wcześniejszy przykład tabeli zawierającej informacje o książkach w pewnym wydawnictwie oraz niespełniającej wymagań drugiej postaci normalnej.

RnzN2DcLqGz88

Wiemy, że jedyny klucz potencjalny to Tytuł, Rodzaj okładki. Wiemy także, że istnieje zależność TytułAutor. Wynika z tego, że pole Autor zależy funkcyjnie tylko od fragmentu klucza, a nie od całości. Z tego powodu ta relacja nie spełnia wymagań drugiej postaci normalnej.

Sprowadzenie do drugiej postaci normalnej

Polega ono na stworzeniu dodatkowej relacji, w której zostanie przechowana część danych z modyfikowanej relacji.

W tym przypadku chcemy, aby znalazły się w niej kolumny Autor oraz Tytuł. Dzięki temu będzie można usunąć Autora z tabeli i doprowadzić ją do drugiej postaci normalnej.

Tabele po modyfikacji:

RiWwCVohAu3EP
RZhNzlKMlsJFd

Teraz zastanówmy się, czy nowa tabela także spełnia wymagania drugiej postaci normalnej. Jedynym kluczem potencjalnym jest Tytuł, ponieważ Autorowi może odpowiadać wiele Tytułów, ale jednemu Tytułowi tylko jeden Autor. Oznacza to, że pola Tytuł nie mogą się powtarzać.

Dodatkowo istnieje zależność funkcyjna TytułAutor. Taka zależność spełnia wymagania trzeciej postaci normalnej, bo pole Autor zależy funkcyjnie od całego klucza potencjalnego w tej relacji.

Ważne!

Tego typu rozwiązanie można uogólnić. Aby doprowadzić tabelę z pierwszej do drugiej postaci normalnej należy:

  1. Zidentyfikować zależności funkcyjne, których lewa strona to tylko fragment klucza potencjalnego.

  2. Utworzyć nową relację o atrybutach będących fragmentem klucza z poprzedniego punktu.

  3. Dodać kolejnych atrybutów, będących prawą stroną zależności funkcyjnej (atrybuty za strzałką w zapisie zależności).

  4. Usunąć atrybuty z prawej strony zależności z oryginalnej relacji.

W tym przypadku realizowaliśmy te kroki poprzez:

  1. Zidentyfikowanie zależności Tytuł →  Autor, podczas gdy klucz potencjalny to Tytuł, Rodzaj okładki.

  2. Utworzenie relacji o atrybucie Tytuł.

  3. Dodanie do niej atrybutu Autor.

  4. Usunięcie Autora z oryginalnej tabeli.

Słownik

spójność
spójność

brak sprzecznych informacji w bazie danych; może zostać naruszona np., gdy w bazie znajduje się wiele kopii danej informacji, a w wyniku jakieś kwerendy lub procedury zmieniona zostanie tylko jedna instancja tej informacji