S – student, P – przedmiot, W – wykładowca PRZYKŁAD Anomalie w 3PN : R = ( { S, P, W }, { SP W, W P }) S – student, P – przedmiot, W – wykładowca R jest w 3PN ale występuje anomalia dołączania i usuwania : R : S P W 10 a x 11 b y z Nie można przypisać wykładowcy do przedmiotu zanim nie przypisze się co najmniej jednego studenta do przedmiotu. Gdy usuwamy ostatniego studenta uczęszczającego na dany przedmiot tracimy informację o prowadzącym przedmiot
Rozkład bez straty danych: E = ( { I, N, P, O } { I N, IP O } Rozkład według zależności funkcyjnej : I N E1 = ( { I, N } { I N } ) E2 = ({ I, P, O } , { IP O } ) E : E1: E2 : I N P O I N I P O 10 f a 3 10 f 10 a 3 10 f b 4 11 g 10 b 4 11 g a 3 12 h 11 a 3 12 h a 3 12 a 3
Rozkład bez straty zależności funkcyjnych: R = ( { S, W, D } { S W, S D, D W, W D } ) Rozkład według zal. funkcyjnej : DW R1 = ( { D, W } { DW, WD } ) R2 = ({ D, S }, { SD} ) R: R1: R2 : S W D D W D S 1 x a a x a 1 2 y b b y b 2 3 x a a 3 4 y b b 4
Rozkład bez straty danych ale nie bez straty zależności funkcyjnych: R = ( {S, W, D } { SW, SD, DW, WD } ) Rozkład według zal. funkcyjnej : SW R3 = ({ S, W } { SW } ) R4 = ({ D, S }, { SD} ) R: R3: R4 : S W D S W D S 1 x a 1 x a 1 2 y b 2 y b 2 3 x a 3 x a 3 4 y b 4 y b 4
Rozkład bez straty zal. funkcyjnych ale nie bez straty danych: R = ( {A, B, C, D } { AB, BCD, DB, DC} ) R1 = ({A, B} { AB }) R2 = ({ B, C, D}, { BCD, DB, DC } ) R : R1: R2 : A B C D A B B C D a b c d a b b c d a1 b c1 d1 a1 b b c1 d1 a2 b c1 d1 a2 b R1 R2 : A B C D a b c d a b c1 d1 a1 b c d a1 b c1 d1 a2 b c d a2 b c1 d1
ALGORYTM DEKOMPOZYCJI CODDA – FAGINA Dane : S0 = { R = ( U, F ) } Wynik : SD = { Ri = ( Ui , Fi ) , i = 1,...,n } SD jest równoważny z S0 bez straty danych Ri jest w 3PN , 1 i n.
1. Określ wszystkie klucze w schemacie R. 2. Przekształć S0 do S1 = { Rj = ( Uj, Fj ) , j = 1,...,k } takiego, że: - Rj jest w 2PN , 1i k - S1 jest równoważny z S0 w sensie RD. (Wykorzystaj Twierdzenie, tzn : znajdź zależność funkcyjną postaci X Y F+, X K dla pewnego klucza K i rozłóż schemat na 2 odpowiednie projekcje ; powtarzaj postępowanie) 3. Określ atrybuty kluczowe i niekluczowe w każdym schemacie Rj , j = 1,...,k
4. Przekształć S1 do SD = { Ri = ( Ui , Fi ) , i = 1, 4. Przekształć S1 do SD = { Ri = ( Ui , Fi ) , i = 1,...,n } takiego, że : - Ri jest w 3PN , 1i n. - SD jest równoważny z S0 w sensie RD ( tzn.: znajdź schemat Ri S1 , który nie jest w 3PN i zależności X Y F+, Y X F+, YZ F+ takie, że X,Y,Z są parami rozłączne i Z jest zbiorem atrybutów niekluczowych; rozłóż Ri na dwa schematy Ri1 = Ri [ YZ] i Ri2 = Ri [ Y(U-Z) ]; powtarzaj )
ALGORYTM BERNSTEINA {Uproszczona wersja } Dane : S0 = { R = ( U, F ) } Wynik : SD = { Ri = ( Ui , Fi ) , i = 1,...,n } SD jest równoważny z S0 bez straty zal. funkcyjnych (RF) Ri jest w 3PN , 1i n (Nie zawsze)
1. Usuń zbędne atrybuty z lewych stron zależności funkcyjnych, tzn.: jeśli XY F+ i X – AY F+, to F+ := F+ - { XY}. Oznacz otrzymany zbiór zależności przez F’. 2. Znajdź minimalny zbiór F0 F’ taki, że F0+ = F’+ . 3. Podziel F0 na rozłączne podzbiory F1, ... Fm takie, że : Fi zawiera zal. fun. o identycznych poprzednikach (Ui ), i = 1,...,m. 4. Grupowanie: niech Fi = { Ui “coś” }, Fj = { Uj “coś” }; jeśli Ui Uj F0+ i Uj Ui F0+ , to utwórz jeden zbiór z Fi i Fj ; oznacz otrzymany podział przez F1, ... , Fn.
5. Utwórz schematy relacyjne : Ri = ( Ui , Fi ) , i =1,...,n gdzie Ui := { A U : (XYFi) ( A XY ) }, 6. Wyznacz klucze : K jest kluczem Ri jeśli istnieje zal. fun. KY Fi+ . 7. SD := { Ri = ( Ui , Fi ) , i = 1,...,n }