- 1. dlaczego potrzebujemy normalizacji? problem redundancji i anomalii
- Trzy główne typy anomalii:
- 2. czym jest pierwsza postać normalna (1NF)?
- 3. identyfikacja naruszeń 1NF – studium przypadku
- 4. proces transformacji do 1NF
- Metoda 1: spłaszczenie tabeli (powielenie wierszy)
- Metoda 2: utworzenie nowych tabel (dekompozycja)
- 5. podsumowanie i znaczenie 1NF
1. dlaczego potrzebujemy normalizacji? problem redundancji i anomalii
Samo umieszczenie danych w tabelach nie gwarantuje, że struktura bazy danych jest dobra. Źle zaprojektowane tabele cierpią na redundancję danych, czyli niepotrzebne powtarzanie tych samych informacji. Redundancja jest nie tylko marnotrawstwem miejsca, ale przede wszystkim prowadzi do poważnych problemów z utrzymaniem spójności danych, zwanych anomaliami.
Normalizacja to formalny, krok po kroku proces dekompozycji (rozbijania) tabel w celu zminimalizowania redundancji i wyeliminowania anomalii.
Trzy główne typy anomalii:
-
-
- – Anomalia wstawiania (Insertion Anomaly): Niemożność dodania pewnych faktów do bazy, dopóki nie pojawią się inne. Przykład: Nie możemy dodać nowego działu, dopóki nie zatrudnimy w nim pierwszego pracownika.
-
- – Anomalia usuwania (Deletion Anomaly): Utrata pewnych faktów przy usuwaniu innych. Przykład: Usunięcie ostatniego pracownika z działu powoduje utratę informacji o istnieniu samego działu.
-
- – Anomalia modyfikacji (Modification Anomaly): Konieczność aktualizacji tych samych danych w wielu miejscach, co grozi niespójnością. Przykład: Zmiana nazwy działu wymaga modyfikacji wszystkich wierszy pracowników tego działu.
-
Anomalia wstawiania (Insertion Anomaly): Niemożność dodania pewnych faktów do bazy, dopóki nie pojawią się inne. Przykład: Nie możemy dodać nowego działu, dopóki nie zatrudnimy w nim pierwszego pracownika.
- Anomalia usuwania (Deletion Anomaly): Utrata pewnych faktów przy usuwaniu innych. Przykład: Usunięcie ostatniego pracownika z działu powoduje utratę informacji o istnieniu samego działu.
- Anomalia modyfikacji (Modification Anomaly): Konieczność aktualizacji tych samych danych w wielu miejscach, co grozi niespójnością. Przykład: Zmiana nazwy działu wymaga modyfikacji wszystkich wierszy pracowników tego działu.
2. czym jest pierwsza postać normalna (1NF)?
Pierwsza Postać Normalna (1NF) to absolutne minimum, które musi spełniać każda tabela w relacyjnej bazie danych. Stanowi ona fundament dla dalszych etapów normalizacji.
Definicja 1NF: Relacja (tabela) jest w Pierwszej Postaci Normalnej wtedy i tylko wtedy, gdy:
- Posiada zdefiniowany klucz główny, który unikalnie identyfikuje każdy wiersz.
- Wszystkie atrybuty (kolumny) zawierają wartości atomowe (niepodzielne).
Warunek atomowości oznacza, że żadna komórka w tabeli nie może zawierać listy, zbioru, tablicy ani innej złożonej struktury. Każde przecięcie wiersza i kolumny musi zawierać dokładnie jedną wartość.
3. identyfikacja naruszeń 1NF – studium przypadku
Rozważmy tabelę Projekty_Pracownikow, która przechowuje informacje o pracownikach i projektach, w których biorą udział.
| ID_Pracownika | Nazwisko | Projekty | Telefony |
|---|---|---|---|
| 101 | Kowalski | Projekt Alfa, Projekt Beta | 111-222-333, 444-555-666 |
| 102 | Nowak | Projekt Alfa | 777-888-999 |
Ta tabela narusza 1NF z dwóch powodów:
- Atrybut wielowartościowy (grupa powtarzalna): Kolumna
Projektydla pracownika 101 zawiera listę dwóch projektów. To samo dotyczy kolumnyTelefony. Przechowywanie danych w ten sposób uniemożliwia efektywne wyszukiwanie (np. „znajdź wszystkich pracowników projektu Beta”) i zarządzanie danymi.
4. proces transformacji do 1NF
Aby doprowadzić tabelę do 1NF, musimy wyeliminować atrybuty wielowartościowe. Istnieją na to dwie główne metody.
Metoda 1: spłaszczenie tabeli (powielenie wierszy)
Jest to najczęstsze i najbardziej poprawne podejście. Tworzymy nowy, oddzielny wiersz dla każdej wartości z atrybutu wielowartościowego.
| ID_Pracownika | Projekt | Nazwisko | Telefon |
|---|---|---|---|
| 101 | Projekt Alfa | Kowalski | 111-222-333 |
| 101 | Projekt Beta | Kowalski | 111-222-333 |
| 101 | Projekt Alfa | Kowalski | 444-555-666 |
| 101 | Projekt Beta | Kowalski | 444-555-666 |
| 102 | Projekt Alfa | Nowak | 777-888-999 |
Analiza: Tabela jest teraz w 1NF. Każda komórka zawiera jedną wartość. Kluczem głównym stał się klucz złożony {ID_Pracownika, Projekt, Telefon}. Zauważmy jednak, że ta metoda drastycznie zwiększyła redundancję (dane Kowalskiego są powtórzone cztery razy). Ta redundancja zostanie wyeliminowana w kolejnych krokach normalizacji (2NF i 3NF).
Metoda 2: utworzenie nowych tabel (dekompozycja)
Lepszym podejściem, które od razu prowadzi do wyższych postaci normalnych, jest utworzenie oddzielnych tabel dla atrybutów wielowartościowych.
| ID_Pracownika | Nazwisko |
|---|---|
| 101 | Kowalski |
| 102 | Nowak |
| ID_Pracownika_FK | Projekt |
|---|---|
| 101 | Projekt Alfa |
| 101 | Projekt Beta |
| 102 | Projekt Alfa |
| ID_Pracownika_FK | Telefon |
|---|---|
| 101 | 111-222-333 |
| 101 | 444-555-666 |
| 102 | 777-888-999 |
Analiza: To podejście jest znacznie lepsze. Wszystkie trzy tabele są w 1NF, a ponadto od razu spełniają warunki 2NF i 3NF, ponieważ nie ma w nich zależności częściowych ani przechodnich.
5. podsumowanie i znaczenie 1NF
Pierwsza Postać Normalna jest fundamentem, na którym buduje się całą strukturę relacyjnej bazy danych. Jej głównym celem jest zapewnienie, że dane są przechowywane w sposób ustrukturyzowany i atomowy, co umożliwia ich efektywne przetwarzanie za pomocą języka SQL.
Chociaż samo osiągnięcie 1NF nie eliminuje wszystkich problemów z redundancją, jest niezbędnym pierwszym krokiem. Ujawnia ono ukryte zależności i przygotowuje grunt pod dalsze etapy normalizacji (2NF i 3NF), które prowadzą do stworzenia dobrze zaprojektowanego, spójnego i wolnego od anomalii schematu bazy danych.
