# NORMALIZOWANIE BAZ DANYCH

### Zależności funkcyjne

Zależności funkcyjne sa to związki występujące pomiędzy atrybutami relacji. Jako przykład można podać tabelę w której dwie osoby o takim samym nazwisku i imieniu funcjonują na tej samej liście. Osoby te mają różne nemery identyfikacyjne. Dlatego też imiona i nazwiska zależą funkcjonalnie od numerów do których zostały przypisane.

atrybut A | atrybut B | atrybut C
--- | --- | ---
l.p. | Nazwisko | Imię
1. | Nowak | Adam
2. | Nowak | Adam
3. | Nowak | Ewa
4. | Paluch | Tomasz

W powyższym przykładzie nie jesteśmy w stanie wyznaczyć osoby według imienia i nazswiska. jedyną możliwością jest wyznaczenie osoby wedgług numeru.
(artybuty B i C tworzą zależność od atrybutu A.

### Pełna zależność funkcyjna

Występuje wówczas gdy po usunięciu jednego artybutu jesteśmy w stanie jednoznacznie zidentyfikować osobę

atrybut A | atrybut B | atrybut C
--- | --- | ---
Nazwisko | Imię | wzrost
Nowak | Adam | 152
Nowak | Adam | 188
Nowak | Ewa | 173
Paluch | Tomasz | 183

(usuwając z powyższej tabeli atrybut B nie jesteśmy w stanie określić który nowak jaki ma wzrost)

atrybut A | atrybut C
--- | ---
Nazwisko | wzrost
Nowak | 152
Nowak | 188
Nowak | 173
Paluch | 183

W powyższym przykładzie nie zachodzi "Pełna zależność funkcyjna"

### Przechodnia zależność funkcyjna

Zachodzi wówczas, gdy atrybut C jest zależny od atrybutu B, a atrybut B jest zależny od atrybutu A

atrybut A | atrybut B | atrybut C
--- | --- | ---
Nr | Nazwisko | Nr telefonu
1. | Nowak | 721 376 700
2. | Nowak | 722 700 376
3. | Nowak | 513 492 356
4. | Paluch | 514 356 492

W przykładzie tym atrybut C jest zależny od atrybutu A ponieważ gdy osoba (atrybut B) zmieni nr telefonu to ulegnie on również zmianie dla atrybutu A

Istnieją jeszcze inne zależności funkcyjne jak wieloartościowa i złączeniowa

### NORMALIZOWANIE

Poziomy normalizacji baz danych (według narastającej normalizacji):

- N1NF - baza danych, nie posiadająca pierwszego stopnia normalizacji
- 1NF - pierwsza postać normalna
- 2NF - druga postać normalna
- 3NF - trzeci postać normalna - bazę uważa się za znormalizowaną
- BCNF - postać normalna Boyce'a-Codda
- 4NF - czwrta postać normalna
- RFNF - postać normalna wolna od redundancji (Redundance Free)
- SKNF - postać normalna zawierająca SUPERKEY
- 5NF - piąta postać normalna
- 6NF - szósta postać normalna

## 1NF - First Normal Form

Tabela musi być relacyjną i musi spełniać warunki

- pola powinny zawierać minimalną ilość i wartość danych (najlepiej jedną)
- każdy wiersz jest unikatowy
- atrybuty mogą się powtarzać

przykład:

Nazwisko | Nr telefonu
--- | ---
Nowak | 721 376 700
Nowak | 722 700 376
Nowak | 513 492 356
Paluch | 514 356 492

## 2NF - Second Normal Form

Wszytkie kolumny nie należące do klucza głównego muszą od niego zależeć i muszą być przez niego jednoznacznie identyfikowane. Dane mogą być redundantne (mogą się powtarzać, ale nie w kluczu głównym)

przykład:

ID_Osoby | Nazwisko | Nr telefonu
--- | --- | ---
1. | Nowak | 721 376 700
2. | Nowak | 722 700 376
3. | Nowak | 513 492 356
4. | Paluch | 514 356 492

## 3NF - Third Normal Form

Przykład tabeli nie spełniajcej normalizacji:

ID_Osoby | Nazwisko | Imię | Nr telefonu
--- | --- | --- | ---
1. | Nowak | Anna | 721 376 700
2. | Nowak | Adam | 721 376 700
3. | Paluch | Tomasz | 514 356 492

Powiyższą tabelę należy rozbić (zmiana nr telefou w krotce 2. nie pociągnie zmiany numeru telefonu w krotce 1.) na dwie mniejsze: osoby i numery telefonów. Wówczas zmiana telefonu wywoła zmianę we wszystkich krotkach

Przykład tabel spełniących normalizację 3NF:

ID_Telefonu | Nr telefonu
--- | ---
1. | 721 376 700
2. | 514 356 492
ID_Osoby | Nazwisko | Imię | ID_Telefonu
--- | --- | --- | ---
1. | Nowak | Anna | 1
2. | Nowak | Adam | 1
3. | Paluch | Tomasz | 2

W powyższej sytuacji zmieniając numer telefonu 1 zmieni się on dla obu "Nowaków" - co było naszym zamysłem.

## BCNF - Boyce'a-Codda Normal Form

Postać relacji w której atrybut prosty lub złożony jest kluczem dla każdego innego atrybutu relacji. Inny atrybut (B, C, BC, ...) nie może być częścią klucza głównego lub innym podkluczem relacji. Innaczej: jeżeli relacja posiada klucz kandydujący (złożony z przynajmniej 2 atrybutów np. AB) będący jednocześnie kluczem głównym to postać BCNF jest spełniona, ale jeżeli zachodzi relacja że atrybu C może być kluczem dla atrybutu A to postać BCNF nie jest już spełniona

Przykład:

Postać BCNF nie spełniona:
ID_Osoby | Przedmiot | Wykładowca
--- | --- | ---
Nowak | j.ang. | Holms
Kowalski | j.ang | Klark
Paluch | j.niem. | Gutz
| Postać BCNF spełniona:
ID_Osoby | Przedmiot
--- | ---
Nowak | j.ang.
Kowalski | j.ang
Paluch | j.niem.

## 4NF - Fourth Normal Form

Czwarta forma normalizacji całkowicie eliminuje możliwość umieszczania wielowartościowych (MVD - multi-valued-dependency) danych w tabeli BCNF.

Przykład:

Postać 4NF nie spełniona:
ID_Osoby | Przedmioty
--- | ---
Nowak | j.angielski, j.niemiecki
Kowalski | j.angielski, j. hiszpański
Paluch | j.niemiecki, j.włoski.
|  | Postać 4NF spełniona:
ID_Osoby | Zestaw
--- | ---
Nowak | 1
Kowalski | 2
Paluch | 3
Zestaw | Język 1 | Język 2
--- | --- | ---
1. | j.angielski | j.niemiecki
2. | j.angielski | j.hiszpański
3. | j.niemiecki | j.włoski

## 5NF - Fivfth Normal Form i 6NF - Sixth Normal Form

Są używane przeważnie w teorii. W formach tych eleiminuje się zależności złączeniowe które mogą wystąpić w jakikolwiek sposób. Dodatkowo 6NF jest bazą temporalną co oznacza, że może uwględniać zależności czasowe lub interwały czasowe.

## DKNF - Domain Key Normal Form

Ten typ bazy uzależnia indeksy baz od ich domen, czyli miejsc i sposobów przechowywania. Indeksy mogą być przechowywane w innych plikach, bazach, itp.

⇒ Spis treści ⇐

⇐ PREV NEXT ⇒