Widziałeś kiedyś tabelę w bazie danych, która wyglądała jak magazyn gratów? W jednej komórce lista telefonów, w innej — adresy napisane jednym długim zdaniem, w trzeciej — kilka dat oddzielonych przecinkami. Taki "chaos" utrudnia wyszukiwanie, aktualizację i zarządzanie danymi. Ale jest sposób na porządek. Nazywa się — normalizacja danych.
Mówiąc prosto, normalizacja danych to proces organizowania danych w tabelach tak, żeby zminimalizować nadmiarowość i wyeliminować problemy związane z aktualizacją, usuwaniem i wstawianiem danych.
Oto jakie problemy rozwiązuje normalizacja danych:
- Usuwanie duplikatów danych. Po co trzymać te same informacje dwa razy? Albo trzy? To zwiększa rozmiar bazy i prowadzi do niespójności danych.
- Minimalizacja anomalii. Wiesz, jak w życiu zdarzają się anomalie? Na przykład zapomnisz usunąć byłego kolegę z listy kontaktów. W bazach danych też się to zdarza. Normalizacja pomaga unikać takich niezręcznych sytuacji.
- Uproszczenie struktury danych. Im prostsza struktura, tym łatwiej nią zarządzać.
- Przyspieszenie działania bazy danych. Mniej danych — szybsze zapytania.
A co, jeśli bez normalizacji?
Bez normalizacji dane w bazie stają się "lepkie" — ciągną za sobą jakieś zbędne kawałki informacji.
Wyobraź sobie tabelę Studenci:
| ID Studenta | Imię | Kursy |
|---|---|---|
| 1 | Otto Lin | Matematyka, Fizyka |
| 2 | Anna Song | Chemia |
| 3 | Otto Lin | Biologia, Chemia |
Co może pójść nie tak:
- Duplikacja danych:
Otto Linpojawia się kilka razy. Dlaczego? Bo chodzi na kilka kursów. - Trudno zaktualizować informacje: jeśli numer telefonu studenta Otto Lin się zmieni, musimy szukać wszystkich rekordów z nim, żeby zaktualizować numer.
- Usuwanie danych może naruszyć spójność: wyobraź sobie, że Otto postanowił rzucić kursy. Jeśli usuniemy wszystkie jego wiersze, stracimy całą informację o nim, włącznie z imieniem.
Kiedy normalizacja może być przesadą?
Powiedzmy szczerze, normalizacja to jak sztywny grafik: zawsze spoko, ale czasem chce się trochę spontaniczności. W rzeczywistości są sytuacje, kiedy denormalizacja jest lepsza:
- W analitycznych bazach danych, gdzie liczy się szybkość zapytań, a nie minimalizacja rozmiaru danych.
- Gdy struktura robi się zbyt skomplikowana: jeśli dla zachowania normalnych form musimy pracować z dziesiątkami tabel, zapytania będą coraz bardziej rozbudowane.
- Dla często używanych agregatów: jeśli ciągle liczysz tę samą sumę, lepiej ją przechowywać.
Załóżmy, że mamy sklep internetowy. Jeśli użytkownicy często szukają łącznej sumy zamówień, można trzymać tę sumę bezpośrednio w tabeli Zamówienia, zamiast liczyć ją za każdym razem.
Tylko pamiętaj, że denormalizacja to kompromis. Zwiększa szansę na błędy przy aktualizacji danych.
Przykłady problematycznej struktury i jej normalizacji
Sprawdźmy przykład tabeli przed normalizacją:
| ID Zamówienia | Klient | Produkty | Suma zamówienia |
|---|---|---|---|
| 1 | Otto Lin | Telefon, Słuchawki | 20000 |
| 2 | Anna Song | Lodówka | 30000 |
| 3 | Otto Lin | Telewizor | 40000 |
Tu widać wyraźne naruszenia:
- Dane o klientach się powtarzają.
- Produkty są przechowywane jako lista — to łamie zasadę atomowości danych.
Po normalizacji
Podzielimy tę tabelę na trzy: Tabela Klienci
| ID Klienta | Imię |
|---|---|
| 1 | Otto Lin |
| 2 | Anna Song |
Tabela Produkty
| ID Produktu | Nazwa | Cena |
|---|---|---|
| 1 | Telefon | 10000 |
| 2 | Słuchawki | 10000 |
| 3 | Lodówka | 30000 |
| 4 | Telewizor | 40000 |
Tabela Zamówienia
| ID Zamówienia | ID Klienta | ID Produktu |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 1 | 2 |
| 2 | 2 | 3 |
| 3 | 1 | 4 |
Teraz mamy:
- Brak duplikacji danych.
- Każdy produkt jest w osobnym wierszu.
- Możemy łatwo dodawać nowe produkty i zamówienia.
Normalizacja to sztuka robienia porządku z chaosu. Tak, czasem może się wydawać zbyt sztywna i wymagająca, ale jej ostateczny cel jest tego wart. W kolejnych wykładach będziemy poznawać normalne formy po kolei: najpierw 1NF, potem 2NF, a na końcu 3NF. Do przodu, ku światu uporządkowanych danych!
GO TO FULL VERSION