Normalizacja to proces sprawnego organizowania danych w bazie danych. Istnieją dwa cele procesu normalizacji: eliminacja zbędnych danych (na przykład przechowywanie tych samych danych w więcej niż jednej tabeli) i zapewnienie zgodności z danymi (tylko przechowywanie powiązanych danych w tabeli). Obie te wartości są godnymi celami, ponieważ zmniejszają ilość miejsca, które zajmuje baza danych i zapewniają logiczne przechowywanie danych. Nadmiarowe dane powodują marnowanie miejsca na dysku i powodują problemy z utrzymaniem.
Jeśli dane istniejące w więcej niż jednym miejscu muszą zostać zmienione, dane muszą zostać zmienione dokładnie w ten sam sposób we wszystkich lokalizacjach. Zmiana adresu klienta jest znacznie łatwiejsza do wdrożenia, jeśli dane są przechowywane tylko w tabeli Klienci i nigdzie indziej w bazie danych. Co to jest „niespójna zależność”? Chociaż intuicyjne jest, aby użytkownik zaglądał do tabeli klientów pod adres konkretnego klienta, może nie mieć sensu szukać tam wynagrodzenia pracownika, który dzwoni do tego klienta. Wynagrodzenie pracownika jest powiązane z pracownikiem lub od niego zależne i dlatego powinno zostać przeniesione do tabeli Pracownicy.
Niespójne zależności mogą utrudnić dostęp do danych, ponieważ ścieżka do znalezienia danych może być brakująca lub uszkodzona. Społeczność baz danych opracowała serię wytycznych dla zapewnienia normalizacji baz danych. Są one nazywane normalnymi postaciami i są ponumerowane od jednej (najniższa forma normalizacji, określanej jako pierwsza normalna forma lub 1NF) do pięciu (piąta normalna forma lub 5NF). W praktycznych zastosowaniach często widzisz 1NF, 2NF i 3NF razem ze sporadycznymi 4NF. Piąta normalna forma jest bardzo rzadko spotykana i nie będzie omawiana w tym artykule. Podobnie jak w przypadku wielu formalnych reguł i specyfikacji, rzeczywiste scenariusze nie zawsze pozwalają na doskonałą zgodność.
Ogólnie rzecz biorąc normalizacja wymaga dodatkowych tabel, a niektórzy klienci uważają to za kłopotliwe. Jeśli zdecydujesz się na naruszenie jednej z trzech pierwszych reguł normalizacji, upewnij się, że Twoja aplikacja przewiduje wszelkie problemy, które mogą wystąpić, takie jak nadmiarowe dane i niespójne zależności. Zanim rozpoczniemy dyskusję na temat normalnych formularzy, należy podkreślić, że są one jedynie wytycznymi. Czasami konieczne staje się odejście od nich w celu spełnienia praktycznych wymagań biznesowych. Jednak, gdy mają miejsce zmiany, niezwykle ważne jest, aby ocenić ewentualne konsekwencje, jakie mogą one mieć w systemie i uwzględnić ewentualne niespójności. To powiedziawszy, zbadajmy normalne formy.
Pierwsza normalna forma (1NF)
Pierwsza normalna forma (1NF) określa bardzo podstawowe reguły dla zorganizowanej bazy danych:
Wyeliminuj powtarzające się kolumny z tej samej tabeli.
Twórz oddzielne tabele dla każdej grupy powiązanych danych i identyfikuj każdy wiersz za pomocą unikalnej kolumny lub zestawu kolumn (klucz podstawowy).
Druga postać normalna (2NF)
Druga normalna forma (2NF) dodatkowo rozwiązuje problem usuwania powtarzających się danych:
Spełnij wszystkie wymagania pierwszej normalnej formy.
Usuń podzbiory danych, które dotyczą wielu wierszy tabeli i umieść je w osobnych tabelach.
Twórz relacje między tymi nowymi tabelami a ich poprzednikami za pomocą obcych kluczy.
Trzecia postać normalna (3NF)
Trzecia normalna forma (3NF) idzie o jeden krok dalej:
Spełnij wszystkie wymagania drugiej normalnej formy.
Usuń kolumny, które nie są zależne od klucza podstawowego.
Normalna forma Boyce’a-Codda (BCNF lub 3.5NF)
Normalna forma Boyce’a-Codda, określana również jako „trzecia i druga (3.5) normalna forma”, dodaje jeszcze jeden wymóg:
Spełnij wszystkie wymagania trzeciej normalnej formy.
Każda determinanta musi być kluczem kandydującym.
Czwarta postać normalna (4NF)
Wreszcie czwarta normalna forma (4NF) ma jedno dodatkowe wymaganie:
Spełnij wszystkie wymagania trzeciej normalnej formy.
Relacja jest w 4NF, jeśli nie ma zależności wielowartościowych.
Pamiętaj, że te wytyczne dotyczące normalizacji są kumulatywne. Aby baza danych była w 2NF, musi najpierw spełnić wszystkie kryteria bazy danych 1NF.
Czy powinienem normalizować?
Choć normalizacja baz danych często jest dobrym pomysłem, nie jest bezwzględnym wymogiem. W rzeczywistości istnieją przypadki, w których dobrowolną praktyką jest celowe łamanie zasad normalizacji.
Jeśli chcesz upewnić się, że twoja baza danych jest znormalizowana, zacznij od nauki, jak umieścić swoją bazę danych w pierwszej normalnej formie.