Bazy danych 05

Download Report

Transcript Bazy danych 05

Bazy danych
05:
Normalizacja
Krzysztof Stencel
Normalizacja
= Sprowadzenie tabel do odpowiedniej postaci
normalnej
 Sprowadzenie dokonuje się poprzez podział
tabel na mniejsze części:
 R = kol(r), podziałem nazwiemy ciąg zbiorów
P1,P2,…,Pn, taki że:
P1  P2  …  Pn = R
 Nie jest i (nie może być!) rozłączny ze względu
na zachowanie informacji.
Zachowywanie informacji



Podział P1,P2,…,Pn schematu R,  zachowuje
informacje wtw. dla każdej relacji r o
schemacie R,  zachodzi warunek:
P1 (r) ⋈ P2 (r) ⋈ … ⋈ Pn (r) = r
Warunek konieczny sensowności normalizacji.
Można z niego zrezygnować, gdy w tabeli
połączono niezwiązane ze sobą dane.
Zachowywanie zależności
funkcyjnych



↾P to podzbiór  zawierający wszystkie
zależności funkcyjne, które nie zawierają
odwołania do kolumn spoza P
Podział P1,P2,…,Pn schematu R,  zachowuje
zależności funkcyjne wtw.
(*↾P1  *↾P2  …  *↾Pn )* = *
Dobrze jest zachować zależności funkcyjne (bo
stanowią semantykę danych), ale nie jest to
konieczne.
Właściwości normalizacji 3NF
i BCNF




Każdy schemat można sprowadzić do 3NF z
zachowaniem zależności funkcyjnych i
informacji
Każdy schemat można sprowadzić do BCNF z
zachowaniem informacji
Przejście od 3NF do BCNF nie usuwa żadnych
anomalii
Za to jest prostsze
Tabela w 3NF bez „taniego”
przejścia do BCNF

R = { Kino, Miasto, Film }
–
–




Kino  Miasto
Miasto, Film  Kino
Klucze: { Kino, Film }, { Miasto, Film }
Wszystkie atrybuty są kluczowe, więc 3NF
Nie da się podzielić (przejść do BCNF) bez
utraty drugiej zależności funkcyjnej
Takie tabele są na szczęście rzadkie
Normalizacja BCNF

Weź zależność funkcyjną X  Y (XY = ),
która powoduje „problemy” i podziel tabelę R
na dwie części:
–
–


XY
R–Y
Rób tak aż do chwili, w której wszystkie
fragmenty są BCNF
Informacje są zachowane, bo obie te tabele
złączone naturalnie dają wyjściową tabelę
(klejem jest X występujący w obu tabelach)
Przykład normalizacji BCNF


R={Wykładowca,Krwawość,Wykład,Trudność,Termin}
–
Wykładowca  Krwawość
–
Wykład  Trudność
–
Wykładowca,Wykład  Termin
Krok 1: Wykładowca  Krwawość
–
–

R1 = { Wykładowca, Krwawość }
R2 = { Wykładowca, Wykład, Trudność, Termin }
Krok 2: Wykład  Trudność
–
–
R21 = { Wykład, Trudność }
R22 = { Wykładowca, Wykład, Termin }
Wynik normalizacji BCNF

Podział schematu R =
{Wykładowca,Krwawość,Wykład,Trudność,Termin}
–
–
–


Zachowano też zależności funkcyjne (widać!)
Każda powstała tabelka jest już w BCNF
–

R1 = { Wykładowca, Krwawość }
R21 = { Wykład, Trudność }
R22 = { Wykładowca, Wykład, Termin }
Zależności funkcyjne w niej obowiązujące mają
reprezentację złożoną z jednej z.f. z wszystkimi kolumnami
Przy normalizacji BCNF konieczna jest staranność,
żeby nie „zrywać” zależności funkcyjnych.
Minimalna reprezentacja
Zbiór z.f.  to minimalna reprezentacja zbioru z.f.  wtw.
 Dla każdej z.f. X  Y   zbiór Y ma jeden element
 Dla każdej z.f. X  Y  ,  ⊢ X  Y
 Jeśli X  A  , to nie jest prawdą, że
 – {X  A} ⊢ X  A
 Jeśli XZ  A   i Z , to nie jest prawdą, że
⊢XA
 Minimalna reprezentacja jest potrzebna do normalizacji
3NF, bo ta polega na wygenerowaniu tabeli dla każdej
zależności funkcyjnej
Normalizacja 3NF


Mając dany schemat R,  wyznacz jego
minimalną reprezentację .
Dla każdej z.f. X  A  , utwórz tabelę o
kolumnach X  A
–

Dla zachowania zależności funkcyjnych
Wybierz K – jeden z kluczy schematu R,  i
utwórz tabelę o kolumnach K
–
Dla zachowania informacji
Przykład normalizacji 3NF

R={ Wykładowca,Krwawość,Wykład,Trudność }
–
–


Wykład  Trudność
Jest to też minimalna reprezentacja
Krok 1: tabela dla każdej zależności funkcyjnej
–
–

Wykładowca  Krwawość
R1 = { Wykładowca, Krwawość }
R2 = { Wykład, Trudność }
Krok 2: Tabela dla jednego z kluczy
–

R3 = { Wykład, Wykładowca }
Bez kroku 2 nie zachowujemy informacji o tym, kto
prowadzi wykłady
Normalizacja 3NF: Optymalizacja 1


Usuń każdą tabelę, której zbiór kolumn jest
podzbiorem zbioru kolumn jakiejś innej tabeli
R={ Wykładowca,Krwawość,Wykład,Trudność,Termin }
– Wykładowca  Krwawość
– Wykład  Trudność
– Wykład, Wykładowca  Termin




R1 = { Wykładowca, Krwawość }
R2 = { Wykład, Trudność }
R3 = { Wykład, Wykładowca, Termin }
R4 = { Wykład, Wykładowca }
(z.f.)
(z.f.)
(z.f.)
(klucz)
Normalizacja 3NF: Optymalizacja 2


Połącz tabelę pochodzące od zależności funkcyjnych z
tym samymi lewymi stronami
R={ Wykładowca,Krwawość,Zasięg,Wykład,Trudność }
– Wykładowca  Krwawość
– Wykładowca  Zasięg
– Wykład  Trudność
–
––
–
–
R1 = { Wykładowca, Krwawość }
R12
Wykładowca,Zasięg
Krwawość,
Zasięg }
}
2 =={ {Wykładowca,
R3 = { Wykład, Trudność }
R4 = { Wykład, Wykładowca }
(z.f.)
(z.f.)
(z.f.)
(klucz)
Optymalizacja 2 jest poprawna




Weźmy tabele o schemacie R = { A, B, C, … }
i minimalnej reprezentacji zawierającej
– A B
– A C
Czy { A, B, C } może nie być 3NF? Wtedy
musiałoby być, np. B  C i też jakoś
musiałoby wynikać z minimalnej reprezentacji
Ale wtedy A  C i A  B nie mogą być razem
w minimalnej reprezentacji
Porządny dowód: przez indukcję
Inne redundancje
Imię
Lubi
Uprawia
Adam
Spać
Brydż
Andrzej
Jeździć
Tenis
Andrzej
Pływać
Tenis
Andrzej
Jeździć
Konopie
Andrzej
Pływać
Konopie
To było BCNF




Nie ma tu żadnej nietrywialnej zależności
funkcyjnej
Klucz składa się ze wszystkich kolumn
Generują się jednak lokalnie iloczyny
kartezjańskie na kolumnach Lubi i Uprawia
Takie redundancje występują jednak niezwykle
rzadko i zdarza się to tylko wyjątkowo
przemęczonym projektantom
Zależność wielowartościowa
X, Y  R – podzbiory kolumn
 Oznaczenie Z := R – X – Y
 Zależność wielowartościowa X ↠ Y zachodzi w
relacji r wtedy i tylko wtedy, gdy
 t, u  r :
t↾X=u↾X 
 w  r (w↾X=t↾X  w↾Y=t↾Y  w↾Z=u↾Z)

X ↠ Y – wyjaśnienie
 t, u  r :
t↾X=u↾X 
 w  r (w↾X=t↾X  w↾Y=t↾Y  w↾Z=u↾Z)
t : XXXXXX YYYYYY ZZZZZZ
u : XXXXXX YYYYYY ZZZZZZ

w : XXXXXX YYYYYY ZZZZZZ
Zależność funkcyjna jest też
wielowartościowa
Zakładamy, że zachodzi X  Y (X, Y  R)
 Weźmy dwie krotki t i u, takie, że t↾X=u↾X
t : XXXXXX YYYYYY ZZZZZZ
u : XXXXXX YYYYYY ZZZZZZ
 Czy istnieje w?
w: XXXXXX YYYYYY ZZZZZZ
 Tak, jest nią u
 Bo przecież XY, a więc YYYYYY = YYYYYY

Czwarta postać normalna (4NF)



Schemat jest 4NF, wtw. jest 1NF oraz każda
zależność wielowartościowa X↠A jest również
zależnością funkcyjną od nadklucza
Normalizacja jak do BCNF:
Weź z.w. X ↠ Y (XY = ), która powoduje
„problemy” i podziel tabelę R na dwie części:
–
–
XY
R–Y
W 4NF też mogą być redundancje


Schemat R = { Projekt, Towar, Dostawca }
Jeśli:
–
–
–

Dostawca D dostarcza towar T dla jakiegoś projektu
Dostawca D dostarcza jakiś towar dla projektu P
Jakiś dostawca dostarcza towar T dla projektu P
To:
–
Dostawca D dostarcza towar T dla projektu P
Bazowe fakty

Fakty biznesowe sklejone w tej tabeli to
–
–
–
Dostawca D jest w stanie dostarczyć towar T
Dostawca D pracuje dla projektu P
Projekcie P zużywa towar T
Dostawca Towar Projekt
Parys
Jabłka Eris
Parys
Wiśnie Afrodyta
Hektor
Jabłka Afrodyta
Parys
Jabłka Afrodyta
Wiersz
nadmiarowy
Zależność złączeniowa



P1,P2,…,Pn – podział R
Zależność złączeniowa ⋈(P1,P2,…,Pn)
zachodzi w relacji r wtedy i tylko wtedy, gdy
spełniony jest warunek:
P1 (r) ⋈ P2 (r) ⋈ … ⋈ Pn (r) = r
Tzn. istnienie zależności złączeniowej jest
równoważne z zachowywaniem informacji
przez podział
Piąta postać normalna (5NF)


Schemat jest 5NF, wtw. jest 1NF oraz każda
zależność złączeniowa ⋈(P1,P2,…,Pn) jest
indukowana przez nadklucz, tj.
P1  P2  …  Pn jest nadkluczem
Jeśli tabela jest 5NF, to żaden jej podział
zachowujący informacje nie ma sensu (bo i tak
w każdym fragmencie będzie ten sam klucz)
Normalizacja 5NF



Jeśli ⋈(P1,P2,…,Pn) nie jest indukowana przez
nadklucz, to podziel R na P1,P2,…,Pn .
5NF jest ostateczną postacią normalną
Dalej już się normalizować się nie da (gdy
zakładamy normalizację przez podział!)
Przykład zależności złączeniowej i
normalizacji


Schemat R = { Projekt, Towar, Dostawca }
⋈( { Projekt, Towar },
{ Projekt, Dostawca },
{ Towar, Dostawca }
)
Podziel R na:
{ Projekt, Towar },
{ Projekt, Dostawca },
{ Towar, Dostawca }
Obiecanka relacyjna
(przełożył Lech Banachowski)
Bez powtórzeń,
dane zależą od klucza,
od całego klucza
i tylko od klucza.
Tak mi dopomóż Codd!

The Key, the whole Key, and nothing but the
Key, so help me Codd.