CodeGym /Kursy /SQL SELF /Wprowadzenie do normalizacji danych

Wprowadzenie do normalizacji danych

SQL SELF
Poziom 25 , Lekcja 0
Dostępny

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:

  1. 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.
  2. 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.
  3. Uproszczenie struktury danych. Im prostsza struktura, tym łatwiej nią zarządzać.
  4. 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 Lin pojawia 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:

  1. W analitycznych bazach danych, gdzie liczy się szybkość zapytań, a nie minimalizacja rozmiaru danych.
  2. Gdy struktura robi się zbyt skomplikowana: jeśli dla zachowania normalnych form musimy pracować z dziesiątkami tabel, zapytania będą coraz bardziej rozbudowane.
  3. 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!

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION