środa, 4 marca 2026

SQL - Wprowadzenie - Normalizacja

 Normalizacja

Zgodnie z definicją zamieszczoną w Encyklopedii PWN, normalizacja może być rozumiana jako:

[...] działalność mająca na celu uzyskanie optymalnego w danych okolicznościach stopnia uporządkowania w określonym zakresie (przez ustalenie postanowień przeznaczonych do powszechnego i wielokrotnego stosowania, a dotyczących problemów istniejących lub możliwych do wystąpienia), w szczególności opracowywanie, publikowanie i wdrażanie norm;

Normalizacja to proces dostosowywania schematu bazy danych do wymogów modelu relacyjnego. Jego głównym celem jest wyeliminowanie anomalii wynikających z nadmiarowości danych, które mogłyby doprowadzić do utraty spójności danych. Podczas normalizacji zmienia się strukturę tabel tworzy nowe tabele i określa łączące je relacje, ale nie usuwa się ani nie modyfikuje przechowywanych w bazie informacji.

Normalizacja baz danych ma wiele zalet:

  • zmniejsza ryzyko niespójności danych;
  • upraszcza operacje dodawania, odczytu, aktualizacji i zapisu do bazy danych;
  • pozwala łatwiej pogrupować dane (np. poprzez wyodrębnienie nowych tabel);
  • zmniejsza ostateczny rozmiar bazy danych poprzez usunięcie duplikatów;
Normalizacja baz danych ma również istotne wady. Sztywne trzymanie się zasad normalizacji może powodować powstawanie dużej ilości relacji między tabelami, co sprawia, że proste zapytanie SELECT może zmienić się w skomplikowane zapytanie zawierające wiele klauzul JOIN oraz wykorzystujące wiele tabel pośrednich. Takie zapytanie może okazać się bardziej czasochłonne i wymagające dla silnika bazodanowego.


Pierwsza postać normalna

Głównym celem doprowadzenia do pierwszej postaci normalnej jest wyeliminowanie  nieatomowych atrybutów (tabela jest zgodna z 1PN, jeśli wszystkie jej kolumny przechowują atomowe, niepodzielne wartości).  Na przykład kolumnę Adres należy rozbić na kilka kolumn przechowujących kod, nazwę miasta i ulicę, a kolumnę Osoba - na dwie zawierające osobno Imię i Nazwisko. 

Za atomowe wartości należy przyjąć takie, które mogą być użyte w przyszłości do:

  • wyszukiwani, np. znalezienia osoby o podanym nazwisku
  • sortowania, np. przygotowania listy osób ułożonej alfabetycznie według imion
  • grupowania, np. policzenia osób mieszkających w poszczególnych miastach.
Ponadto, aby tabela mogła spełnić wymogi pierwszej postaci normalnej, musi posiadać kolumnę klucza podstawowego.


Druga postać normalna


Doprowadzenie tabeli do drugiej postaci normalnej polega na usunięciu z niej kolumn, które zależą funkcyjnie od części klucza podstawowego (tabela jest zgodna z 2PN, jeżeli znajduje się już w  pierwszej postaci normalnej i wartości wszystkich niekluczowych kolumn zależą od całego klucza podstawowego). W praktyce oznacza to, że jeśli klucz podstawowy tabeli jest prosty (założony na pojedynczej kolumnie), a nie złożony (założony na kilku kolumnach) i tabela jest w 1PN, to spełnia ona też automatycznie wymogi drugiej postaci normalnej. 


Trzecia postać normalna


Doprowadzenie tabeli to trzeciej postaci normalnej polega na znalezieniu i usunięciu przechodnich zależności pomiędzy atrybutami ( tabela jest zgodna z 3PN, jeżeli jest już w drugiej postaci normalnej i wartości jej kolumn nie są zależne od niekluczowych atrybutów). 

Doprowadzenie tabel do trzeciej postaci normalnej polega na:
  1.  Utworzenie tabel słownikowych, np. tabeli z nazwami miast. Takie tabele zawierają listy (słowniki) używanych w bazie terminów, dzięki czemu zamiast każdorazowo posługiwać się danym terminem, wystarczy użyć jego identyfikatora.
  2. Utworzeniu tabel łącznikowych, czyli takich, które umożliwiają budowanie relacji typu "wiele do wielu". Na przykład jeżeli założymy, że ta sama osoba może zapisać się jednocześnie na kilka kursów, a na ten sam kurs może zapisać się wiele osób, powinniśmy utworzyć nową tabelę KursOsoba i umieścić w niej klucze obce tabel Osoby i Kursy oraz atrybuty konieczne dla połączenia kursanta z jego zajęciami. 


Postać Boyce-a-Codda


Kolejną (czasami nazywaną postacią trzy i pół) postacią normalną jest postać Boyce-a-Codda (BCNF). Jej formalna definicja brzmi następująco: tabela jest zgodna z BCNF, jeżeli jest już w trzeciej postaci normalnej i dla każdej nietrywialnej zależności między podzbiorami jej atrybutów zbiór będący wyznacznikiem jest jej zbiorem identyfikującym. 


Czwarta postać normalna 


Omówione do tej pory postacie normalne definiowane były za pomocą pojęcia zależności funkcyjnej, czyli zależności, w której na podstawie wartości jednej kolumny (lub kolumn) można wnioskować wartość innych kolumn. Normalizując tabele zgodnie z tymi postaciami, minimalizowaliśmy liczbę powtarzających się wartości.

W definicji 4PN termin "zależność funkcyjna" jest zastąpiony terminem "zależność wielowartościowa"  (tabela jest zgodna z 4PN, jeżeli jest już w postaci Boyce'a-Codda i nie występują w niej zależności wielowartościowe). Wyobraźmy sobie tabelę Produkty, w której w kolumnie Nazwa zapisane są nazwy rożnych przedmiotów (np. krzesło, lornetka i tak dalej). W kolejnych kolumnach znajdują się wartości różnych atrybutów tych przedmiotów, np. w kolumnie Obicie kolor obicia, a w kolumnie Ogniskowa dane o ogniskowej obiektywu. Jako różne przedmioty mają rżzne cechy wiele komórek takiej tabeli będzie pustych. Powodem takiej anomalii jest występowanie  zależności wielowarstwowej, czyli takiej, w której na podstawie jednej kolumny  (nazwy przedmiotu) można wnioskować o wielu kolumnach. Aby doprowadzić  tabelę do postaci zgodnej z czwartą postacią normalną, należy ją rozbić na osobne tabele, których kolumny będą zawierały wyłącznie nazwy cech obiektów danego typu. 

Brak komentarzy:

Prześlij komentarz

SQL - Wprowadzenie - Składnia języka SQL

  Składnia języka SQL W języku SQL występuje 5 głównych kategorii syntaktycznych: identyfikatory, czyli nazwy obiektów literały, czyli stałe...