/NormalizacjaDanych
Spis treści
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}
- Bez powtórzeń
- Pola zależą od klucza
- Od całego klucza
- I niczego innego, tylko klucza
- Tak mi dopomóż Codd
;-)))