/NormalizacjaDanych

Z Brain-wiki

TI:WTBD/NormalizacjaDanych

Cele normalizacji

  • redukcja powtórzeń
  • redukcja anomalii w modyfikacji danych
  • uproszczenie reguł integralności

Anomalie danych

  • efekt uboczny usuwania -- usuwając encję tracimy więcej danych niż zamierzaliśmy usunąć
  • efekt uboczny modyfikacji -- zmiana wartości atrybutu wymaga dalszych kaskadowych zmian dla utrzymania integralności
  • efekt uboczny wstawiania -- dodanie encji może wymagać dodania atrybutów których wartości są aktualnie niedostępne lub nie istnieją

Postaci normalne

Każda kolejna postać normalna zakłada spełnienie poprzedniej. Klucz główny to atrybut lub zbiór atrybutów, których wartość jednoznacznie określa encję (wiersz tabeli).

1NF
Każdy atrybut niekluczowy jest funkcyjnie zależny od klucza głównego

Zależność funkcyjna odpowiada matematycznej definicji odwzorowania (pomiędzy zbiorem wartości kluczy a dziedziną atrybutu). Doprowadzenie do 1NF wiąże się z właściwą identyfikacją klucza lub kluczy oraz eliminacją powtarzających się wartości atrybutów, zazwyczaj prowadzi to do wzrostu liczby tabel. Sygnałem naruszenia 1NF może być np. rozkładalność wartości pewnego atrybutu.

2NF
Każdy atrybut niekluczowy jest w pełni zależny funkcyjnie od klucza głównego

W pełni zależny funkcyjnie - to znaczy, że jest wyznaczony przez całość wartości klucza głównego a nie jej podzbiór właściwy. Doprowadzenie zbioru relacji do 2NF polega więc na eliminacji lub redukcji niewłaściwych kluczy złożonych - często na rzecz kluczy syntetycznych.

3NF
Każdy atrybut niekluczowy jest bezpośrednio (a nie przechodnio) zależny od klucza głównego

Z zależnością przechodnią mamy do czynienia wtedy, gdy klucz główny K wyznacza (funkcyjnie) atrybuty A i B, ale wartość atrybutu B jest również wyznaczona funkcyjnie przez wartość atrybutu A. Stwierdając taką sytuację, powiązane atrybuty przenosimy do oddzielnej tabeli.

Prosty przykład normalizacji

Gwiazdkami oznaczam atrybuty kluczowe (wchodzące w skład klucza głównego danej tabeli)

 KURSY(NAZWA, NR_PRAC, NAZW_PRAC, NR_STUD, NAZW_STUD, OCENA, TYP_OCENY)
 {tabela nieznormalizowana}
 KURSY(NAZWA*, NR_PRAC, NAZW_PRAC)
 ZALICZENIA(NAZWA_K*, NR_STUD*, NAZW_STUD, OCENA, TYP_OCENY*)
 {1NF}
 KURSY(NAZWA*, NR_PRAC, NAZW_PRAC)
 STUDENCI(NR_STUD*, NAZW_STUD)
 ZALICZENIA(NAZWA_K*, NR_STUD*, OCENA, TYP_OCENY*)
 {2NF}
 KURSY(NAZWA*, NR_PRAC)
 WYKLADOWCY(NR_PRAC*, NAZW_PRAC)
 STUDENCI(NR_STUD*, NAZW_STUD)
 ZALICZENIA(NAZWA_K*, NR_STUD*, OCENA, TYP_OCENY*)
 {3NF}
  1. Bez powtórzeń
  2. Pola zależą od klucza
  3. Od całego klucza
  4. I niczego innego, tylko klucza
  5. Tak mi dopomóż Codd

;-)))