Sobes.tech
Middle

Co wiesz o normalnych formach w bazach danych?

sobes.tech AI

Odpowiedź od AI

Formy normalne (FN) to zbiór zasad i zaleceń dotyczących projektowania struktury relacyjnej bazy danych, mających na celu minimalizację nadmiarowości danych i zapobieganie anomaliom podczas wstawiania, aktualizacji i usuwania.

Główne formy normalne:

  • Pierwsza forma normalna (1FN):

    • Każdy atrybut (kolumna) musi zawierać wartości atomowe (niepodzielne).
    • Brak powtarzających się grup atrybutów.
    • Każdy wiersz musi być unikalny (obecność klucza głównego).
  • Druga forma normalna (2FN):

    • Jest w 1FN.
    • Każdy atrybut niekluczowy musi w pełni zależeć od całego klucza głównego (jeśli klucz jest złożony).
  • Trzecia forma normalna (3FN):

    • Jest w 2FN.
    • Brak zależności przejściowych atrybutów niekluczowych od klucza głównego (atrybut niekluczowy nie powinien zależeć od innego atrybutu niekluczowego).
  • Forma Boyce-Codda (BCNF):

    • Bardziej rygorystyczna wersja 3FN.
    • Każde nietriviale $X \to Y$ musi mieć $X$ jako superklucz.
  • Czwarta forma normalna (4FN):

    • Jest w BCNF.
    • Brak zależności wielowartościowych.
  • Piąta forma normalna (5FN):

    • Jest w 4FN.
    • Brak zależności łączeniowych.

Cele normalizacji:

  • Zmniejszenie nadmiarowości danych.
  • Zapobieganie anomaliom (wstawianie, aktualizacje, usuwanie).
  • Zapewnienie integralności danych.
  • Uproszczenie struktury bazy danych.

Przykład:

Tabela z nadmiarowością (nie w 1FN):

OrderID Produkt Cena
1 Laptop, Mysz 1000, 20
2 Klawiatura 50

Znormalizowana tabela (w 1FN i wyższych):

Tabela "Zamówienia":

OrderID
1
2

Tabela "Pozycje zamówienia":

PozycjaID OrderID Produkt Cena
1 1 Laptop 1000
2 1 Mysz 20
3 2 Klawiatura 50

Normalizacja jest ważnym etapem projektowania, ale nadmierna normalizacja może prowadzić do zwiększenia liczby połączeń w zapytaniach, co może negatywnie wpłynąć na wydajność. Wybór optymalnego poziomu normalizacji zależy od konkretnych wymagań i kompromisów. Czasami stosuje się denormalizację, aby zoptymalizować wydajność w określonych scenariuszach, świadomie naruszając zasady normalnych form.