Normalizacja schematu bazy danych Radosław Fijołek Paweł Romanowski 171128 Paweł Trzos
Normalizacja schematu bazy danych Normalizacja Postaci normalne
Postaci normalne Pierwsza postać normalna 1 NF Opisuje jeden obiekt Wartości elementów są elementarne Posiada klucz główny Kolejność wierszy dowolna
Pierwsza postać normalna - przykład Przed normalizacją: rower motor pojazd samochód nazwisko posiadacza Kowalski, Dąbrowski Janik, Drzymała Nowak, Olecki Po normalizacji: pojazd rower rower motor motor samochód samochód nazwisko posiadacza Kowalski Dąbrowski Janik Drzymała Nowak Olecki
Druga postać normalna Jest w pierwszej postaci normalnej Jeśli każdy atrybut tej relacji nie wchodzący w skład żadnego klucza potencjalnego jest w pełni funkcyjnie zależny wyłącznie od wszystkich pod-relacji klucza głównego
Druga postać normalna - przykład Przed normalizacją: id data id odbiorcy Po normalizacji: nazwisko odbiorcy nazwa dostawcy adres dostawcy 1 12.12.2010 3 Nowak FastTrans Wadowice 2 14.12.2010 4 Nowak Guliwer Warszawa id data id odbiorcy 1 12.12.2010 3 FastTrans 2 14.12.2010 4 Guliwer nazwa dostawcy id odbiorcy nazwisko odbiorcy 3 Nowak 4 Nowak nazwa dostawcy FastTrans Guliwer adres dostawcy Wadowice Warszawa
Trzecia postać normalna Jest w drugiej postaci normalnej Każdy atrybut jest funkcjonalnie zależny jedynie od klucza głównego, nie mogą więc istnieć jakiekolwiek zależności przechodnie
Trzecia postać normalna - przykład Przed normalizacją: Po normalizacji: imię nazwisko miejse urodzenia powiat Emil Zając Pszczyna pszczyński Zofia Zima Pszczyna pszczyński Eulalia Jańska Szczebrzeszyn zamojski imię nazwisko miejse urodzenia Emil Zając Pszczyna Zofia Zima Pszczyna Eulalia Jańska Szczebrzeszyn miejscowość Pszczyna Szczebrzeszyn powiat pszczyński zamojski
Postać normalna Boyce-Codda Jest postacią uzupełniają trzecią postać normalną Zależność od nadklucza, ale brak zależności nie od klucza
Postać normalna 3NF, ale nie BC MUK czyli {Miasto, Ulica, Kod} z zależnościami: {Miasto, Ulica} Kod Kod Miasto 2 klucze: {Miasto, Ulica} {Kod, Ulica}
Przykład normalizacji bazy danych Nr Tancerza Nazwisko tancerza Nr Powołania Godzina Instruktor 1 John 0 09:00 Gołota 2 Kerr 0 09:00 Zabójca 3 Jane 1 10:00 Gołota 4 Robert 0 13:00 Zabójca 5 Sonia 1 14:00 Gołota Klub tańca. Każdej osobie zostaje przypisany numer powołania w zależności od umiejętności. Od 0 nic, 1 podstawy, 2 zaawansowany. Osoby z nazwiskami do litery 'P' powoływane są przed południem 9-13, reszta po południu 13-17.
Przykład normalizacji bazy danych Zależności takiej bazy danych KlubTanca(Nr Tancerza,Nazwisko Tancerza,Nr Powołania,Godzina,Instruktor) Nr Tancerza -> Nazwisko Tancerza Nr Tancerza,Nr Powołania -> Godzina, Instruktor Godzina -> Nr Powołania Wybieramy klucze główne np.: Nr Tancerza i Nr Powołania KlubTanca(Nr Tancerza,Nazwisko Tancerza,Nr Powołania,Godzina,Instruktor)
Przykład normalizacji bazy danych Pierwsza postać normalna: KlubTanca(Nr Tancerza,Nazwisko Tancerza,Nr Powołania,Godzina,Instruktor) Nic nie zmieniamy ponieważ nie ma powtórzeń
Przykład normalizacji bazy danych Druga postać normalna: KlubTanca(Nr Tancerza,Nazwisko Tancerza,Nr Powołania,Godzina,Instruktor) Zależności częściowe występują więc je eliminujemy KlubTanca(Nr Tancerza,Nr Powołania, Godzina,Instruktor) KT1(Nr Tancerza, Nazwisko Tancerza)
Przykład normalizacji bazy danych Trzecia postać normalna: KlubTanca(Nr Tancerza,Nr Powołania, Godzina,Instruktor) KT1(Nr Tancerza, Nazwisko Tancerza) Zależności przechodnie nie występują, więc jest już w trzeciej postaci normalnej
Przykład normalizacji bazy danych Postać normalna BC: KlubTanca(Nr Tancerza,Nr Powołania, Godzina,Instruktor) KT1(Nr Tancerza, Nazwisko Tancerza) Każdy wyznacznik jest kluczem kandydujacym Nr Tancerza jest w obu tabelach Nazwisko Tancerza tylko w drugiej czyli jest OK i zostawiamy Jednak w relacjach początkowych mamy jeszcze relacje: Godzina Nr Powołania Obie kolumny znajdują się w pierwszej tabeli, czyli nie jest jeszcze w postaci BCNF
Przykład normalizacji bazy danych Postać normalna BC cd: Po przekształceniu uzyskujemy: KlubTanca(Nr Tancerza, Godzina,Instruktor) KT1(Nr Tancerza, Nazwisko Tancerza) KT2(Godzina, Nr Powołania)
Dziękuję za uwagę.